Giúp Công Thức Hoặc Code Sum Vlookup Từng số (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Phúc Lộc Thọ

Thành viên bị đình chỉ hoạt động
Thành viên bị đình chỉ hoạt động
Tham gia
12/8/22
Bài viết
32
Được thích
4
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
 

File đính kèm

  • Untitled.png
    Untitled.png
    150.1 KB · Đọc: 44
  • sumvlookup.xlsx
    sumvlookup.xlsx
    10.3 KB · Đọc: 26
Upvote 0
Data 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?
Mình cần giúp đỡ. Rất mong bạn giúp mình
Bài đã được tự động gộp:

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?
Rất mong bạn giúp đỡ vì mục đích sử dụng của mình là như vậy
 
Upvote 0
Upvote 0
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

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
 
Upvote 0
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



Giú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
 
Upvote 0
Giú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
dịch nhanh siêu thế lại còn bảo khó nữa kìa :D
 
Upvote 0
Hơi sợ kiểu góp vui này. Có lẽ ngồi xem hay hơn
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.
Và cái góp vui thường là cái dạy lại người giải (code gọn hơn, nhanh hơn)
Trừ 2 người được kính nể, là không hề dám chạm tới.
 
Upvote 0
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 .
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:
1661747572849.png
Nên lại mò dậy... nếu phát biểu:
"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 ."
thì có lẽ mọi chuyện không phải kéo dài đến bây giờ.
Với mình chủ đề này coi như đã vào sọt rác, ai muốn viết thêm gì thì viết,chẳng hơi đâu mà bận tâm.
 
Upvote 0
PHP:
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
 

File đính kèm

Upvote 0
Yê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.
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
 
Upvote 0
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
Nhanh hơn 2 lần và gọn hơn code kia 20 lần dùng Evaluate + Replace
Bài đã được tự động gộp:

Yê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.
Evaluate + Replace tôi cần tư vấn thuật toán này
 
Upvote 0
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
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ý..
Nhưng mà thớt "bản tính" vẫn trước sau như một thôi thì bỏ qua đi chú, cháu cũng đã nói suy nghĩ của mình ở bài 15 rồi.. nếu nhìn thấy người thực sự gặp khó mà trong khả năng của mình có thể giúp thì mình có mất mát một chút cũng cảm thấy vui..
 
Upvote 0
Công thức cho nhẹ nha!
=SUMPRODUCT(ISNUMBER(SEARCH(""&$B$4:$B$12&"",""&E4&""))*$C$4:$C$12)
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
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
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:
  • 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.
Lâu lâu, tám với em 1 chút cho vui hén.

Thân
/-*+//-*+//-*+/
 
Lần chỉnh sửa cuối:
Upvote 0
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:
  • 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.
Lâu lâu, tám với em 1 chút cho vui hén.

Thân
/-*+//-*+//-*+/
Em cảm ơn lời dặn của Anh, Em sẽ ghi nhớ mãi.
Nói thật với Anh dạo này em bận công việc quá, đôi lúc vào xem rồi, rãnh em mới làm thử.
Anh ở bên đó dạo này vẫn khoẻ chứ?
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!
 
Upvote 0
...
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!
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ẻ.
/-*+//-*+//-*+/
 
Upvote 0
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ẻ.
/-*+//-*+//-*+/
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. :D
 
Upvote 0
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. :D
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.

Còn vụ anh "lụt nghề"! khà khà..."hổng dám đâu! em còn phải học bài..."

Chúc anh cuối tuần vui khỏe.

/-*+//-*+//-*+/
 
Upvote 0

Bài viết mới nhất

Back
Top Bottom