Chia sẻ_ Hàm Glookup_ Tìm kiếm dữ liệu giao nhau giữa cột và hàng (1 người xem)

  • Thread starter Thread starter NHG
  • Ngày gửi Ngày gửi
Liên hệ QC

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

NHG

Thành viên hoạt động
Tham gia
15/1/07
Bài viết
148
Được thích
127
Hi các bạn
Chắc nhiều bạn đã gặp tình huống tìm giá trị giao nhau giữa hàng và cột
Glookup.jpg
Có nhiều cách giải quyết, nhưng để tiện trong công việc mình đã tạo ra hàm Glookup để việc tìm kiếm đỡ nhọc hơn
Glookup(Giá trị cần tìm; Bảng cần tìm)
Mình đưa file ví dụ lên để các bạn tham khảo, nếu có thể tối ưu code chạy tốt hơn thì càng tốt :)
 

File đính kèm

Lần chỉnh sửa cuối:
tiện đây bác cho hỏi là e có file dữ liệu như sau,muốn dựa vào cột
Hi các bạn
Chắc nhiều bạn đã gặp tình huống tìm giá trị giao nhau giữa hàng và cột
View attachment 237776
Có nhiều cách giải quyết, nhưng để tiện trong công việc mình đã tạo ra hàm Glookup để việc tìm kiếm đỡ nhọc hơn
Glookup(Giá trị cần tìm; Bảng cần tìm)
Mình đưa file ví dụ lên để các bạn tham khảo, nếu có thể tối ưu code chạy tốt hơn thì càng tốt :)
tiện đây bác cho e hỏi là e có file dữ liệu như sau muốn dựa vào ngày ở hàng ngang xong đó tìm ra cột dữ liệu,rồi tìm trong cột đó có chứa dữ liệu phù hợp điều kiện thứ hai là họ tên để lấy số lượng,bác xem có hướng nào giúp e với file và mô tả ở dưới ah
Bài đã được tự động gộp:

trong file có 2 sheet một shet tổng hợp là nơi nhập dữ liệu để tìm kiếm và một sheet chứ dữ liệu.e muốn là khi nhập tên khách hàng ở sheet tổng hợp thì sẽ dựa vào tên khách hàng và điều kiện là ngày để đến sheet dữ liệu tìm là lấy ra số lượng của khách hàng đó,mong anh chi em trong diễn đàn giúp đỡ
kết quả mong muốn và yêu cầu tìm kiếm
 

File đính kèm

  • 1590053957904.png
    1590053957904.png
    135.7 KB · Đọc: 9
  • 1590054111141.png
    1590054111141.png
    160 KB · Đọc: 9
  • test.xlsx
    test.xlsx
    11.6 KB · Đọc: 11
Upvote 0
tiện đây bác cho hỏi là e có file dữ liệu như sau,muốn dựa vào cột

tiện đây bác cho e hỏi là e có file dữ liệu như sau muốn dựa vào ngày ở hàng ngang xong đó tìm ra cột dữ liệu,rồi tìm trong cột đó có chứa dữ liệu phù hợp điều kiện thứ hai là họ tên để lấy số lượng,bác xem có hướng nào giúp e với file và mô tả ở dưới ah
Bài đã được tự động gộp:

trong file có 2 sheet một shet tổng hợp là nơi nhập dữ liệu để tìm kiếm và một sheet chứ dữ liệu.e muốn là khi nhập tên khách hàng ở sheet tổng hợp thì sẽ dựa vào tên khách hàng và điều kiện là ngày để đến sheet dữ liệu tìm là lấy ra số lượng của khách hàng đó,mong anh chi em trong diễn đàn giúp đỡ
kết quả mong muốn và yêu cầu tìm kiếm
Mình ko có nhiều thời gian nên không hỗ trợ đc bạn, nhưng về cách thiết kế cơ sở dữ liệu hiện tại của bạn là chưa phù hợp; dữ liệu người ta thường nhập theo dòng chữ không nhập theo cột. Ví dụ của bạn dữ liệu chỉ cần thiết kế 4 cột:
Số Thứ tự Ngày thực hiện Người thực hiện Số lượng
Như thế sau này mới dễ lập công thức và quản lý dữ liệu
 
