- Tham gia
- 23/3/16
- Bài viết
- 705
- Được thích
- 52
Phải có cột ngày hay cột nào đó để lấy dữ liệu cho chính xác, chứ lấy dòng cuối thì nhỡ trong quá trình làm người ta đã sort dữ liệu ở 1 cột nào đó thì sao?Chào cả nhà GPE ! Em cần 1 đoạn code Lấy dữ liệu từng tháng, nếu tháng nào xuất hiện >1 lần thì lấy dòng cuối. Em xin Chân thành cảm ơn !
View attachment 206673
Em sử dụng công thức gửi Anh tham khảo.Chào cả nhà GPE ! Em cần 1 đoạn code Lấy dữ liệu từng tháng, nếu tháng nào xuất hiện >1 lần thì lấy dòng cuối. Em xin Chân thành cảm ơn !
View attachment 206673
=IFERROR(INDIRECT(MID(REPT(TEXT(AGGREGATE(15,6,(ROW($A$4:$A$18)+COLUMN($A$1:$E$1)*10^3)/(COUNTIF($M$3:$M3,$A$4:$A$18)=0),1),"C000R000"),2),5,8),),"")
Dữ liệu đó cố định nằm trong sheet data luôn roi Anh. em muốn dùng code lấy ra theo tháng thôiPhải có cột ngày hay cột nào đó để lấy dữ liệu cho chính xác, chứ lấy dòng cuối thì nhỡ trong quá trình làm người ta đã sort dữ liệu ở 1 cột nào đó thì sao?
dữ liệu của mình 5000 dòng anh. Công thức này thì em biết rồi. Sẽ rất chậm em muốn dùng code anhEm sử dụng công thức gửi Anh tham khảo.
Cột tháng:
Cột Lang:PHP:=IFERROR(INDIRECT(MID(REPT(TEXT(AGGREGATE(15,6,(ROW($A$4:$A$18)+COLUMN($A$1:$E$1)*10^3)/(COUNTIF($M$3:$M3,$A$4:$A$18)=0),1),"C000R000"),2),5,8),),"")
=LOOKUP(2,1/($A$4:$A$18=$M4),B$4:B$18) copy cho các cột còn lại.
tại do Anh đưa có mấy dòng thì em làm mấy dòng thôi. Em biết dữ liệu Anh sẽ nhiều em đưa cho Anh tham khảo thôi.Dữ liệu đó cố định nằm trong sheet data luôn roi Anh. em muốn dùng code lấy ra theo tháng thôi
Bài đã được tự động gộp:
dữ liệu của mình 5000 dòng anh. Công thức này thì em biết rồi. Sẽ rất chậm em muốn dùng code anh
Sử dụng Scripting.Dictionary bạn nhé!Chào cả nhà GPE ! Em cần 1 đoạn code Lấy dữ liệu từng tháng, nếu tháng nào xuất hiện >1 lần thì lấy dòng cuối. Em xin Chân thành cảm ơn !
View attachment 206673
Lại gặp chủ thớt này ! dạo này viết phần mềm nhiều thế! chúc sức khỏe...!Chào cả nhà GPE ! Em cần 1 đoạn code Lấy dữ liệu từng tháng, nếu tháng nào xuất hiện >1 lần thì lấy dòng cuối. Em xin Chân thành cảm ơn !
View attachment 206673
Với dạng số, cột tháng chỉ cầnEm sử dụng công thức gửi Anh tham khảo.
Cột tháng:
Cột Lang:PHP:=IFERROR(INDIRECT(MID(REPT(TEXT(AGGREGATE(15,6,(ROW($A$4:$A$18)+COLUMN($A$1:$E$1)*10^3)/(COUNTIF($M$3:$M3,$A$4:$A$18)=0),1),"C000R000"),2),5,8),),"")
=LOOKUP(2,1/($A$4:$A$18=$M4),B$4:B$18) copy cho các cột còn lại.
=IFERROR(SMALL($A$4:$A$18,SUMPRODUCT(COUNTIF($A$4:$A$18,$H$3:H3))+1),"")
cách Anh hay quá! Còn trường hợp là text thì dùng công thức nào ngắn gọn vậy Anh?Với dạng số, cột tháng chỉ cầnMã:=IFERROR(SMALL($A$4:$A$18,SUMPRODUCT(COUNTIF($A$4:$A$18,$H$3:H3))+1),"")
Người ta nói "biết rồi" mờ. Chả có gì cần "tham khảo" cả.tại do Anh đưa có mấy dòng thì em làm mấy dòng thôi. Em biết dữ liệu Anh sẽ nhiều em đưa cho Anh tham khảo thôi.
Ra chiêu cho thiên hạ viết chứ có viết bao giờ đâu.Lại gặp chủ thớt này ! dạo này viết phần mềm nhiều thế! chúc sức khỏe...!
Hổng biết viết, nhưng mà được cái hay hỏi nên cũng có được 1 sao màu vàng trên ngực rùi chứ lịNgười ta nói "biết rồi" mờ. Chả có gì cần "tham khảo" cả.
Bạn làm việc bao lâu mà không biết thớt đây là dân xịn C++.
Chỉ nhờ viết giùm VBA thôi, mọi thứ khác xin miễn.
Ra chiêu cho thiên hạ viết chứ có viết bao giờ đâu.
Người ta biết rồi mà còn đưa ra. Hihitại do Anh đưa có mấy dòng thì em làm mấy dòng thôi. Em biết dữ liệu Anh sẽ nhiều em đưa cho Anh tham khảo thôi.
bạn xem nhéChào cả nhà GPE ! Em cần 1 đoạn code Lấy dữ liệu từng tháng, nếu tháng nào xuất hiện >1 lần thì lấy dòng cuối. Em xin Chân thành cảm ơn !
View attachment 206673
Public Sub Loc()
Dim Vung, I, J, Dic, Tam, K, kK
Vung = Range([A4], [A50000].End(xlUp)).Resize(, 5)
ReDim Tam(1 To UBound(Vung), 1 To UBound(Vung, 2))
Set Dic = CreateObject("scripting.dictionary")
For I = 1 To UBound(Vung)
If Not Dic.exists(Vung(I, 1)) Then
K = K + 1
Dic.Add Vung(I, 1), K
For J = 1 To UBound(Vung, 2)
Tam(K, J) = Vung(I, J)
Next J
Else
kK = Dic.Item(Vung(I, 1))
For J = 2 To UBound(Vung, 2)
Tam(kK, J) = Vung(I, J)
Next J
End If
Next I
[N4].Resize(K, 5) = Tam
End Sub
Sub GPE()
Dim Thang(1 To 12) As Byte, i As Long, eRow As Long, k As Long
eRow = Range("A4").End(xlDown).Row
For i = 4 To eRow
Thang(Cells(i, "A").Value) = i
Next i
k = 4
For i = 1 To 12
If Thang(i) > 0 Then
Cells(k, "H").Resize(, 5).Value = Cells(Thang(i), "A").Resize(, 5).Value
k = k + 1
End If
Next i
End Sub
Cái này theo em nên chạy từ cuối nên đầu sẽ tránh được việc gán giá trị nhiều lầnMột cách viết:
Mã:Public Sub Loc() Dim Vung, I, J, Dic, Tam, K, kK Vung = Range([A4], [A50000].End(xlUp)).Resize(, 5) ReDim Tam(1 To UBound(Vung), 1 To UBound(Vung, 2)) Set Dic = CreateObject("scripting.dictionary") For I = 1 To UBound(Vung) If Not Dic.exists(Vung(I, 1)) Then K = K + 1 Dic.Add Vung(I, 1), K For J = 1 To UBound(Vung, 2) Tam(K, J) = Vung(I, J) Next J Else kK = Dic.Item(Vung(I, 1)) For J = 2 To UBound(Vung, 2) Tam(kK, J) = Vung(I, J) Next J End If Next I [N4].Resize(K, 5) = Tam End Sub
Một cách viết:
Mã:Public Sub Loc() Dim Vung, I, J, Dic, Tam, K, kK Vung = Range([A4], [A50000].End(xlUp)).Resize(, 5) ReDim Tam(1 To UBound(Vung), 1 To UBound(Vung, 2)) Set Dic = CreateObject("scripting.dictionary") For I = 1 To UBound(Vung) If Not Dic.exists(Vung(I, 1)) Then K = K + 1 Dic.Add Vung(I, 1), K For J = 1 To UBound(Vung, 2) Tam(K, J) = Vung(I, J) Next J Else kK = Dic.Item(Vung(I, 1)) For J = 2 To UBound(Vung, 2) Tam(kK, J) = Vung(I, J) Next J End If Next I [N4].Resize(K, 5) = Tam End Sub
Ơ, hình như bài kinh điển "Lọc duy nhất" học xong từ lâu rồi thì phải.cách Anh hay quá! Còn trường hợp là text thì dùng công thức nào ngắn gọn vậy Anh?