?Hỏi thêm về Match (VBA)

Liên hệ QC

ThuNghi

Hãy cho rồi sẽ nhận!
Thành viên đã mất
Tham gia
16/8/06
Bài viết
3,808
Được thích
4,449
Các bạn giúp tôi về hàm match
Sub LayDongDau()
Dim NgayCuoi As Date, NgayBH As Range, MaNVBH As Range
Dim NgayDau As Date
S11.Select
NgayDau = S11.Range("C2")
NgayCuoi = S11.Range("C3")

MaNV = S11.Range("D2")
Set NgayBH = S01.Range("E3", S01.Range("E65536").End(xlUp))
Set MaNVBH = S01.Range("d3", S01.Range("d65536").End(xlUp))
DongCuoi = NgayBH.Rows.Count + 2
DongDau = ActiveSheet.WorksheetFunction.Match(NgayDau, NgayBH, 1)
MsgBox DongDau
End Sub
1/Làm thế nào hiểu DongDau theo hàm match trên
- Nếu mà không có thì báo không tìm ra
- Nếu có thì MsgBox
2/Có thể bỏ bớt
NgayDau = S11.Range("C2")
NgayCuoi = S11.Range("C3")

Vì các biến này lấy từ formBCNV, ie không cần dùng cells trung gian mà gán thẳng vào Sub trên để chạy luôn.
Private Sub CBOK1_Click()
With S11
.Range("C2") = DateSerial(Year(Me.NgayDau), Month(Me.NgayDau), Day(Me.NgayDau))
.Range("C3") = DateSerial(Year(Me.NgayCuoi), Month(Me.NgayCuoi), Day(Me.NgayCuoi))
End With
End Sub
Các Bạn xem qua file, càng lấn vào VBA càng thấy mình o biết gì cả.
Xin cám ơn.
 

File đính kèm

  • MatchVBA.rar
    17.3 KB · Đọc: 111
Sub LayDongDau()
Dim NgayCuoi As Date, NgayBH As Range
Dim NgayDau As Date
S11.Select
NgayDau = S11.Range("C2")
NgayCuoi = S11.Range("C3")

Set NgayBH = S01.Range("E3", S01.Range("E65536").End(xlUp))
DongCuoi = NgayBH.Rows.Count + 2
DongDau = ActiveSheet.WorksheetFunction.Match(NgayDau, NgayBH, 1)
MsgBox DongDau
End Sub
Tôi thấy nếu thay
NgayDau = S11.Range("C2")
Dim NgayDau as range
Set NgayDau = S11.Range("C2")
Thì có thể chạy được, nhưng mà nếu tôi làm thêm
DongCuoi = ActiveSheet.WorksheetFunction.Countif(NgayBH,">"&NgayDau)
Thì không OK. Hình như hàm countif, match (VBA) đối với ngày thì có cái gì phải khai báo thêm.
Các mạng giúp tôi nên làm code này thế nào.
Mục đích là tìm trong mảng ngày theo ngày cho trước nằm vị trí nào và có bao nhiêu thỏa DK.
Cám ơn nhiều.
 
Upvote 0
Sao không thấy ai giúp tôi cả. Anh NVSON ơi, hỗ trợ đi.
Mục đích bài trên là để trích lọc dữ liệu theo ngày đầu, ngày cuối nhằm làm giảm số record phải truy xuất.
 
Upvote 0
Bác tham khảo code sau:
Mã:
Sub LayDongDau()
Dim NgayCuoi, NgayDau
Dim NgayBH As Range, MaNVBH As Range
Dim Dongdau, Dongcuoi
NgayDau = (S11.Range("C2"))
NgayCuoi = S11.Range("C3")
MaNV = S11.Range("D2")
Set NgayBH = S01.Range("E3", Range("E65536").End(xlUp))
Set MaNVBH = S01.Range("D3", Range("D65536").End(xlUp))
Dongcuoi = NgayBH.Rows.Count + 2
'DongCuoi = NgayBH.Row
Dongdau = Application.Match(CLng(NgayDau), NgayBH, 0)
MsgBox Dongdau
End Sub
 
Upvote 0
CLng (expression)
Chuyển đổi biểu thức expression sang kiểu Long, OK
Cái này hay quá, Sơn giải thích hộ code trên nhé.
Application.Match sao không cần WorksheetFunction.Match
Rút gọn lại như vậy là ok? Hỏi về khai biến
Sub LayDongDau2()
Dim NgayCuoi, NgayDau
Dim NgayBH As Range
Dim Dongdau, Dongcuoi
NgayDau = S11.Range("C2")
NgayCuoi = S11.Range("C3")

Set NgayBH = S01.Range("E1", Range("E65536").End(xlUp))
Dongdau = Application.Match(CLng(NgayDau), NgayBH, 1)
Dongcuoi = Application.CountIf(NgayBH, ">" & CLng(NgayDau))
MsgBox Dongdau
MsgBox Dongcuoi
End Sub
Cám ơn rất nhiều.
BX mình dân HP, ước gì có dịp gắp nhỉ?
 
Upvote 0
Sao bác không dùng AutoFilter cho đơn giản nhỉ.

Bác thử đoạn Code sau: "bác phải tạo thêm 1 sheet Report để chứa dữ liệu lọc được"
Mã:
Private Sub CBOK1_Click()
    Sheets("Nhatky").Range("A1:E26").AutoFilter Field:=5, Criteria1:=">" & Me.NgayDau, Operator:=xlAnd, Criteria2:="<" & Me.NgayCuoi
    Selection.Copy
    Sheets("Report").Cells(1, 1).PasteSpecial (xlPasteValues)
    Sheets("Nhatky").Range("A1:E26").AutoFilter
    Sheets("Report").Select
End Sub

Private Sub UserForm_Initialize()
Sheets("Report").Range("A1:E1000").ClearContents
Sheets("Nhatky").Select
End Sub
 
Upvote 0
Application.Match sao không cần WorksheetFunction.Match
Cái này bác tham khảo bài viết này nhé!
(Vì bác vội nên em cũng chưa bẫy lỗi cho bác, bác hoàn thiện thêm...)
BX mình dân HP, ước gì có dịp gắp nhỉ?
Hi hi
Thế thì thế nào chẳng có dịp gặp. Có khi lại gặp nhau ở MN cũng nên đấy chứ (vì em cũng chuẩn bị nhận được công trình ở Kiên Giang đấy...)
 
Upvote 0
Web KT
Back
Top Bottom