M.n giúp e làm công thức tìm kiếm bằng VBA (giống Vlookup) với ạ

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

bhtrong2808

Thành viên mới
Tham gia
18/9/23
Bài viết
13
Được thích
-2
Em muốn tạo 1 VBA có thể giúp tìm kiếm dữ liệu từ sheet 2 điền kết quả sang sheet 1. Cụ thể trong file Excel này em muốn code VBA của e có thể:
1. Bỏ qua tìm kiếm những cột đã có kết quả Điện Năng, Tiền tệ, km.
2. Tìm kiếm theo mã trạm của cột B trả về kết quả Điện Năng, Tiền tệ , km
3. Các kết quả này được lấy từ sheet 2. và kết quả đã lấy sẽ không tự động xóa khi dữ liệu sheet 2 bị xóa. tức không tự động cập nhật lại dữ liệu nữa nếu đã có kết quả.
Em cảm ơn ạ.
 

File đính kèm

  • Thống Kê GSMA.xlsx
    14.2 KB · Đọc: 19
Test thử đoạn code này xem sao

Mã:
Option Explicit
Sub vlookup()
Dim lr&, col&, rng As Range, ce As Range
Set rng = Sheets("Sheet2").Range("A2:T100000")
Sheets("Sheet1").Activate
lr = Cells(Rows.Count, "B").End(xlUp).Row
For Each ce In Range("D3:F" & lr)
    With ce
        If .Value = "" Then
            col = IIf(.Column = 4, 13, IIf(.Column = 5, 17, 19))
            .Value = Evaluate("=IFERROR(VLOOKUP(" & Cells(.Row, 2).Value & "," & "Sheet2!" & rng.Address & "," & col & ",0),"""")")
        End If
    End With
Next
End Sub
 

File đính kèm

  • Thống Kê GSMA.xlsm
    25.1 KB · Đọc: 29
Test thử đoạn code này xem sao

Mã:
Option Explicit
Sub vlookup()
Dim lr&, col&, rng As Range, ce As Range
Set rng = Sheets("Sheet2").Range("A2:T100000")
Sheets("Sheet1").Activate
lr = Cells(Rows.Count, "B").End(xlUp).Row
For Each ce In Range("D3:F" & lr)
    With ce
        If .Value = "" Then
            col = IIf(.Column = 4, 13, IIf(.Column = 5, 17, 19))
            .Value = Evaluate("=IFERROR(VLOOKUP(" & Cells(.Row, 2).Value & "," & "Sheet2!" & rng.Address & "," & col & ",0),"""")")
        End If
    End With
Next
End Sub
quá là tuyệt vời luôn ạ. hihi. e cảm ơn bác nhiều lắm ahehehehehe!! xD
Bài đã được tự động gộp:

Test thử đoạn code này xem sao

