- ©«¤l
- 354
- ¥DÃD
- 5
- ºëµØ
- 0
- ¿n¤À
- 387
- ÂI¦W
- 0
- §@·~¨t²Î
- windows7
- ³nÅ骩¥»
- vba,vb,excel2007
- ¾\ŪÅv
- 20
- ©Ê§O
- ¨k
- µù¥U®É¶¡
- 2017-1-8
- ³Ì«áµn¿ý
- 2024-8-2
 
|
¥»©«³Ì«á¥Ñ singo1232001 ©ó 2023-11-7 10:50 ½s¿è
¦^´_ 6# 198188
3.zip (87.47 KB)
Sub test2()
Set CN = CreateObject("adodb.connection"): V = Application.Version
If V >= 12 Then V = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;"
If V < 12 Then V = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;"
CN.Open V & "Data Source=" & ThisWorkbook.FullName
Set s = Sheets("¤u§@ªí2"): s.[A:Z].ClearContents
For Each Z In Sheets
If Z.Name Like "*µ¡¥É*¶q*" Then Set s0 = Z: ar = s0.[B1:F1]
If Z.Name Like "*µ¡¥É*²M*" Then Set s1 = Z
Next
For Each Z In ar: p = p & "b.[" & Z & "]*[QTY] as [" & Z & "] , ": Next
For Each Z In ar: p1 = p1 & "sum([" & Z & "]) as '" & Z & "', ": Next
For Each Z In ar
p2 = p2 & "IIF([" & Z & "] IS NULL, 0, [" & Z & "]) AS [" & Z & "], ": Next
p = "a.[PART-NO], " & Left(p, Len(p) - 2)
p1 = Left(p1, Len(p1) - 2)
p2 = "[FRAME-NO] as [FRAME-NO], " & Left(p2, Len(p2) - 2)
q = "select [PART-NO], " & p1 & " from ( "
q = q & " select " & p & " from ( "
q = q & " select [PART-NO] ,[FRAME-NO], [QTY] from [" & s1.Name & "$A1:G]"
q = q & " ) as a left join ( "
q = q & " select " & p2 & " from [" & s0.Name & "$A1:F] "
q = q & " ) as b on a.[FRAME-NO] = b.[FRAME-NO] "
q = q & " ) group by [PART-NO] "
s.[A4].CopyFromRecordset CN.Execute(q)
s.[B3:F3] = ar: s.[A3] = "FRAME-NO"
End Sub
---¥Dµ{§Çµù¸Ñ
Sub test()
' ³Ð«Ø¤@Ó·sªºADODB³s±µ¹ï¶H
Set CN = CreateObject("adodb.connection"): V = Application.Version
' ®Ú¾ÚExcelªºª©¥»¿ï¾Ü¦X¾Aªº¼Æ¾Ú´£¨Ñµ{§Ç
If V >= 12 Then V = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;"
If V < 12 Then V = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;"
' ¶}±Ò³s±µ¨ì·í«e¤u§@ï
CN.Open V & "Data Source=" & ThisWorkbook.FullName
' ²M°£¤u§@ªí2ªºA¨ìZ¦Cªº¤º®e
Set s = Sheets("¤u§@ªí2"): s.[A:Z].ClearContents
' ¹M¾ú©Ò¦³¤u§@ªí¥H´M§ä¤Ç°t¯S©w¦WºÙ¼Ò¦¡ªº¤u§@ªí
For Each Z In Sheets
If Z.Name Like "*µ¡¥É*¶q*" Then Set s0 = Z: ar = s0.[B1:F1]
If Z.Name Like "*µ¡¥É*²M*" Then Set s1 = Z
Next
' ²Õ¦XSQL»y¥y¤¤»Ýn¥Î¨ìªº¦r¬q¦Cªí
For Each Z In ar: p = p & "b.[" & Z & "]*[QTY] as [" & Z & "] , ": Next
For Each Z In ar: p1 = p1 & "sum([" & Z & "]) as '" & Z & "', ": Next
For Each Z In ar
p2 = p2 & "IIF([" & Z & "] IS NULL, 0, [" & Z & "]) AS [" & Z & "], "
Next
' ¥h°£³Ì«á¤@Ó¦h¾lªº³r¸¹
p = "a.[PART-NO], " & Left(p, Len(p) - 2)
p1 = Left(p1, Len(p1) - 2)
p2 = "[FRAME-NO] as [FRAME-NO], " & Left(p2, Len(p2) - 2)
' ºc«Ø§¹¾ãªºSQL¬d¸ß»y¥y
q = "select [PART-NO], " & p1 & " from ( select " & p & " from ( "
q = q & " select [PART-NO] ,[FRAME-NO], [QTY] from [" & s1.Name & "$A1:G] ) as a left join ( "
q = q & " select " & p2 & " from [" & s0.Name & "$A1:F] "
q = q & " ) as b on a.[FRAME-NO] = b.[FRAME-NO] ) group by [PART-NO] "
' °õ¦æSQL¬d¸ß¨Ã±Nµ²ªG½Æ»s¨ì¤u§@ªí2ªºA4³æ¤¸®æ
s.[A4].CopyFromRecordset CN.Execute(q)
' ¦b¤u§@ªí¤W³]¸m¦r¬qªíÀY
s.[B3:F3] = ar
s.[A3] = "FRAME-NO"
End Sub
---SQL»yªkµù¸Ñ
-- ¿ï¾Ü³¡¥ó½s¸¹©M¹ïÀ³¼Æ¶q½d³òªºÁ`©M
select [PART-NO],
sum([02F-09F]) as '02F-09F',
sum([10F-17F]) as '10F-17F',
sum([18F-25F]) as '18F-25F',
sum([26F-33F]) as '26F-33F',
sum([34F-42F]) as '34F-42F'
-- ±q¥H¤U¤l¬d¸ßªºµ²ªG¤¤¶i¦æ¿ï¾Ü
from (
-- ¿ï¾Ü³¡¥ó½s¸¹©M¸g¹L¼Æ¶q¥[Åv«áªº¦U¼Æ¶q½d³ò
select a.[PART-NO],
b.[02F-09F]*[QTY] as [02F-09F],
b.[10F-17F]*[QTY] as [10F-17F],
b.[18F-25F]*[QTY] as [18F-25F],
b.[26F-33F]*[QTY] as [26F-33F],
b.[34F-42F]*[QTY] as [34F-42F]
-- ±q¤@Óªí®æ¤¤¿ï¾Ü³¡¥ó½s¸¹¡B®Ø¬[½s¸¹©M¼Æ¶q
from ( select [PART-NO], [FRAME-NO], [QTY]
from [µ¡¥É???²M³æ$A1:G] ) as a
-- ¥ª°¼³s±µ¤@Óªí®æ¡A¸Óªí®æ¬°¦U¼Æ¶q½d³ò´£¨Ñ¤FªÅȪºÀˬd©M¹w³B²z
left join (
select [FRAME-NO],
IIF([02F-09F] IS NULL, 0, [02F-09F]) AS [02F-09F],
IIF([10F-17F] IS NULL, 0, [10F-17F]) AS [10F-17F],
IIF([18F-25F] IS NULL, 0, [18F-25F]) AS [18F-25F],
IIF([26F-33F] IS NULL, 0, [26F-33F]) AS [26F-33F],
IIF([34F-42F] IS NULL, 0, [34F-42F]) AS [34F-42F]
from [µ¡¥É¤À§å¼Æ¶q$A1:F]
) as b
-- ³s±µ±ø¥ó¬O¨âÓ¤l¬d¸ßªº®Ø¬[½s¸¹¬Û¦P
on a.[FRAME-NO] = b.[FRAME-NO]
)
-- ³Ì«á«ö³¡¥ó½s¸¹¶i¦æ¤À²Õ¡A¹ï¨C²Õ¶i¦æ²Îp
group by [PART-NO]
³oÓ¬d¸ßªº¥Øªº¬O¬°¤F¦Xp¨CÓ³¡¥ó½s¸¹¡]PART-NO¡^¦b¤£¦Pªº¼Æ¶q½d³ò¡]¦p02F-09F, 10F-17F µ¥¡^¤ºªº¼Æ¶q¡A¨Ã±Nµ²ªG§@¬°·sªº¦CÅã¥Ü¡C³o¬O³q¹L¹ï¨âÓªí¶i¦æ¥ª³s±µ¨Ã¦b³s±µ¤§«á¹ï¼Æ¶q¶i¦æ¼ªk¾Þ§@¨Ó¹ê²{ªº¡A¦pªGìªí¤¤ªº¼Æ¾Ú¬°ªÅ¡]NULL¡^¡A«h¸Ó¼Æ¶q½d³òªºÈ±N³Qµø¬° 0¡C³Ì«á¡A¬d¸ß«ö·Ó³¡¥ó½s¸¹¹ï³o¨Ç¥[Åv«áªº¼Æ¶q¶i¦æ¤F¤À²Õ©M¨D©M¡C
---SQL§ïVBAµù¸Ñ
' ªì©l¤Æ¬d¸ß¦r²Å¦ê q
q = "select [PART-NO], " & p1 & " from ( select " & p & " from ( "
' ¦¹³B q ¶}©lºc«Ø¤@Ó´O®M¬d¸ß
' º¥ý¡A¿ï¾Ü PART-NO ©M¥Ñ p1 Åܶqªí¥Üªº¤@¨t¦C¨Ï¥Î»E¦X¨ç¼Æ sum() ªº¦C¡A³o¨Ç¦C¦W¥Ñ¤u§@ªí s0 ªº B1:F1 ³æ¤¸®æ¨M©w
' p1 ¤¤ªº¦C¬O¥Ñ¤§«e´`Àôºc«Øªº¡A¥]§t¤F±N¨CÓ¦CªºÁ`©M«·s©R¦W¬°¸Ó¦C¦Wªº»y¥y
q = q & " select [PART-NO], [FRAME-NO], [QTY] from [" & s1.Name & "$A1:G] ) as a left join ( "
' ±µ¤U¨Ó²K¥[¤F±q s1 ¤u§@ªí¿ï¾Ü PART-NO, FRAME-NO, QTY ³o¤T¦Cªº¤l¬d¸ß
' ¦¹¤l¬d¸ß³Q½á¤©§O¦W a¡A¨Ãp¹º»P§O¦W¬° b ªº¥t¤@Ó¤l¬d¸ß¶i¦æ¥ª³s±µ
q = q & " select " & p2 & " from [" & s0.Name & "$A1:F] "
' ³o¸Ì²K¥[¤F²Ä¤GÓ¤l¬d¸ß¡A³o¦¸¬O±q s0 ¤u§@ªí¤¤¿ï¾Ü¥Ñ p2 Åܶqªí¥Üªº¦C
' p2 ¥]§t¤F¤@¨t¦Cªº IIF »y¥y¡A¥Î¨ÓÀˬd s0 ¤u§@ªí¤¤ªº¦C¬O§_¬° NULL¡A¦pªG¬° NULL «h´À´«¬° 0¡A§_«h«O¯dìÈ
' ³o¨Ç¦C¤]³Q«·s©R¦W¬°ì¨Óªº¦C¦W
q = q & " ) as b on a.[FRAME-NO] = b.[FRAME-NO] ) group by [PART-NO] "
' ³Ì«á¡A±N¨âÓ¤l¬d¸ß³q¹L FRAME-NO ¶i¦æ¥ª³s±µ¡A¨Ã¦b¥~¼h¬d¸ß¤¤«ö PART-NO ¶i¦æ¤À²Õ
' ³o·N¨ýµÛ§Ú̱N±o¨ì«ö PART-NO ¤À²Õªº¨CÓ PART-NO ªº©Ò¦³¦CªºÁ`©M¡A¨ä¤¤¨Ó¦Û s0 ªº¼Æ¾Ú±N¥H 0 ´À´«ªÅÈ
' ±N¾ãÓ¬d¸ß½áȵ¹ q Åܶq
s.[A4].CopyFromRecordset CN.Execute(q)
' °õ¦æ¤Wz SQL ¬d¸ß¡A¨Ã±Nµ²ªG±q°O¿ý¶°½Æ»s¨ì¤u§@ªí s ¤¤ A4 ³æ¤¸®æ¶}©lªº¦ì¸m |
|