quanluu
Thành viên gắn bó
Tức là ý bác phải giống y chang ạ? có dòng trống ở "Color Detail"? Em dùng thêm code nữa đc ko ạ?(Để trau truốt giống như hìn)Cám ơn bạn đã tham gia, tuy nhiên kết quả chưa giống theo như hình mẫu.
Tức là ý bác phải giống y chang ạ? có dòng trống ở "Color Detail"? Em dùng thêm code nữa đc ko ạ?(Để trau truốt giống như hìn)Cám ơn bạn đã tham gia, tuy nhiên kết quả chưa giống theo như hình mẫu.
Đúng thế, chỉ dùng ADO, không dùng code thêm nữa bạn.Tức là ý bác phải giống y chang ạ? có dòng trống ở "Color Detail"? Em dùng thêm code nữa đc ko ạ?(Để trau truốt giống như hìn)
Sub GPE() Dim Query As String
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
ThisWorkbook.FullName _
& ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
.Open
End With
Query = "SELECT A.f1, A.f2,SWITCH(A.f1 = A.f2, B.f2, A.f1 <> A.f2, null)" & Chr(10)
Query = Query & "FROM (select distinct f1, f2 from [D2:E13]) As A " & Chr(10) & "RIGHT JOIN [A2:B6] As B ON B.f1 = A.f1 "
rs.Open Query, cn
Range("K2").CopyFromRecordset rs
rs.Close: cn.Close: Set rs = Nothing: Set cn = Nothing
End Sub
Thế này thì lại càng sai so với mẫu (lúc đầu mình dùng iff rùi, thấy ko ổn nên để kiểu đó)Chế lại code của bản kia nhưng chưa tìm ra cách sắp sếp sao cho giống file mẫu
Mã:Sub GPE() Dim Query As String Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") With cn .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ ThisWorkbook.FullName _ & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";" .Open End With Query = "SELECT A.f1, A.f2,SWITCH(A.f1 = A.f2, B.f2, A.f1 <> A.f2, null)" & Chr(10) Query = Query & "FROM (select distinct f1, f2 from [D2:E13]) As A " & Chr(10) & "RIGHT JOIN [A2:B6] As B ON B.f1 = A.f1 " rs.Open Query, cn Range("K2").CopyFromRecordset rs rs.Close: cn.Close: Set rs = Nothing: Set cn = Nothing End Sub
FWT166.1 | Khung mặt | |
FWT166.1 | FWT166.1 | Red |
FWT166.1 | Chân | |
FWT034 | Khung mặt | |
FWT034 | FWT034 | white |
FWT034 | Chân | |
FWT034 | Khung mặt | |
FWT034 | FWT034 | Grey |
FWT034 | Chân | |
WCF015 | WCF015 | white |
WCF015 | Mặt ngồi | |
WCF015 | Chân dài | |
WCF015 | WCF015 | Grey |
WCF015 | Mặt ngồi | |
WCF015 | Chân dài |
Mình biết là nó sẽ ntn, nhưng bạn so sánh với bản mẫu là khác nhau nhiều, nó theo quy luật sắp xếp, còn kết quả này chỉ là có đủ dòng và hiện màu với những dòng có f1 = f2 thui, chứ ko theo quy luật của Color detailKết quả mình có dc từ code
FWT166.1 Khung mặt FWT166.1 FWT166.1 Red FWT166.1 Chân FWT034 Khung mặt FWT034 FWT034 white FWT034 Chân FWT034 Khung mặt FWT034 FWT034 Grey FWT034 Chân WCF015 WCF015 white WCF015 Mặt ngồi WCF015 Chân dài WCF015 WCF015 Grey WCF015 Mặt ngồi WCF015 Chân dài
thì mình thêm mấy cái Order by zô nữa cho giống . hi hiMình biết là nó sẽ ntn, nhưng bạn so sánh với bản mẫu là khác nhau nhiều, nó theo quy luật sắp xếp, còn kết quả này chỉ là có đủ dòng và hiện màu với những dòng có f1 = f2 thui, chứ ko theo quy luật của Color detail
Không đc pro ơi, oder nó theo vần mà bác. Mà em cũng order rùi đấy chứ. Hoặc là em ko hiểu ý bác.thì mình thêm mấy cái Order by zô nữa cho giống . hi hi
Không đc pro ơi, oder nó theo vần mà bác. Mà em cũng order rùi đấy chứ. Hoặc là em ko hiểu ý bác.
Mình nghĩ là không, ngay cả "case when" nó cũng không support.Hình như ADO excel không support ROW_NUMBER phải hem bác.
Không đc pro ơi, oder nó theo vần mà bác. Mà em cũng order rùi đấy chứ. Hoặc là em ko hiểu ý bác.
RÁng chút nữa đi bạn, gần được rồi đó.Kết quả mình có dc từ code
FWT166.1 Khung mặt FWT166.1 FWT166.1 Red FWT166.1 Chân FWT034 Khung mặt FWT034 FWT034 white FWT034 Chân FWT034 Khung mặt FWT034 FWT034 Grey FWT034 Chân WCF015 WCF015 white WCF015 Mặt ngồi WCF015 Chân dài WCF015 WCF015 Grey WCF015 Mặt ngồi WCF015 Chân dài
Em vẫn chưa nghĩ ra cách order, nhưng em dùng mẹo 1 chút để ra kết quả giống đề bài vậy.cái bảng đâu có nhiều cột lắm đâu , cứ nghịch dại vài cột thử xem sao ? xếp vài ba cột 1 lúc xem sao ?
Sub GPE()
Dim Query As String
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
ThisWorkbook.FullName _
& ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
.Open
End With
Query = "select f1,f2, iif(f1=f2,f3,null) from (SELECT A.f1, A.f2, iif(a.f1 = a.f2,B.f2, b.f2 + '1') as f3 " & Chr(10)
Query = Query & "FROM (select distinct f1, f2 from [D2:E13]) As A " & Chr(10) & "LEFT JOIN [A2:B6] As B ON B.f1 = A.f1) order by f1,f3"
rs.Open Query, cn
Range("K2").CopyFromRecordset rs
rs.Close: cn.Close: Set rs = Nothing: Set cn = Nothing
End Sub
Kết quả đúng rồi, tuy nhiên nên tìm cách nào đó dùng 1 sub query thôi.Em vẫn chưa nghĩ ra cách order, nhưng em dùng mẹo 1 chút để ra kết quả giống đề bài vậy.
Mong 2 pro @Hai Ly Mien Tay và @doveandrose chỉ giáo thêm.
Mã:Sub GPE() Dim Query As String Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") With cn .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ ThisWorkbook.FullName _ & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";" .Open End With Query = "select f1,f2, iif(f1=f2,f3,null) from (SELECT A.f1, A.f2, iif(a.f1 = a.f2,B.f2, b.f2 + '1') as f3 " & Chr(10) Query = Query & "FROM (select distinct f1, f2 from [D2:E13]) As A " & Chr(10) & "LEFT JOIN [A2:B6] As B ON B.f1 = A.f1) order by f1,f3" rs.Open Query, cn Range("K2").CopyFromRecordset rs rs.Close: cn.Close: Set rs = Nothing: Set cn = Nothing End Sub
Hóa ra order cũng dùng đc công thức. Em sửa lại ntn ạ.Kết quả đúng rồi, tuy nhiên nên tìm cách nào đó dùng 1 sub query thôi.
Sub GPE()
Dim Query As String
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
With cn
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
ThisWorkbook.FullName _
& ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";"
.Open
End With
Query = "SELECT A.f1, A.f2, iif(a.f1=a.f2,B.f2,null) " & Chr(10)
Query = Query & "FROM (select distinct f1, f2 from [D2:E13]) As A " & Chr(10) & "LEFT JOIN [A2:B6] As B ON B.f1 = A.f1 ORDER BY a.f1, IIF(A.f1 = a.f2,b.f2,b.f2 + '1')"
rs.Open Query, cn
Range("K2").CopyFromRecordset rs
rs.Close: cn.Close: Set rs = Nothing: Set cn = Nothing
End Sub
Chính xác là như vậy, cảm ơn bạn đã tham gia, mong rằng đề tài này tiếp tục có nhiều thành viên quan tâm giống như bạn.Hóa ra order cũng dùng đc công thức. Em sửa lại ntn ạ.
Mã:Sub GPE() Dim Query As String Set cn = CreateObject("ADODB.Connection") Set rs = CreateObject("ADODB.Recordset") With cn .ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ ThisWorkbook.FullName _ & ";Extended Properties=""Excel 12.0 Xml;HDR=NO;IMEX=1"";" .Open End With Query = "SELECT A.f1, A.f2, iif(a.f1=a.f2,B.f2,null) " & Chr(10) Query = Query & "FROM (select distinct f1, f2 from [D2:E13]) As A " & Chr(10) & "LEFT JOIN [A2:B6] As B ON B.f1 = A.f1 ORDER BY a.f1, IIF(A.f1 = a.f2,b.f2,b.f2 + '1')" rs.Open Query, cn Range("K2").CopyFromRecordset rs rs.Close: cn.Close: Set rs = Nothing: Set cn = Nothing End Sub
Tiện đây em cũng xin góp vui 1 bài toán: Tính tiền điện bằng ADO.
Các bạn coi file để rõ bài toán.
Em cảm ơn anh đã góp ý, em đã sửa bài rùi ạ.Mình thấy cách đặt vấn đề có gì đó không ổn?
ADO là công cụ quản trị dữ liệu kết nối và khai thác CSDL từ các nguồn có hỗ trợ chứ đâu có tham gia tính toán.
Cái mà bạn nói là kết quả của SQL đấy chứ. Vậy nên, 1 chủ đề thảo luận nó cũng cần có mức độ chính xác nhất định kẻo "thiên hạ" đánh giá nhà ta.
Cái này cho vào hàm iif, kết hợp phép toán +,-,* là ra.Em cảm ơn anh đã góp ý, em đã sửa bài rùi ạ.
IIf([SoDien]<=100,[SoDien]*2000,IIf([SoDien]<=200,100*2000+([SoDien]-100)*1600,IIf([SoDien]<=300,100*2000+100*1600+([SoDien]-200)*1200,IIf([SoDien]<=500,100*2000+100*1600+100*1200+([SoDien]-300)*1000,100*2000+100*1600+100*1200+200*1000+([SoDien]-500)*700))))