Mã:
Option Explicit
Sub vlookup()
Dim lr&, col&, rng As Range, ce As Range
Set rng = Sheets("Sheet2").Range("A2:T100000")
Sheets("Sheet1").Activate
lr = Cells(Rows.Count, "B").End(xlUp).Row
For Each ce In Range("D3:F" & lr)
    With ce
        If .Value = "" Then
            col = IIf(.Column = 4, 13, IIf(.Column = 5, 17, 19))
            .Value = Evaluate("=IFERROR(VLOOKUP(" & Cells(.Row, 2).Value & "," & "Sheet2!" & rng.Address & "," & col & ",0),"""")")
        End If
    End With
Next
End Sub
e cũng k có nhiều. mời bác cốc cafe nhé ạ. e donate momo nha.
Bài đã được tự động gộp:

quá là tuyệt vời luôn ạ. hihi. e cảm ơn bác nhiều lắm ahehehehehe!! xD
Bài đã được tự động gộp:


e cũng k có nhiều. mời bác cốc cafe nhé ạ. e donate momo nha.
QR momo của bác có vấn đề ạ,.
 
Lần chỉnh sửa cuối:
Hàm có sẵn không dùng, lại đi sài VBA làm gì ta?!
 
Lần chỉnh sửa cuối:
Thử làm đi rồi nói tiếp.

Tiếng Việt, từ đồng nghĩa với "dùng" viết là "xài"
"sài" có hai nghĩa:
1. sài đẹn (bệnh hoạn)
2. con sài là một giống chó rừng.
Bắt bẻ ba cái tiểu tiết để làm gì. Vùng miền thôi.
Ý tôi là sao mình không dùng hàm có sẵn, mà phải đi viết code cho Vlookup. Chắc gì đã hơn mấy kỹ sư của Bill Gates
 
Lần chỉnh sửa cuối:
Ụa, code cũng đang dùng VLOOKUP mà, có chăng chỉ giản lược vài thao tác bằng tay thôi :D
Chứ có phải thay thế Function VLOOKUP đâu mà hay hoặc dở hơn;
 
Bắt bẻ ba cái tiểu tiết để làm gì. Vùng miền thôi.
Ý tôi là sao mình không dùng hàm có sẵn, mà phải đi viết code cho Vlookup. Chắc gì đã hơn mấy kỹ sư của Bill Gates
nếu bạn đọc kĩ bài viết của mình sẽ hiểu vì sao k xài vlookup. điều kiện 3 của mình vlookup k làm đc. cảm ơn bạn đã lướt qua! chưa kể các file excel chứa 10.000 dòng đều có công thức thì data nó sẽ khủng cỡ nào. file đó sợ k mở nổi.
 
Bắt bẻ ba cái tiểu tiết để làm gì. Vùng miền thôi.
Ý tôi là sao mình không dùng hàm có sẵn, mà phải đi viết code cho Vlookup. Chắc gì đã hơn mấy kỹ sư của Bill Gates
Lại cái màn tự ái vặt, lo cãi cối cho nên mất chú ý vào vấn đề chính.
Đọc kỹ lại cái câu "Thử làm đi rồi nới tiếp". Đã thử chưa? Chưa thử thì chỉ là nói bừa.
 
nếu bạn đọc kĩ bài viết của mình sẽ hiểu vì sao k xài vlookup. điều kiện 3 của mình vlookup k làm đc. cảm ơn bạn đã lướt qua! chưa kể các file excel chứa 10.000 dòng đều có công thức thì data nó sẽ khủng cỡ nào. file đó sợ k mở nổi.
Lại ẩu :D
Bạn không làm được chứ không phải người khác không làm được. Nếu như chỉ là
PHP:
        If .Value = "" Then
            col = IIf(.Column = 4, 13, IIf(.Column = 5, 17, 19))
            .Value = Evaluate("=IFERROR(VLOOKUP(" & Cells(.Row, 2).Value & "," & "Sheet2!" & rng.Address & "," & col & ",0),"""")")
        End If
thì làm cái cột phụ kèm điều kiện = "" thì Vlookup, còn không thì lấy giá trị từ cột gốc;
1 tỷ dòng đầu tiên lọc các giá trị trống để giảm tính toán, tính xong thì ráp, không thì tách bảng, tách sheet, tách file;
Dĩ nhiên là vì "làm được", chứ còn mất công và mất thời gian.
 
Lại ẩu :D
Bạn không làm được chứ không phải người khác không làm được. Nếu như chỉ là
PHP:
        If .Value = "" Then
            col = IIf(.Column = 4, 13, IIf(.Column = 5, 17, 19))
            .Value = Evaluate("=IFERROR(VLOOKUP(" & Cells(.Row, 2).Value & "," & "Sheet2!" & rng.Address & "," & col & ",0),"""")")
        End If
thì làm cái cột phụ kèm điều kiện = "" thì Vlookup, còn không thì lấy giá trị từ cột gốc;
1 tỷ dòng đầu tiên lọc các giá trị trống để giảm tính toán, tính xong thì ráp, không thì tách bảng, tách sheet, tách file;
Dĩ nhiên là vì "làm được", chứ còn mất công và mất thời gian.
ok bn do mình ko làm đc. mình thích dùng vba được không ạ. Bạn giỏi! chúc mừng bạn ;)))
 
...
Dĩ nhiên là vì "làm được", chứ còn mất công và mất thời gian.
1. VBA đối với dân xin code ở đây là nó chỉ cần "bấm một phát". Những người xin code thường là do lười thết kế lại bảng tính, hay lười thao tác thủ công.

2. Một trong những lý do tôi dị ứng với dân hay viết tắt là vì họ dùng ngôn ngữ mạng quen; mà mạng thì phần lớn là dân côn đồ (họ tự khoe tính cách của mình là "giang hồ"). Nói chuyện với họ rất dễ được vào quán Ếch xào chửi.
 
Lại ẩu :D
Bạn không làm được chứ không phải người khác không làm được. Nếu như chỉ là
PHP:
        If .Value = "" Then
            col = IIf(.Column = 4, 13, IIf(.Column = 5, 17, 19))
            .Value = Evaluate("=IFERROR(VLOOKUP(" & Cells(.Row, 2).Value & "," & "Sheet2!" & rng.Address & "," & col & ",0),"""")")
        End If