Upvote 0
Mình ko có nhiều thời gian nên không hỗ trợ đc bạn, nhưng về cách thiết kế cơ sở dữ liệu hiện tại của bạn là chưa phù hợp; dữ liệu người ta thường nhập theo dòng chữ không nhập theo cột. Ví dụ của bạn dữ liệu chỉ cần thiết kế 4 cột:
Số Thứ tự Ngày thực hiện Người thực hiện Số lượng
Như thế sau này mới dễ lập công thức và quản lý dữ liệu
cảm ơn bác đã góp ý,cái này của e tổng hợp theo ngày,và mỗi ngày thì số ng và danh sách tên trong đó không giống nhau,và dữ liệu mỗi ngày là tầm 3 nghìn dòng ah,nếu để dữ liệu ngày theo dòng thì 1 ngày thế tầm 3 nghìn dòng và tới ngày thứ 2 đã tầm 6 nghìn dòng rồi bác
 
  • Thích
Reactions: NHG
Upvote 0
tiện đây bác cho hỏi là e có file dữ liệu như sau,muốn dựa vào cột

tiện đây bác cho e hỏi là e có file dữ liệu như sau muốn dựa vào ngày ở hàng ngang xong đó tìm ra cột dữ liệu,rồi tìm trong cột đó có chứa dữ liệu phù hợp điều kiện thứ hai là họ tên để lấy số lượng,bác xem có hướng nào giúp e với file và mô tả ở dưới ah
Bài đã được tự động gộp:

trong file có 2 sheet một shet tổng hợp là nơi nhập dữ liệu để tìm kiếm và một sheet chứ dữ liệu.e muốn là khi nhập tên khách hàng ở sheet tổng hợp thì sẽ dựa vào tên khách hàng và điều kiện là ngày để đến sheet dữ liệu tìm là lấy ra số lượng của khách hàng đó,mong anh chi em trong diễn đàn giúp đỡ
kết quả mong muốn và yêu cầu tìm kiếm
Bạn thử dùng công thức này xem sao
Mã:
=VLOOKUP($F2,OFFSET('số liệu mỗi tháng'!$A$2:$A$3000,,MATCH($E$1,'số liệu mỗi tháng'!$B$1:$BK$1,0),,2),2,0)
 
Upvote 0
Chắc nhiều bạn đã gặp tình huống tìm giá trị giao nhau giữa hàng và cột

Có nhiều cách giải quyết, nhưng để tiện trong công việc mình đã tạo ra hàm Glookup để việc tìm kiếm đỡ nhọc hơn
Glookup(Giá trị cần tìm; Bảng cần tìm)
Mình đưa file ví dụ lên để các bạn tham khảo, nếu có thể tối ưu code chạy tốt hơn thì càng tốt :)
Nếu là mình thì mình sẽ phải tách ra tham biến 'Giá trị cần tìm' thành 2; Như vậy cú pháp hàm sẽ phải là:

GPELookUp(MaNV As String, TenCot As String; BangCantim As Range )
 
Upvote 0
Hi các bạn
Chắc nhiều bạn đã gặp tình huống tìm giá trị giao nhau giữa hàng và cột
View attachment 237776
Có nhiều cách giải quyết, nhưng để tiện trong công việc mình đã tạo ra hàm Glookup để việc tìm kiếm đỡ nhọc hơn
Glookup(Giá trị cần tìm; Bảng cần tìm)
Mình đưa file ví dụ lên để các bạn tham khảo, nếu có thể tối ưu code chạy tốt hơn thì càng tốt :)
Gặp trường hợp này là em Index Match liền vì mới học lỏm được của các anh chị trong GPE, hi. Trước đó nữa thì em phải tạo dòng tiêu đề phụ ra 1 chỗ khác rồi đặt STT cột cho mỗi tiêu đề. Xong vào ô công thức chính dùng vlookup (có hlookup bên trong) . hiiii, ngại ghê. Em chưa biết VBA.

PS: bác đặt tên hàm dài thòn mắc cười vậy. Chắc là để mọi người nhìn vào sẽ biết luôn cấu trúc hàm hén !
Cám ơn bác.
 
Upvote 0
Hi các bạn
Chắc nhiều bạn đã gặp tình huống tìm giá trị giao nhau giữa hàng và cột
View attachment 237776
Có nhiều cách giải quyết, nhưng để tiện trong công việc mình đã tạo ra hàm Glookup để việc tìm kiếm đỡ nhọc hơn
Glookup(Giá trị cần tìm; Bảng cần tìm)
Mình đưa file ví dụ lên để các bạn tham khảo, nếu có thể tối ưu code chạy tốt hơn thì càng tốt :)
Vậy bạn có code VBA của hàm này không? Cho mình với
Bài đã được tự động gộp:

Nếu là mình thì mình sẽ phải tách ra tham biến 'Giá trị cần tìm' thành 2; Như vậy cú pháp hàm sẽ phải là:

GPELookUp(MaNV As String, TenCot As String; BangCantim As Range )
Bạn có code VBA không cho minh với
 
Lần chỉnh sửa cuối:
Upvote 0
Upvote 0
Hi các bạn
Chắc nhiều bạn đã gặp tình huống tìm giá trị giao nhau giữa hàng và cột
View attachment 237776
Có nhiều cách giải quyết, nhưng để tiện trong công việc mình đã tạo ra hàm Glookup để việc tìm kiếm đỡ nhọc hơn
Glookup(Giá trị cần tìm; Bảng cần tìm)
Mình đưa file ví dụ lên để các bạn tham khảo, nếu có thể tối ưu code chạy tốt hơn thì càng tốt :)
Code bạn viết thế này chạy sẽ rất chậm nếu dữ liệu nhiều. Theo tôi với cái đề này thì dùng công thức là được rồi.
 
Upvote 0
Upvote 0
Bạn thử dùng công thức này xem sao
Mã:
=VLOOKUP($F2,OFFSET('số liệu mỗi tháng'!$A$2:$A$3000,,MATCH($E$1,'số liệu mỗi tháng'!$B$1:$BK$1,0),,2),2,0)
rất cảm ơn bác,e đã thử và chuẩn như ý e muốn ah,một lần nữa cảm ơn bác rất nhiều
 
Upvote 0
Hi các bạn
Chắc nhiều bạn đã gặp tình huống tìm giá trị giao nhau giữa hàng và cột
View attachment 237776
Có nhiều cách giải quyết, nhưng để tiện trong công việc mình đã tạo ra hàm Glookup để việc tìm kiếm đỡ nhọc hơn
Glookup(Giá trị cần tìm; Bảng cần tìm)
Mình đưa file ví dụ lên để các bạn tham khảo, nếu có thể tối ưu code chạy tốt hơn thì càng tốt :)
Có khi nào có trường hợp như hình dưới đây không

Annotation 2020-05-22 110828.jpg


Lúc ấy nếu tôi muốn kết quả là 33 thì phải làm sao?
 
Upvote 0
Có khi nào có trường hợp như hình dưới đây không

View attachment 237789


Lúc ấy nếu tôi muốn kết quả là 33 thì phải làm sao?
Có bạn ạ, vì nó ghộp mã cột và mã hàng để thành mã tìm kiếm, nên khi đặt mã lúc đầu cố tránh thôi b :)
Chắc các cao thủ sẽ tìm ra cách bẫy lỗi, nhưng hàm có thể chạy chậm hơn vì phải kiểm tra nhiều điều kiện
 
Upvote 0
Sao không dùng cặp VLOOKUP + MATCH ? Hahaha ...
Hình như còn giai đoạn phải tách cái chuỗi cần tìm ra thành 2 phần rổi từ đó mới dò.
Thớt chả giải thích hàm nhận tham số gì và trả về gì cho nên tôi lười xem code. (vả lại tôi cũng không thích nói tiếng Tây)
 
Upvote 0
Có bạn ạ, vì nó ghộp mã cột và mã hàng để thành mã tìm kiếm, nên khi đặt mã lúc đầu cố tránh thôi b :)
Chắc các cao thủ sẽ tìm ra cách bẫy lỗi, nhưng hàm có thể chạy chậm hơn vì phải kiểm tra nhiều điều kiện
"Bẫy lỗi" bằng cách làm giống như bài #16 được không bạn?
 
  • Thích
Reactions: NHG
Upvote 0
SA_DQ đã viết:
Nếu là mình thì mình sẽ phải tách ra tham biến 'Giá trị cần tìm' thành 2; Như vậy cú pháp hàm sẽ phải là:
GPELookUp(MaNV As String, TenCot As String; BangCantim As Range )

Bạn có code VBA không cho minh với

4​
5​
8​
9​
LMD01Tiền 3
Mã tênHọ và tênTiền 1Tiền 2Tiền 3Tiền 9Ghi chúGhi chú1
LMD00Lê Mỹ Dung
1​
2​
jk
50​
Ghi chú 15.4 =traBang(K6,M6,B7:I19)
LMD01Lê T. Mỹ Dung
5​
7​
5.4​
16​
Ghi chú 2
LMD02Lâm Mạnh Dũng
8​
6​
10​
LMD03Lý Mỹ Dung
50​
60​
70​
Ghi chú 4
LMD04Lê Võ Mạnh Danh
1​
Ghi chú 5
LMD05Lại Minh Danh
LMD06Lý Minh Dùng
3​
Ghi chú 7
LMD07Lê Văn Mai DyGhi chú 8
LMD08Lại Mai Du
LMD09Lại T. Mỹ Du
13​
HeheGhi chú 10
LMD00Ngô & Ba
NTA50Nhâm T. An
160​
#DIV/0!​
300​
Ghi chú 13

