- Tham gia
- 12/8/22
- Bài viết
- 32
- Được thích
- 4
Lắm bài toán lạ nhỉ. Cái này không còn phải là vlookup nữa rồi. Dữ liệu nó có lớn lắm không?Em chào đại gia đình. Em cần công thức dò VLookup từng số sau đó Sum lại như hình mô tả bên dưới. Rất mong đại gia đình giúp đỡ
v
Mình cần giúp đỡ. Rất mong bạn giúp mìnhData lần này có lẽ chỉ có 9 dòng tương ứng từ 1 đến 9 ,.. có 11,12...,123,.. đến mấy chục ngàn dòng nữa vậy bạn?
Rất mong bạn giúp đỡ vì mục đích sử dụng của mình là như vậyLắm bài toán lạ nhỉ. Cái này không còn phải là vlookup nữa rồi. Dữ liệu nó có lớn lắm không?
Công thức cho nhẹ nha!Em chào đại gia đình. Em cần công thức dò VLookup từng số sau đó Sum lại như hình mô tả bên dưới. Rất mong đại gia đình giúp đỡ
v
Mình cần giúp đỡ. Rất mong bạn giúp mình
Bài đã được tự động gộp:
Rất mong bạn giúp đỡ vì mục đích sử dụng của mình là như vậy
Option Explicit
Sub aeaaaaaeeaaaaeaaeaeaaea()
Dim aeeeeeaeeeeaaaeeaaeaaaa As Object
Dim aaaaaaaeeeaeeaaaaeaeeea As Variant, aaeaaaaeaaaeaeeaeeeaaaa As Variant
Dim eaaeaeeeaeaaeeeaaaaaeaa As String, eaeeaaeaeaaeaaeeeaeeeee As String
Dim eaaeeaeeeeaaeeeeeaeaeaa As Long, eaaaeeeaaaaaaeaeeeeeeea As Integer
Const aeaeaaeeeaaeeeeaeeaeeea As Long = 100000
Const eeaaaeeeaaaeeeeeaaaaaae As String = "Scripting.Dictionary"
aaaaaaaeeeaeeaaaaeaeeea = Sheet1.Range("B4:C12").Value
Set aeeeeeaeeeeaaaeeaaeaaaa = CreateObject(eeaaaeeeaaaeeeeeaaaaaae)
For eaaeeaeeeeaaeeeeeaeaeaa = LBound(aaaaaaaeeeaeeaaaaeaeeea, 1) To UBound(aaaaaaaeeeaeeaaaaeaeeea, 1) Step 1
eaaeaeeeaeaaeeeaaaaaeaa = CStr(aaaaaaaeeeaeeaaaaeaeeea(eaaeeaeeeeaaeeeeeaeaeaa, 1))
If Not aeeeeeaeeeeaaaeeaaeaaaa.exists(eaaeaeeeaeaaeeeaaaaaeaa) Then
aeeeeeaeeeeaaaeeaaeaaaa.Add eaaeaeeeaeaaeeeaaaaaeaa, aaaaaaaeeeaeeaaaaeaeeea(eaaeeaeeeeaaeeeeeaeaeaa, 2)
End If
Next eaaeeaeeeeaaeeeeeaeaeaa
aaaaaaaeeeaeeaaaaeaeeea = Sheet1.Range("E4:F" & Sheet1.Range("E" & aeaeaaeeeaaeeeeaeeaeeea).End(xlUp).Row).Value
ReDim aaeaaaaeaaaeaeeaeeeaaaa(1 To UBound(aaaaaaaeeeaeeaaaaeaeeea, 1), 1 To UBound(aaaaaaaeeeaeeaaaaeaeeea, 2))
For eaaeeaeeeeaaeeeeeaeaeaa = LBound(aaaaaaaeeeaeeaaaaeaeeea, 1) To UBound(aaaaaaaeeeaeeaaaaeaeeea, 1) Step 1
eaeeaaeaeaaeaaeeeaeeeee = aaaaaaaeeeaeeaaaaeaeeea(eaaeeaeeeeaaeeeeeaeaeaa, 1)
For eaaaeeeaaaaaaeaeeeeeeea = Len(eaeeaaeaeaaeaaeeeaeeeee) To 1 Step -1
eaaeaeeeaeaaeeeaaaaaeaa = Mid(eaeeaaeaeaaeaaeeeaeeeee, eaaaeeeaaaaaaeaeeeeeeea, 1)
If aeeeeeaeeeeaaaeeaaeaaaa.exists(eaaeaeeeaeaaeeeaaaaaeaa) Then
aaeaaaaeaaaeaeeaeeeaaaa(eaaeeaeeeeaaeeeeeaeaeaa, 1) = aaaaaaaeeeaeeaaaaeaeeea(eaaeeaeeeeaaeeeeeaeaeaa, 1)
aaeaaaaeaaaeaeeaeeeaaaa(eaaeeaeeeeaaeeeeeaeaeaa, 2) = aaeaaaaeaaaeaeeaeeeaaaa(eaaeeaeeeeaaeeeeeaeaeaa, 2) + aeeeeeaeeeeaaaeeaaeaaaa.Item(eaaeaeeeaeaaeeeaaaaaeaa)
End If
Next eaaaeeeaaaaaaeaeeeeeeea
Next eaaeeaeeeeaaeeeeeaeaeaa
Sheet1.Range("E4").Resize(aeaeaaeeeaaeeeeaeeaeeea, UBound(aaeaaaaeaaaeaeeaeeeaaaa, 2)).ClearContents
Sheet1.Range("E4").Resize(UBound(aaeaaaaeaaaeaeeaeeeaaaa, 1), UBound(aaeaaaaeaaaeaeeaeeeaaaa, 2)).Value = aaeaaaaeaaaeaeeaeeeaaaa
End Sub
Ok bạn, mình cũng học bạn, cũng gọi là 'góp vui' :
Mã:Option Explicit Sub aeaaaaaeeaaaaeaaeaeaaea() Dim aeeeeeaeeeeaaaeeaaeaaaa As Object Dim aaaaaaaeeeaeeaaaaeaeeea As Variant, aaeaaaaeaaaeaeeaeeeaaaa As Variant Dim eaaeaeeeaeaaeeeaaaaaeaa As String, eaeeaaeaeaaeaaeeeaeeeee As String Dim eaaeeaeeeeaaeeeeeaeaeaa As Long, eaaaeeeaaaaaaeaeeeeeeea As Integer Const aeaeaaeeeaaeeeeaeeaeeea As Long = 100000 Const eeaaaeeeaaaeeeeeaaaaaae As String = "Scripting.Dictionary" aaaaaaaeeeaeeaaaaeaeeea = Sheet1.Range("B4:C12").Value Set aeeeeeaeeeeaaaeeaaeaaaa = CreateObject(eeaaaeeeaaaeeeeeaaaaaae) For eaaeeaeeeeaaeeeeeaeaeaa = LBound(aaaaaaaeeeaeeaaaaeaeeea, 1) To UBound(aaaaaaaeeeaeeaaaaeaeeea, 1) Step 1 eaaeaeeeaeaaeeeaaaaaeaa = CStr(aaaaaaaeeeaeeaaaaeaeeea(eaaeeaeeeeaaeeeeeaeaeaa, 1)) If Not aeeeeeaeeeeaaaeeaaeaaaa.exists(eaaeaeeeaeaaeeeaaaaaeaa) Then aeeeeeaeeeeaaaeeaaeaaaa.Add eaaeaeeeaeaaeeeaaaaaeaa, aaaaaaaeeeaeeaaaaeaeeea(eaaeeaeeeeaaeeeeeaeaeaa, 2) End If Next eaaeeaeeeeaaeeeeeaeaeaa aaaaaaaeeeaeeaaaaeaeeea = Sheet1.Range("E4:F" & Sheet1.Range("E" & aeaeaaeeeaaeeeeaeeaeeea).End(xlUp).Row).Value ReDim aaeaaaaeaaaeaeeaeeeaaaa(1 To UBound(aaaaaaaeeeaeeaaaaeaeeea, 1), 1 To UBound(aaaaaaaeeeaeeaaaaeaeeea, 2)) For eaaeeaeeeeaaeeeeeaeaeaa = LBound(aaaaaaaeeeaeeaaaaeaeeea, 1) To UBound(aaaaaaaeeeaeeaaaaeaeeea, 1) Step 1 eaeeaaeaeaaeaaeeeaeeeee = aaaaaaaeeeaeeaaaaeaeeea(eaaeeaeeeeaaeeeeeaeaeaa, 1) For eaaaeeeaaaaaaeaeeeeeeea = Len(eaeeaaeaeaaeaaeeeaeeeee) To 1 Step -1 eaaeaeeeaeaaeeeaaaaaeaa = Mid(eaeeaaeaeaaeaaeeeaeeeee, eaaaeeeaaaaaaeaeeeeeeea, 1) If aeeeeeaeeeeaaaeeaaeaaaa.exists(eaaeaeeeaeaaeeeaaaaaeaa) Then aaeaaaaeaaaeaeeaeeeaaaa(eaaeeaeeeeaaeeeeeaeaeaa, 1) = aaaaaaaeeeaeeaaaaeaeeea(eaaeeaeeeeaaeeeeeaeaeaa, 1) aaeaaaaeaaaeaeeaeeeaaaa(eaaeeaeeeeaaeeeeeaeaeaa, 2) = aaeaaaaeaaaeaeeaeeeaaaa(eaaeeaeeeeaaeeeeeaeaeaa, 2) + aeeeeeaeeeeaaaeeaaeaaaa.Item(eaaeaeeeaeaaeeeaaaaaeaa) End If Next eaaaeeeaaaaaaeaeeeeeeea Next eaaeeaeeeeaaeeeeeaeaeaa Sheet1.Range("E4").Resize(aeaeaaeeeaaeeeeaeeaeeea, UBound(aaeaaaaeaaaeaeeaeeeaaaa, 2)).ClearContents Sheet1.Range("E4").Resize(UBound(aaeaaaaeaaaeaeeaeeeaaaa, 1), UBound(aaeaaaaeaaaeaeeaeeeaaaa, 2)).Value = aaeaaaaeaaaeaeeaeeeaaaa End Sub
dịch nhanh siêu thế lại còn bảo khó nữa kìaGiúp người khác không nên làm khó vậy.
Sub Lumcode()
Dim q As Object
Dim w As Variant, e As Variant
Dim r As String, t As String
Dim y As Long, u As Integer
Const i As Long = 100000
Const o As String = "Scripting.Dictionary"
w = Sheet1.Range("B4:C12").Value
Set q = CreateObject(o)
For y = LBound(w, 1) To UBound(w, 1) Step 1
r = CStr(w(y, 1))
If Not q.exists(r) Then
q.Add r, w(y, 2)
End If
Next y
w = Sheet1.Range("E4:F" & Sheet1.Range("E" & i).End(xlUp).Row).Value
ReDim e(1 To UBound(w, 1), 1 To UBound(w, 2))
For y = LBound(w, 1) To UBound(w, 1) Step 1
t = w(y, 1)
For u = Len(t) To 1 Step -1
r = Mid(t, u, 1)
If q.exists(r) Then
e(y, 1) = w(y, 1)
e(y, 2) = e(y, 2) + q.Item(r)
End If
Next u
Next y
Sheet1.Range("E4").Resize(i, UBound(e, 2)).ClearContents
Sheet1.Range("E4").Resize(UBound(e, 1), UBound(e, 2)).Value = e
End Sub
Nếu em gõ 2 số giống nhau nó cộng sai anh ơi Ví dụ em gõ giá trị là 1122 thì Kết quả phải là 50+50+70+70Công thức cho nhẹ nha!
=SUMPRODUCT(ISNUMBER(SEARCH(""&$B$4:$B$12&"",""&E4&""))*$C$4:$C$12)
Có gì "góp vui" chưa bạn để mình còn đi ngủ?Nếu em gõ 2 số giống nhau nó cộng sai anh ơi Ví dụ em gõ giá trị là 1122 thì Kết quả phải là 50+50+70+70
Hơi sợ kiểu góp vui này. Có lẽ ngồi xem hay hơnCó gì "góp vui" chưa bạn để mình còn đi ngủ?
Thường mình sẽ góp vui sau 1 2 ngày, Và cái góp vui của mình sẽ gọn hơn code bạn 10 lần + Nhanh hơn 2 lần .Có gì "góp vui" chưa bạn để mình còn đi ngủ?
Bạn không đọc kỹ lời tôi phân tích. "góp vui" chỉ xảy ra khi bài đã được giải.Hơi sợ kiểu góp vui này. Có lẽ ngồi xem hay hơn
Thiệt sự hôm qua giờ này đã tắt máy đi ngủ rồi, nhưng vì thấy nói như vậy:Thường mình sẽ góp vui sau 1 2 ngày, Và cái góp vui của mình sẽ gọn hơn code bạn 10 lần + Nhanh hơn 2 lần .
Option Explicit
Sub add()
Dim i&, j&, ma As Range, kq, st As String
kq = Range("E4:F" & Cells(Rows.Count, "E").End(xlUp).Row).Value
Set ma = Range("B4:B" & Cells(Rows.Count, "B").End(xlUp).Row)
For i = 1 To UBound(kq)
st = ""
For j = 1 To Len(kq(i, 1))
st = IIf(st = "", "", st & ",") & Mid(kq(i, 1), j, 1)
Next
st = "{" & st & "}"
kq(i, 2) = Evaluate("=SUM(SUMIF(" & ma.Address & "," & st & "," & ma.Offset(, 1).Address & "))")
Next
Range("E4:F100000").ClearContents
Range("E4:F" & UBound(kq)).Value = kq
End Sub
Code bài #16 chậm hơn bài #6 nhiều, code bài #6 do dùng dic nên rườm rà và tốn tí thời gian xử lý dic nhưng không thể có code mới nhanh hơn 2 lầnYên tâm. Lần này tôi không chỉ cho thớt mánh viết nhanh hơn 10-100 lần đâu.
Thớt muốn thì phải học qua thần tượng của mình.
Nhanh hơn 2 lần và gọn hơn code kia 20 lần dùng Evaluate + ReplaceCode bài #16 chậm hơn bài #6 nhiều, code bài #6 do dùng dic nên rườm rà và tốn tí thời gian xử lý dic nhưng không thể có code mới nhanh hơn 2 lần
Evaluate + Replace tôi cần tư vấn thuật toán nàyYên tâm. Lần này tôi không chỉ cho thớt mánh viết nhanh hơn 10-100 lần đâu.
Thớt muốn thì phải học qua thần tượng của mình.
Thực ra mới đầu cháu viết ngắn hơn chút, nhưng chính vì để cho nhìn vào thấy rối như tơ vò hơn nên cháu thêm thắt vài tham số.. nhưng nó chẳng quan trọng , quan trọng vẫn là cách xử lý..Code bài #16 chậm hơn bài #6 nhiều, code bài #6 do dùng dic nên rườm rà và tốn tí thời gian xử lý dic nhưng không thể có code mới nhanh hơn 2 lần
Bài này nếu dùng công thức để ra kết quả theo yêu cầu của thớt tại bài #9Công thức cho nhẹ nha!
=SUMPRODUCT(ISNUMBER(SEARCH(""&$B$4:$B$12&"",""&E4&""))*$C$4:$C$12)
Anh thấy anh @Phuocam đã giải quyết tại bài #14 rồi, rất hay.Nếu em gõ 2 số giống nhau nó cộng sai anh ơi Ví dụ em gõ giá trị là 1122 thì Kết quả phải là 50+50+70+70
Em cảm ơn lời dặn của Anh, Em sẽ ghi nhớ mãi.Bài này nếu dùng công thức để ra kết quả theo yêu cầu của thớt tại bài #9
Anh thấy anh @Phuocam đã giải quyết tại bài #14 rồi, rất hay.
Chỉ muốn trao đổi với em và dặn em cần suy nghĩ thêm về hàm khi mình quyết định dùng:
Lâu lâu, tám với em 1 chút cho vui hén.
- Vì B4:B12 chứa ký tự số, không phải chữ cái, nên dùng Find() thay Search() cũng được.
- Em sợ rằng B4:B12 là số nên không thể tìm trong chuỗi ghép như: 12, 23, 123..., phải không?! Lo "bò trắng răng" rồi
.
- Nếu B4:B12 là số, thì Search() hay Find() đều chơi tuốt, em cứ thử định dạng cho B4:B12 là số, còn bên kia định dạng chuỗi như: " 1 2 ", "1 2 3",.. chỉ dùng: ...FIND($B$4:$B$12,E4)... xem sao.
- Còn nếu B4:B12 là chuỗi, thì em sợ nó có 1 hoặc "1 vài ngàn, vài triệu..." khoảng trắng đằng trước/sau của ký tự số, thì thay vì dùng "", hoặc "sao xiếc, sao xẹt" gì gì đó mất công, em có thể dùng hàm Trim() là gọn rồi, còn dãy bên kia (cột E) thì kệ..'ta'.. nó, có khoảng trắng hay không! em chẳng cần buồn quan tâm đến.
- Cho nên B4:B12 dù là số hay chuỗi, nếu em không chắc lắm, thì em cứ việc dùng thêm FIND(TRIM($B$4:$B$12),E4), hoặc đơn giản hơn: FIND(--$B$4:$B$12,E4) là được rồi.
Thân
![]()
Việc mọn mà em! Chỉ để vui đùa với anh em trong lúc nghỉ ngơi sau giờ 'cày bừa' tối tăm mày mặt mà, đâu có gì to tát ghê gớm!...
Em thấy Anh hay vào hỗ trợ mọi người, em thấy kiến thức anh truyền đạt rất hay và rất chi tiết, đây là tài sản vô giá.
Một lần nữa em cảm ơn Anh rất nhiều!
Ví dụ như bài này, nếu theo yêu cầu của thớt ở bài #9, em có thể dùng hàm Substitue(), vậy đố em trọn công thức viết như thế nào?
Đổi tên nha bạn hiền --> @Phá đám.Cho em chơi với:
=SUMPRODUCT($C$4:$C$12,LEN(E4)-LEN(SUBSTITUTE(E4,$B$4:$B$12,"")))
Hahaha ...
Giờ hở ra là xin code, nhiều bài hỏi công thức nhiều người cũng tranh nhau code nên hết đất diễn, anh em cũng mất sân chơi. Giờ lụt nghề rồi.Việc mọn mà em! Chỉ để vui đùa với anh em trong lúc nghỉ ngơi sau giờ 'cày bừa' tối tăm mày mặt mà, đâu có gì to tát ghê gớm!
Trước đây vài năm, "đọ súng" với anh em "cao tay ấn" về hàm như anh: @HieuCD, @huuthang_bd, @Phuocam, @befaint, @leoheocon... phải suy nghĩ nhiều, rồi 'vọc' đủ các hàm, vì để giải quyết 1 yêu cầu nào đó trong bảng tính excel không chỉ có mỗi một, mà có thể có nhiều cách giải khác nhau, rồi chọn cách giải nào ưng ý nhất mà "phan" với anh em. Nên tạo thành cho anh thói quen sử dụng linh hoạt các hàm và đặc tính của nó, bây giờ thì mang ra 'tám' với em vậy mà!
Ví dụ như bài này, nếu theo yêu cầu của thớt ở bài #9, em có thể dùng hàm Substitue(), vậy đố em trọn công thức viết như thế nào?
Coi như chuyện thư giản cuối tuần hén!
Chúc em cuối tuần vui vẻ.
![]()
Nói đúng ra: một là vài yêu cầu của thành viên lúc này cứ lặp đi lặp lại so với yêu cầu 5-6 năm trước, nhiều yêu cầu khác thì độ khó của nó cũng không đòi hỏi cao; hai là anh em mình "zà zồi"! Do vậy phải nên nhường sân chơi cho anh em mới tham gia để có cơ hội rèn giũa tay nghề. Lâu lâu vào bày vẽ bậy bạ cũng thấy vui rồi anh.Giờ hở ra là xin code, nhiều bài hỏi công thức nhiều người cũng tranh nhau code nên hết đất diễn, anh em cũng mất sân chơi. Giờ lụt nghề rồi.![]()