thì làm cái cột phụ kèm điều kiện = "" thì Vlookup, còn không thì lấy giá trị từ cột gốc;
1 tỷ dòng đầu tiên lọc các giá trị trống để giảm tính toán, tính xong thì ráp, không thì tách bảng, tách sheet, tách file;
Dĩ nhiên là vì "làm được", chứ còn mất công và mất thời gian.
Bạn này nói đúng nè. Vlookup nhiều điều kiện thì làm thêm cột phụ và nối chuổi là được.
 
thì làm cái cột phụ kèm điều kiện = "" thì Vlookup, còn không thì lấy giá trị từ cột gốc;
1 tỷ dòng đầu tiên lọc các giá trị trống để giảm tính toán, tính xong thì ráp, không thì tách bảng, tách sheet, tách file;
Dĩ nhiên là vì "làm được", chứ còn mất công và mất thời gian.
Bạn này nói đúng nè. Vlookup nhiều điều kiện thì làm thêm cột phụ và nối chuổi là được.
Mọi người không để ý điều kiện 3 của bạn ấy à?
3. Các kết quả này được lấy từ sheet 2. và kết quả đã lấy sẽ không tự động xóa khi dữ liệu sheet 2 bị xóa. tức không tự động cập nhật lại dữ liệu nữa nếu đã có kết quả.
Em cảm ơn ạ.
Sau khi VLOOKUP thì có bước là lưu giá trị và xóa công thức (tương đương lệnh copy/paste value), và bước này đòi hỏi VBA.
 
1. VBA đối với dân xin code ở đây là nó chỉ cần "bấm một phát". Những người xin code thường là do lười thết kế lại bảng tính, hay lười thao tác thủ công.

2. Một trong những lý do tôi dị ứng với dân hay viết tắt là vì họ dùng ngôn ngữ mạng quen; mà mạng thì phần lớn là dân côn đồ (họ tự khoe tính cách của mình là "giang hồ"). Nói chuyện với họ rất dễ được vào quán Ếch xào chửi.
Cái này bác nhận xét sai. Dân mạng hay viết tắt thường là tuổi teen, viết vậy mới nhanh, chêm thêm tiếng anh nữa mới ngầu. Không có chợ búa, giang hồ, giang nắng chi ở đây cả nhé bác.
Đã thành thói quen, muốn sửa cũng phải từ từ chứ bác. Họ hay nói: "muốn nhanh thì cứ phải từ từ!"
Bài đã được tự động gộp:

Lại cái màn tự ái vặt, lo cãi cối cho nên mất chú ý vào vấn đề chính.
Đọc kỹ lại cái câu "Thử làm đi rồi nới tiếp". Đã thử chưa? Chưa thử thì chỉ là nói bừa.
Sorry bác!
Tại đọc cái tiêu đề mà ko xem file+nội dung.
 
Lần chỉnh sửa cuối:
...Sorry bác!
Tại đọc cái tiêu đề mà ko xem file+nội dung.
Lại ngôn ngữ tiên.
Từ sorry đi trước một danh từ/đại danh từ thì nó làm tĩnh từ diễn tả trạng thái của danh từ/đại danh từ ấy. Và sorry tĩnh từ có nghĩa là "tội nghiệp", hay "khốn nạn" theo tiếng Bắc.
Từ sorry mà người ta hay NÓI trước danh từ/đại danh từ thực ra nó có một dấu ngắt (chấm hay phẩy). Lúc ấy thì nó không phải là tĩnh từ, mà là một từ trong các phản ứng của người nói (tức là xin lỗi)
Dân tiên nghe người ta nói, cứ ngỡ hai từ này đi sát nhau. Vì lúc nói, đâu có ai nói lên "chấm, phẩy,.."

Văn phạm và chính tả học xong ở lớp 7. Thời gian trưởng thành sau đó đủ để "từ từ" chúng thoái hóa thành ngôn ngữ tiên.
 
Lần chỉnh sửa cuối:
Mọi người không để ý điều kiện 3 của bạn ấy à?
Anh làm em thực sự tò mò luôn á. Phải tải xuống xem thử. Cái EVALUE trên diễn đàn cũng nói nhiều mà.
Nếu em dùng công thức: =IFERROR(VLOOKUP($B4,Sheet2!$A$2:$T$100000,D$1,0),"")
Dòng D1:F1 cũng có thể index từ table dựa theo D2:F2
Hay em có đang hiểu nhầm gì không ?

1701346449784.png
 
Web KT
Back
Top Bottom