Nội dung hàm:
Mã:
Function TraBang(MaNV As String, Col As String, CSDL As Range)
Dim J As Long, W As Integer
Dim Arr()

Arr() = CSDL.Value
For J = 1 To UBound(Arr())
    If Arr(J, 1) = MaNV Then
        For W = 2 To UBound(Arr(), 2)
            If Arr(1, W) = Col Then
                TraBang = Arr(J, W)
                Exit Function
            End If
        Next W
    End If
Next J
End Function
 
Lần chỉnh sửa cuối:
Upvote 0
4​
5​
8​
9​
LMD01Tiền 3
Mã tênHọ và tênTiền 1Tiền 2Tiền 3Tiền 9Ghi chúGhi chú1
LMD00Lê Mỹ Dung
1​
2​
jk
50​
Ghi chú 15.4 =traBang(K6,M6,B7:I19)
LMD01Lê T. Mỹ Dung
5​
7​
5.4​
16​
Ghi chú 2
LMD02Lâm Mạnh Dũng
8​
6​
10​
LMD03Lý Mỹ Dung
50​
60​
70​
Ghi chú 4
LMD04Lê Võ Mạnh Danh
1​
Ghi chú 5
LMD05Lại Minh Danh
LMD06Lý Minh Dùng
3​
Ghi chú 7
LMD07Lê Văn Mai DyGhi chú 8
LMD08Lại Mai Du
LMD09Lại T. Mỹ Du
13​
HeheGhi chú 10
LMD00Ngô & Ba
NTA50Nhâm T. An
160​
#DIV/0!​
300​
Ghi chú 13

Nội dung hàm:
Mã:
Function TraBang(MaNV As String, Col As String, CSDL As Range)
Dim J As Long, W As Integer
Dim Arr()

Arr() = CSDL.Value
For J = 1 To UBound(Arr())
    If Arr(J, 1) = MaNV Then
        For W = 2 To UBound(Arr(), 2)
            If Arr(1, W) = Col Then
                TraBang = Arr(J, W)
                Exit Function
            End If
        Next W
    End If
Next J
End Function
Cám ơn SA_DQ rất nhiều
 
Upvote 0
Rỗi việc, thêm 1 tham khảo cho các bạn chập chững vô VBA:
PHP:
Function gpeVLOOKUP(MaNV As String, Cot As String, CSDL As Range)
Dim J As Long, W As Integer
Dim Arr():                                 Dim Tmp As String

Arr() = CSDL.Value
For J = 1 To UBound(Arr())
    If Arr(J, 1) = MaNV Then
        W = Switch(Cot = Arr(1, 3), 3, Cot = Arr(1, 4), 4, Cot = Arr(1, 5), 5, Cot = Arr(1, 6), 6, Cot = Arr(1, 7), 7, Cot = Arr(1, 8), 8)
        gpeVLOOKUP = Arr(J, W):             Exit Function
    End If
Next J
End Function
 
Upvote 0
Rỗi việc, thêm 1 tham khảo cho các bạn chập chững vô VBA:
PHP:
Function gpeVLOOKUP(MaNV As String, Cot As String, CSDL As Range)
Dim J As Long, W As Integer
Dim Arr():                                 Dim Tmp As String

Arr() = CSDL.Value
For J = 1 To UBound(Arr())
    If Arr(J, 1) = MaNV Then
        W = Switch(Cot = Arr(1, 3), 3, Cot = Arr(1, 4), 4, Cot = Arr(1, 5), 5, Cot = Arr(1, 6), 6, Cot = Arr(1, 7), 7, Cot = Arr(1, 8), 8)
        gpeVLOOKUP = Arr(J, W):             Exit Function
    End If
Next J
End Function

Oái,
cac-giai-doan-phat-trien-cua-tre-3.jpg
Trước cái hình đầu (ngồi) còn lẫy với lật nữa, hiiiii
Hình cuối là mới biết đứng, còn chưa đi chập chững. :D
Con hẹn tới SN GPE mình là con chập chững nha bác.
 
