hoahuongduong1986
Thành viên thường trực
- Tham gia
- 14/11/18
- Bài viết
- 346
- Được thích
- 40
Công thức vẫn giải quyết được sao bạn phải cần VBA? Nếu sợ Countif làm chậm file thì có thể dùng hàm Match, tôi nghĩ sẽ cải thiện được.Dear Anh chị và các bạn
Em có File kèm theo. Code nào thay cho hàm vùng màu đỏ được ạ (Chỉ lọc cho giá trị đầu tiên được tìm thấy). Em cảm ơn ạ.
Mình muốn tìm hiểu cách làm bằng Code bạn.Công thức vẫn giải quyết được sao bạn phải cần VBA? Nếu sợ Countif làm chậm file thì có thể dùng hàm Match, tôi nghĩ sẽ cải thiện được.
Muốn VBA thì tặng bạn "dao mổ Trâu", không nhận "bảo hành".Mình muốn tìm hiểu cách làm bằng Code bạn.
Public Sub s_Gpe()
Dim sArr(), dArr(), I As Long, R As Long, Txt As String
With CreateObject("Scripting.Dictionary")
sArr = Range("B5", Range("C50000").End(xlUp)).Value
R = UBound(sArr)
For I = 1 To R
Txt = sArr(I, 1) 'Ma cua hang'
.Item(Txt) = sArr(I, 2) 'Du dau'
Next I
'---------------------------------------'
sArr = Range("H7", Range("H7").End(xlDown)).Value
R = UBound(sArr)
ReDim dArr(1 To R, 1 To 1)
For I = 1 To R
Txt = sArr(I, 1) & "#" 'Ma cua hang dau tien'
If Not .Exists(Txt) Then
.Item(Txt) = ""
Txt = sArr(I, 1) 'Ma cua hang'
If .Exists(Txt) Then dArr(I, 1) = .Item(Txt) 'So luong'
End If
Next I
End With
'---------------------------------------'
Range("L7").Resize(R) = dArr
End Sub
Em cảm ơn anh ạ ! nhìn Code hấp dẫn quá. Để em tìm hiểu ý nghĩa code ạ.Muốn VBA thì tặng bạn "dao mổ Trâu", không nhận "bảo hành".
PHP:Public Sub s_Gpe() Dim sArr(), dArr(), I As Long, R As Long, Txt As String With CreateObject("Scripting.Dictionary") sArr = Range("B5", Range("C50000").End(xlUp)).Value R = UBound(sArr) For I = 1 To R Txt = sArr(I, 1) 'Ma cua hang' .Item(Txt) = sArr(I, 2) 'Du dau' Next I '---------------------------------------' sArr = Range("H7", Range("H7").End(xlDown)).Value R = UBound(sArr) ReDim dArr(1 To R, 1 To 1) For I = 1 To R Txt = sArr(I, 1) & "#" 'Ma cua hang dau tien' If Not .Exists(Txt) Then .Item(Txt) = "" Txt = sArr(I, 1) 'Ma cua hang' If .Exists(Txt) Then dArr(I, 1) = .Item(Txt) 'So luong' End If Next I End With '---------------------------------------' Range("L7").Resize(R) = dArr End Sub
Đã nói là "không bảo hành" sao lại đem hàng ra trả lại?Em đang tìm hiểu đoạn Code anh trợ giúp. A cho em hỏi chút ạ.
- Cái ký tự # ở đoạn này Txt = sArr(I, 1) & "#" nghĩa là gì ạ ?
- Về việc đặt tên: Em thấy anh cùng dùng sArr, và R cho hai chỉ dẫn khác nhau
sArr = Range("H7", Range("H7").End(xlDown)).Value
sArr = Range("B5", Range("C50000").End(xlUp)).Value
Khi em thay đổi sArr hoặc R ở hai đoạn code thì code vẫn ra kết quả. Như vậy trong DIC nó vẫn phân biệt được hai việc khác nhau mặc dù cùng hỉ dẫn ạ.
Thử tìm hiểu lệnh Remove KeyDear Anh chị và các bạn
Em có File kèm theo. Code nào thay cho hàm vùng màu đỏ được ạ (Chỉ lọc cho giá trị đầu tiên được tìm thấy). Em cảm ơn ạ.
Sub ABC()
Dim aDu(), aMa(), Res()
Dim i&, sRow&, iKey
aDu = Range("B5", Range("C50000").End(xlUp)).Value
aMa = Range("H7", Range("H7").End(xlDown)).Value
With CreateObject("Scripting.Dictionary")
sRow = UBound(aDu)
For i = 1 To sRow
.Item(aDu(i, 1)) = aDu(i, 2)
Next i
sRow = UBound(aMa)
ReDim Res(1 To sRow, 1 To 1)
For i = 1 To sRow
iKey = aMa(i, 1)
If .Exists(iKey) Then
Res(i, 1) = .Item(iKey) 'So luong'
.Remove (iKey) 'Loai bo Cua hang da lay so du
End If
Next i
End With
Range("K7").Resize(sRow) = Res
End Sub
haha. A viết hay quá. Em cảm ơn anh, em hiểu láng máng rồi em sẽ hiểu dần dần, mưa dần hi vọng sẽ thấm được ít ạ.Đã nói là "không bảo hành" sao lại đem hàng ra trả lại?
Tôi không qua trường lớp lý thuyết nào nên khó mà giải thích, tôi chỉ viết theo kiểu hiểu nôm na là:
- sArr(I, 1) là "thằng A", sArr(I, 1) & "#" là "Vợ thằng A".
Biết được thằng A sẽ tìm được vợ thằng A, con "của vợ" thằng A, "Tía má" vợ thằng A, v.v... và ngược lại.
- Ban đầu thằng sArr đầu quân cho "biệt kích" (cột B,C), sau khi làm xong nhiệm vụ thì "đào ngũ".
Sau đó sArr đầu quân cho "thiên thần mũ đỏ" (cột H), làm lại cuộc đời.
"Đóng cửa" không nhận hàng trả lại!
--------------------------
Nếu rảnh thì đọc, sửa lại trên tiêu đề cho rõ nghĩa:
Chỉ lấy giá trị lọc cho lần tìm đầy tiên tiên cho hàm VLookup
Trong trường hợp này, cách của bài #8 cũng rất hay mà tôi chưa nghĩ tới:haha. A viết hay quá. Em cảm ơn anh, em hiểu láng máng rồi em sẽ hiểu dần dần, mưa dần hi vọng sẽ thấm được ít ạ.