Nhờ giải thích đoạn code áp dụng phương thức tìm kiếm dữ liệu

Liên hệ QC

quochuy86

Thành viên chính thức
Tham gia
3/5/07
Bài viết
56
Được thích
9
PHP:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
  On Error Resume Next
  If Target.Count > 1 Then Exit Sub
  Sheet2.Cells(1, 1).Value = Target.Count
  Application.EnableEvents = False
  If Not Intersect(Range("B20:C30"), Target) Is Nothing Then
    With Target
      Select Case .Column
        Case 2
          If .Value = "" Then
            .Offset(0, 1).Value = ""
          Else
            .Offset(, 1).Value = Sheet1.Range("ENG").Find(Target).Offset(, 1).Value
          End If
        Case 3
          If .Value = "" Then
            .Offset(, -1).Value = ""
          Else
            .Offset(, -1).Value = Sheet1.Range("VIE").Find(Target).Offset(, -1).Value
          End If
      End Select
    End With
  End If
exitHandler:
  Application.EnableEvents = True
  Exit Sub
errHandler:
  MsgBox Err.ENGber & ": " & Err.Description
  GoTo exitHandler
End Sub

Nhờ mọi người giải thích dùm em code trên.

Em có 1 số thắc mắc như sau:
- "Intersect(Range("B20:C30"), Target) Is Nothing" có ý nghĩa jì ạh ( From Sa_DQ: Bạn không nên viết như vầy!)
- "target" ở đây là gì -0-/. em thử thì thấy "target.count = 1"
- "case column" có ý nghĩa jì ạ -0-/.
- ở đây sao lại dùng " .Offset(0, 1).Value" ạ**~**
- còn ".Offset(, 1).Value = Sheet1.Range("ENG").Find(Target).Offset(, 1).Value" nữa -+*/
Do mới tìm hiểu về VBA nên em thắc mắc nhiều quá+-+-+-+, mong mọi người thông cảm.
Thân. --=0
em gửi kèm theo file

From Sa_DQ: Để hiểu được 1 ngôn ngữ nào đó thì tiếng mẹ đẽ phải trơn tru là một điều kiện tiên quyết đó bạn!
 

File đính kèm

  • vi du ve find.xls
    67 KB · Đọc: 82
Chỉnh sửa lần cuối bởi điều hành viên:
Bạn dùng thử code củ chuối này xem sao nhé:

Mã:
Sub Loc()
   
    Dim lastRow1 As Long
    Dim lastRow2 As Long
    Dim sumifsFormula As String
   
    ' Find the last row with data in column B of the "MA" sheet
    With Worksheets("MA")
        lastRow1 = .Cells(.Rows.Count, "B").End(xlUp).Row
    End With
   
    ' Find the last row with data in column B of the "CT" sheet
    With Worksheets("CT")
        lastRow2 = .Cells(.Rows.Count, "B").End(xlUp).Row
    End With
   
    ' Construct the SUMIFS formula
    sumifsFormula = "=SUMIFS(MA!H3:H" & lastRow1 & ", MA!B3:B" & lastRow1 & ", CT!B4)"
   
    ' Clear the contents of the range K4:K" & lastRow2
    Range("K4:K" & lastRow2).ClearContents
   
    ' Select cell K4 and enter the formula using A1 notation
    Range("K4").Formula = sumifsFormula
   
    ' Fill the formula down from K4 to K" & lastRow2
    Range("K4:K" & lastRow2).FillDown
End Sub

Vâng anh, vậy viết lại code khác theo hàm Sumif/sumifs là được anh nhỉ, hihi
vâng, đoạn code chạy ổn rồi ạ
 
Upvote 0
vâng, đoạn code chạy ổn rồi ạ
cái này mình chỉ dò tìm lấy kết quả thôi, không cần tính toán gì cả
Bài đã được tự động gộp:

Cái này phải dùng Sumif/Sumifs chứ nhỉ? Vlookup có vẻ không đúng bản chất?
dạ mình giữa 2 sheet đúng mã cho ra kết quả là ok thôi hà. không tính toán gì cả?
 
Lần chỉnh sửa cuối:
Upvote 0
nhờ anh chị sửa giúp em đoạn code sao:
Sub FindMethod()
Dim i&, Rng As Range, KQ(), Ma()
Ma = Range(Sheets("CT").[B4], Sheets("CT").[B5000].End(3))
ReDim KQ(1 To UBound(Ma), 1 To 1)
For i = 1 To UBound(Ma)
Set Rng = Sheets("MA").[B3:B5000].Find(Ma(i, 1), , , 1)
If Not Rng Is Nothing Then
KQ(i, 1) = Rng(, 7)