Upvote 0
Rỗi việc, thêm 1 tham khảo cho các bạn chập chững vô VBA:
PHP:
Function gpeVLOOKUP(MaNV As String, Cot As String, CSDL As Range)
Dim J As Long, W As Integer
Dim Arr():                                 Dim Tmp As String

Arr() = CSDL.Value
For J = 1 To UBound(Arr())
    If Arr(J, 1) = MaNV Then
        W = Switch(Cot = Arr(1, 3), 3, Cot = Arr(1, 4), 4, Cot = Arr(1, 5), 5, Cot = Arr(1, 6), 6, Cot = Arr(1, 7), 7, Cot = Arr(1, 8), 8)
        gpeVLOOKUP = Arr(J, W):             Exit Function
    End If
Next J
End Function
Đoạn code ni chỉ chạy trong 1 khoảng các cột ngắn thôi SA)DQ ạ. Nếu mình nới rộng dữ liệu thêm vài cột nữa là nó không chạy được...
 
Upvote 0
Mình cũng đã dùng cái này rồi bạn, nhưng với các bạn chưa quen dùng hàm kết hợp, thì việc kết hợp vlookup và match quá phức tạp, mình muốn một công thức đơn giản hơn.
"việc kết hợp vlookup và match quá phức tạp" và thế là bạn dẫn mọi người đến với VBA ! Yêu thế không biết. (*%:heart:
 
Upvote 0
Tách giá trị dò tìm dòng và cột riêng, Góp vui, hahaha ...

PHP:
Function PLookup(ByVal tenR As String, ByVal tenC As String, ByVal mang As Range) As Variant
Dim Dong As Long, Cot As Long, sArr As Variant
 
 sArr = mang.Value
 For Dong = 2 To UBound(sArr, 1)
    If sArr(Dong, 1) = tenR Then
        For Cot = 2 To UBound(sArr, 2)
            If sArr(1, Cot) = tenC Then
                PLookup = sArr(Dong, Cot)
                Exit Function
            End If
        Next Cot
    End If
Next Dong

End Function
 
Upvote 0
Đoạn code ni chỉ chạy trong 1 khoảng các cột ngắn thôi SA)DQ ạ. Nếu mình nới rộng dữ liệu thêm vài cột nữa là nó không chạy được...
Thì bạn nới cái này (số cột) thì phải nới cái kia (hàm SWITCH()) chớ bộ nới 1 bên ai mà chịu!
Mình có lần đã thử hàm Switch() này trên trăm tham biến cũng vô tư!
 
Upvote 0
Tách giá trị dò tìm dòng và cột riêng, Góp vui, hahaha ...

PHP:
Function PLookup(ByVal tenR As String, ByVal tenC As String, ByVal mang As Range) As Variant
Dim Dong As Long, Cot As Long, sArr As Variant

sArr = mang.Value
For Dong = 2 To UBound(sArr, 1)
    If sArr(Dong, 1) = tenR Then
        For Cot = 2 To UBound(sArr, 2)
            If sArr(1, Cot) = tenC Then
                PLookup = sArr(Dong, Cot)
                Exit Function
            End If
        Next Cot
    End If
Next Dong

End Function

tenR là tên dòng; còn tenC là tên cột hả bác?
 
Upvote 0
Thật ra, một mảng dữ liệu nhỏ thì không nhất thiết cần VBA. Tuy nhiên, đối với những dữ liệu lớn, phức tạp thì phải cần đến VBA thôi.
Về mức độ phức tạp thì có thể thế này:
Cột mã NV đang là không trùng; Nhưng nếu có trùng nhau (nhiều dòng của 1 mã NV) thì VBA cũng sẽ thể hiện hết các dòng trùng của mã NV đó (bỡi 1 UDF mảng)
. . . . .
 
Upvote 0
Bạn thử dùng công thức này xem sao
Mã:
=VLOOKUP($F2,OFFSET('số liệu mỗi tháng'!$A$2:$A$3000,,MATCH($E$1,'số liệu mỗi tháng'!$B$1:$BK$1,0),,2),2,0)
bác cho hỏi là nếu xóa cột A đi thì công thức sẽ đổi lại ntn ah,e xóa và thử lại =VLOOKUP($F2,OFFSET('số liệu mỗi tháng'!$A$1:$A$3000,,MATCH($E$1,'số liệu mỗi tháng'!$A$1:$BJ$1,0),,2),2,0) thì không đúng ah,phần này e muốn bác giúp e giải thích để học hỏi thêm ah
1590227963742.png
 
Upvote 0

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

Back
Top Bottom