Thien
Thành viên thường trực
- Tham gia
- 23/6/06
- Bài viết
- 352
- Được thích
- 112
Hay cột B ở sheet 1 và dữ liệu cột C ở sheet 2Mình muốn dò dữ liệu cột C ở sheet 1 và dữ liệu cột D ở sheet 2
Nếu trùng thì dữ liệu 2 sheet giống nhau rồi sao lại "chép dl của 02 sheet sang sheet 3"nếu trùng thì chép dl của 02 sheet sang sheet 3 (dl sheet 2 ở trên rồi tới dl của sheet 1 )
1.
Hay cột B ở sheet 1 và dữ liệu cột C ở sheet 2
2.
Nếu trùng thì dữ liệu 2 sheet giống nhau rồi sao lại "chép dl của 02 sheet sang sheet 3"
3. Dùng VBA được không bạn, công thức phức tạp hơn
Bạn test code này thử nhéDạ không bạn ơi
Mình muốn tìm số tiền trùng nên phải lấy dữ liệu cột C ở sheet 1 và dữ liệu cột D ở sheet 2.
Khi thấy dl trùng thì copy dữ liệu trùng sang sheet 3 để kiểm tra.
Do dl mình đưa lên không có số trùng nên bạn thêm vài dl trùng vào hộ mình nha.
Mình thích VBA hơn công thức.
Thân chào.
Option ExplicitSub DLtrung()
Dim Arr1(), Arr2(), ArrKQ(), Tmp(), Dic
Dim i As Long, j As Long
Arr1 = Sheet1.Range("C2:C23").Value
Arr2 = Sheet2.Range("D2:D88").Value
Set Dic = CreateObject("Scripting.Dictionary")
For i = 1 To UBound(Arr1)
For j = 1 To UBound(Arr2)
If Arr1(i, 1) = Arr2(j, 1) And Not Dic.Exists(Arr2(j, 1)) Then
Dic.Add Arr2(j, 1), ""
GoTo NextI
End If
Next
NextI:
Next
Tmp = Dic.keys
ReDim ArrKQ(1 To Dic.Count, 1 To 1)
For i = 1 To Dic.Count
ArrKQ(i, 1) = Tmp(i - 1)
Next
Sheet3.Range("A1").Resize(Dic.Count).Value = ArrKQ
Set Dic = Nothing
End Sub
Bạn test code này thử nhé
Mã:Option ExplicitSub DLtrung() Dim Arr1(), Arr2(), ArrKQ(), Tmp(), Dic Dim i As Long, j As Long Arr1 = Sheet1.Range("C2:C23").Value Arr2 = Sheet2.Range("D2:D88").Value Set Dic = CreateObject("Scripting.Dictionary") For i = 1 To UBound(Arr1) For j = 1 To UBound(Arr2) If Arr1(i, 1) = Arr2(j, 1) And Not Dic.Exists(Arr2(j, 1)) Then Dic.Add Arr2(j, 1), "" GoTo NextI End If Next NextI: Next Tmp = Dic.keys ReDim ArrKQ(1 To Dic.Count, 1 To 1) For i = 1 To Dic.Count ArrKQ(i, 1) = Tmp(i - 1) Next Sheet3.Range("A1").Resize(Dic.Count).Value = ArrKQ Set Dic = Nothing End Sub
Chân thành cảm ơn bạn đã quan tâm.
Coce có vài vấn đề chưa đúng ý mình. Bạn xem lại hộ kết quả mà mình muốn trong file đính kèm nhen. (có thể thêm cột trồng bên sheet 1 vào để đồng bộ với sheet 2 nhằm copy sang sheet 3 dễ hơn).
Không biết có thể dùng ADO để giải quyết vấn đề này không?
Thân.
Sub DLTrung_HLMT()
Dim cn As Object, adoRS As Object
Set cn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
On Error GoTo BaoLoi
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
.Open
End With
With adoRS
.ActiveConnection = cn
.Open "SELECT [Sheet2$].F1, [Sheet2$].F2, [Sheet2$].F3, [Sheet2$].F4, [Sheet2$].F5, [Sheet2$].F6 " & _
"FROM [Sheet1$] INNER JOIN [Sheet2$] ON [Sheet1$].F3 = [Sheet2$].F4;"
End With
With Sheets("Sheet3")
.Range("A1:G65000").ClearContents
.Range("B1").CopyFromRecordset adoRS
With .Range("A1:A" & .Range("B65000").End(xlUp).Row)
.FormulaR1C1 = "=ROW()"
.Value = .Value
End With
.Activate
End With
adoRS.Close: cn.Close
Set cn = Nothing: Set adoRS = Nothing
Exit Sub
BaoLoi:
MsgBox Err.Description
End Sub
Thế thì bạn gom dữ liệu sheet1 và sheet2 lại là được.Thân chào Hai Lúa Miền Tây.
Một chút nữa thôi là đúng ý mình rồi.
Bạn chỉnh lại copy luôn dữ liệu trùng bên sheet 1 sang sheet 3 nha (Trong file ở bài #5).
Thân.
Sub DLTrung_HLMT()
Dim cn As Object, adoRS As Object
Set cn = CreateObject("ADODB.Connection")
Set adoRS = CreateObject("ADODB.Recordset")
On Error GoTo BaoLoi
With cn
.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ThisWorkbook.FullName & _
";Extended Properties=""Excel 8.0;HDR=No;"";"
.Open
End With
With adoRS
.ActiveConnection = cn
.Open "SELECT F1, F2, F3, F4, F5, F6 FROM (SELECT [Sheet2$].F1, [Sheet2$].F2, [Sheet2$].F3, [Sheet2$].F4, " & _
"[Sheet2$].F5, [Sheet2$].F6 " & _
"FROM [Sheet1$] INNER JOIN [Sheet2$] ON [Sheet1$].F3 = [Sheet2$].F4) " & _
"Union all " & _
"SELECT [Sheet1$].F1, null, [Sheet1$].F2, [Sheet1$].F3,null,null " & _
"FROM [Sheet1$] INNER JOIN [Sheet2$] ON [Sheet1$].F3 = [Sheet2$].F4 " & _
"order by F4;"
End With
With Sheets("Sheet3")
.Range("A1:G65000").ClearContents
.Range("B1").CopyFromRecordset adoRS
With .Range("A1:A" & .Range("B65000").End(xlUp).Row)
.FormulaR1C1 = "=ROW()"
.Value = .Value
End With
.Activate
End With
adoRS.Close: cn.Close
Set cn = Nothing: Set adoRS = Nothing
Exit Sub
BaoLoi:
MsgBox Err.Description
End Sub
Bạn xem thử đúng chưa nhé!Thân chào cả nhà.
Mình muốn dò dữ liệu cột C ở sheet 1 và dữ liệu cột D ở sheet 2 nếu trùng thì chép dl của 02 sheet sang sheet 3 (dl sheet 2 ở trên rồi tới dl của sheet 1 ).
Mong các bạn giúp đỡ.
Thân chào.
Sub DLtrung1()DC1 = Sheet1.Range("C65536").End(xlUp).Row
DC2 = Sheet2.Range("D65536").End(xlUp).Row
K = 1
If DC1 < 2 Then DC1 = 2
If DC2 < 2 Then DC2 = 2
Sheet3.Range("A1:F65536").ClearContents
For i = 2 To DC2
Dem = Application.WorksheetFunction.CountIf(Sheet1.Range("C2:C" & DC1), Sheet2.Range("D" & i).Value)
If Dem > 0 Then
Sheet3.Range("A" & K & ":F" & K).Value = Sheet2.Range("A" & i & ":F" & i).Value
K = K + 1
With Sheet1.Range(Sheet1.[C2], Sheet1.[C65000].End(xlUp))
Sheet3.Range("A" & K).Value = .Find(Sheet2.Range("D" & i).Value, , , xlWhole).Offset(, -2)
Sheet3.Range("C" & K).Value = .Find(Sheet2.Range("D" & i).Value, , , xlWhole).Offset(, -1)
Sheet3.Range("D" & K).Value = .Find(Sheet2.Range("D" & i).Value, , , xlWhole).Offset(, 0)
End With
K = K + 1
End If
Next i
End Sub
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 1
DIỄN ĐÀN GIẢI PHÁP EXCEL Group 2