thanhlong68
Thành viên chính thức


- Tham gia
- 17/11/12
- Bài viết
- 66
- Được thích
- 2
If Rng(I, 4) > 0 Then
Mất là do đoạn code nàyÝ em hỏi tại sao khi viết nội dung vào cột D sau khi chạy code nó sẽ bị mất
Có cách nào sửa lại để khi chạy code nó vẫn giữ nguyên được không ạ
With Sheet2
.[A2].Resize(65000, 4).Value = Arr
.[A2].Resize(k, 4).Borders.Weight = xlThin
End With
Với cái file đó bạn muốn lọc kiểu gì? Code phải viết lại, không xài code đó đượcNhưng không có đoạn này thì sẽ không lọc ra được anh ạ, anh có thể giúp em làm sao vẫn ra kết quả mà không bị mất được không anh?
Có ai hiểu bạn muốn lọc kiểu gì hay không chứ mình thì thua rồi. Nếu up lên cái file có dữ liệu mô ta trước và sau khi lọc thì may ra. Lọc theo dk gi? v..v.Em muốn lọc như sau:
Nếu ở cột D có ghi chú thì sẽ lấy dữ liệu từ 1 đến 4 và lọc qua sheet 2, và em muốn có ghi chú ở sheet 2 khi chạy code nó sẽ không bị xóa. Em cám ơn anh nhiều
Em muốn lọc như sau:
Nếu ở cột D có ghi chú thì sẽ lấy dữ liệu từ 1 đến 4 và lọc qua sheet 2, và em muốn có ghi chú ở sheet 2 khi chạy code nó sẽ không bị xóa. Em cám ơn anh nhiều
Sub LocDL()
Dim i As Long, k As Long, j As Long
Dim Arr(), dArr()
Arr = Sheets("sheet1").Range("A2:A" & Sheets("sheet1").[A65536].End(xlUp).Row).Resize(, 4).Value
ReDim dArr(1 To UBound(Arr, 1), 1 To 4)
For i = 1 To UBound(Arr, 1)
If Arr(i, 4) > 0 Then
k = k + 1
For j = 1 To 4
dArr(k, j) = Arr(i, j)
Next
End If
Next i
Sheets("Sheet2").[A2:D100].ClearContents
If k Then Sheets("Sheet2").[A2].Resize(k, 4) = dArr
End Sub
Phải thế này khôngEm có tải lại file anh xem giùm
Sub loc()
Dim i As Long, j As Long, Sarr(), Result()
With Sheets("sheet1")
Sarr = .Range(.[A2], .[D65536].End(3)).Resize(, 4).Value
End With
With Sheets("sheet2")
.[D2:D10000].ClearContents
Result = .Range(.[A2], .[A65536].End(3)).Resize(, 4).Value
End With
For i = 1 To UBound(Result)
For j = 1 To UBound(Sarr)
If Result(i, 1) & Result(i, 2) & Result(i, 3) = Sarr(j, 1) & Sarr(j, 2) & Sarr(j, 3) Then
Result(i, 4) = Sarr(j, 4)
End If
Next
Next
Sheets("sheet2").[A2].Resize(i - 1, 4) = Result
End Sub
Sub loc()
On Error Resume Next
Dim Rng(), Arr(1 To 65000, 1 To 4), I As Long, k As Long
Dim ws As Worksheet
For Each ws In Worksheets
If ws.Name <> "Sheet2" Then
Rng = ws.Range(ws.[B2], ws.[b65000].End(xlUp)).Offset(, -1).Resize(, 4).Value
For I = 1 To UBound(Rng, 1)
If Rng(I, 4) > 0 Then
k = k + 1
If k <= 65000 Then
Arr(k, 1) = k
Arr(k, 2) = Rng(I, 2)
Arr(k, 3) = Rng(I, 3)
Arr(k, 4) = Rng(I, 4)
Else
MsgBox "Sheet2 is full": Exit For
End If
End If
Next I
End If
Next ws
With Sheet2
.[A2].Resize(k, 4).Value = Arr
.[A2].Resize(k, 4).Borders.Weight = xlThin
End With
k = 0
End Sub
Bản chất bài toán rất đơn giản, nhưng thật sự mình không hiểu bạn muốn cái gì nên chẳng biết làm sao nữaVẫn chưa thấy đc anh ạ, code của anh quanghai1969 em không thấy chạy được khi có thêm dữ liệu anh ơi
Em có tải lại file và có ghi rõ trong VD, do em mô tả hơi dài dòng nên khó hiểu, anh quanhai thông cảm nhé
Sub loc2()
Dim i As Long, j As Long, Sarr(), SResult(), DResult(1 To 10000, 1 To 5), KeyItem, k
With Sheets("sheet1")
Sarr = .Range(.[A2], .[A65536].End(3)).Resize(, 4).Value
End With
With Sheets("sheet2")
SResult = .Range(.[A2], .[A65536].End(3)).Resize(, 5).Value
End With
With CreateObject("scripting.dictionary")
For i = 1 To UBound(SResult)
KeyItem = Val(SResult(i, 1)) & SResult(i, 2) & SResult(i, 3)
If Not .exists(KeyItem) Then
k = k + 1
.Add KeyItem, k
For j = 1 To 5
DResult(k, j) = SResult(i, j)
Next
End If
Next
For i = 1 To UBound(Sarr)
KeyItem = Val(Sarr(i, 1)) & Sarr(i, 2) & Sarr(i, 3)
If Sarr(i, 4) <> "" Then
If Not .exists(KeyItem) Then
k = k + 1
.Add KeyItem, k
For j = 1 To 4
DResult(k, j) = Sarr(i, j)
Next
End If
End If
Next
End With
Sheets("sheet2").[A2].Resize(k, 5) = DResult
End Sub