End If
Next
Sheets("CT").[K4].Resize(i - 1, 1) = KQ
End Sub

1724903544811.png
 

File đính kèm

  • vlookup.xlsm
    55.9 KB · Đọc: 1
Upvote 0
Trước hết cứ chân phương thế này cho kết quả đúng cái đã:
PHP:
Sub KBangFCongMa_H()
 Dim Rng As Range, sRng As Range, Cls As Range
 Dim Rws As Long
 
 With Sheets("Ma")
    Rws = .UsedRange.Rows.Count
    Set Rng = .[B2].Resize(Rws)
    Sheets("CT").Select
    For Each Cls In Range([B4], [B4].End(xlDown))
        Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
        If sRng Is Nothing Then
            Cls.Interior.ColorIndex = 38
        Else
            Cells(Cls.Row, "K").Value = Cells(Cls.Row, "F").Value + .Cells(sRng.Row, "H").Value
        End If
    Next Cls
 End With
End Sub

Sau khi đã đúng thì tính tiếp!
 
Upvote 0
Trước hết cứ chân phương thế này cho kết quả đúng cái đã:
PHP:
Sub KBangFCongMa_H()
 Dim Rng As Range, sRng As Range, Cls As Range
 Dim Rws As Long
 
 With Sheets("Ma")
    Rws = .UsedRange.Rows.Count
    Set Rng = .[B2].Resize(Rws)
    Sheets("CT").Select
    For Each Cls In Range([B4], [B4].End(xlDown))
        Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlWhole)
        If sRng Is Nothing Then
            Cls.Interior.ColorIndex = 38
        Else
            Cells(Cls.Row, "K").Value = Cells(Cls.Row, "F").Value + .Cells(sRng.Row, "H").Value
        End If
    Next Cls
 End With
End Sub

Sau khi đã đúng thì tính tiếp!
dạ em cám ơn bác
 
Upvote 0
Về nguyên tắc thì bảng Tồn phải chứa các mã hàng là duy nhất thì mới hợp lý
là nếu có 2 mã hàng hoặc nhiều hơn thì bên cột tồn sẽ tính cộng dồn các mã giống mới ra kết quả chính xác
Bài đã được tự động gộp:

(/ì nhìn hình không rõ là như thế nào để trả lời câu của bạn.
Trùng mã hàng & khi ý thì cột 'Tổng' của 2 dòng sẽ cọng như thế nào???
dạ trường hợp có 2 hoặc nhiều hơn 2 mã giống nhau thì mình cộng dồn lũy kế các mã rồi mới ra kết quả chính xác ở cột tồn anh à
 
Upvote 0
là nếu có 2 mã hàng hoặc nhiều hơn thì bên cột tồn sẽ tính cộng dồn các mã giống mới ra kết quả chính xác
Bài đã được tự động gộp:


dạ trường hợp có 2 hoặc nhiều hơn 2 mã giống nhau thì mình cộng dồn lũy kế các mã rồi mới ra kết quả chính xác ở cột tồn anh à
Bảng báo cáo này rác rưởi.
Nếu không có cột cho biết nó thứ mấy trong bao nhiêu dòng, hoặc ngày tháng thì con số hàng tồn vô nghĩa.
1. Cột thứ: 2/5 (dòng thứ 2 của 5 dòng)
2. Cột ngày tháng (ngày : ngày cuối)
Tôi đọc báo cáo, nhìn vào còn biết tình trạng hàng, chứ bắt tôi phải filter rồi so tồn để tìm tồn cuối à?
 
Upvote 0
dạ trường hợp có 2 hoặc nhiều hơn 2 mã giống nhau thì mình cộng dồn lũy kế các mã rồi mới ra kết quả chính xác ở cột tồn anh à
Làm gì có chuyện 2 mã hàng giống nhau;
Nói hay viết điều phải là: Một mã hàng nhưng lại có ở 2 dòng
Mà mình cũng chưa rõ là các dòng trùng này ở trang tính có tên là gì?
(Đang đoán là ở trang 'Ma';)
Chụp cái hình chả ra làm sao mà nhồm vô được sất & tạm biệt bạn!
 
Upvote 0
Web KT

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

Back
Top Bottom