Tìm và điền dữ liệu theo từ khóa

Liên hệ QC

Phamvannhan1531

Thành viên mới
Tham gia
29/9/20
Bài viết
32
Được thích
6
Em xin chào các anh chị trong diễn đàn. Em có bài toán cần tìm và điền dữ liệu theo từ khóa. Em xin nhờ các anh chị giúp em code vba để điền dữ liệu với ạ. Em điền bằng thủ công mất nhiều thời gian ạ. Em xin sửa thêm ạ.. Những dòng không có từ khóa sẽ điền là chữ i ạ. Những dòng trống thì sẽ để trắng ạ
 

File đính kèm

  • nhờ gpe1.xlsx
    8.6 KB · Đọc: 19
Lần chỉnh sửa cuối:
Em xin chào các anh chị trong diễn đàn. Em có bài toán cần tìm và điền dữ liệu theo từ khóa. Em xin nhờ các anh chị giúp em code vba để điền dữ liệu với ạ. Em điền bằng thủ công mất nhiều thời gian ạ. Em xin sửa thêm ạ.. Những dòng không có từ khóa sẽ điền là chữ i ạ. Những dòng trống thì sẽ để trắng ạ
Bạn cần tạo 1 bảng gồm 2 cột: Cột 1 gồm các từ cần tìm kiếm, cột 2 các kết quả tương ứng với các từ tìm kiếm.
Sau đó đem đối chiếu các cụm từ trong cột B với bảng tra tìm kia.
Bài này tôi đã thấy trên diễn đàn này. Bạn chịu khó tìm nhé.
 
Upvote 0
Bạn cần tạo 1 bảng gồm 2 cột: Cột 1 gồm các từ cần tìm kiếm, cột 2 các kết quả tương ứng với các từ tìm kiếm.
Sau đó đem đối chiếu các cụm từ trong cột B với bảng tra tìm kia.
Bài này tôi đã thấy trên diễn đàn này. Bạn chịu khó tìm nhé.
Em thử tìm kiếm và thấy có bài mà không làm được. Em xin nhờ bác giúp em với ạ. Bài toán của em nhiều dữ liệu quá mà em chưa biết làm như nào
 

File đính kèm

  • nhờ gpe1.xlsx
    9.4 KB · Đọc: 14
Upvote 0
Tạm thời là vầy, có gì bổ sung sau:
PHP:
Sub ThayCumTu()
 Dim Cls As Range, Rng As Range, sRng As Range, Rg0 As Range
 Dim MyAdd As String
 Dim W As Integer

 Set Rng = [B8].CurrentRegion
 For Each Cls In Range([F8], [F8].End(xlDown))
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlPart)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address:               Set Rg0 = sRng
        W = 0:
        Do
            W = W + 1
            If W > 1 Then
                sRng.Value = Replace(sRng.Value, Cls.Value, Cls.Offset(, 1).Value)                
            End If
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
        Rg0.Value = Replace(Rg0.Value, Cls.Value, Cls.Offset(, 1).Value)
        Set Rg0 = Nothing
    End If
 Next Cls
End Sub
 
Upvote 0
Tạm thời là vầy, có gì bổ sung sau:
PHP:
Sub ThayCumTu()
Dim Cls As Range, Rng As Range, sRng As Range, Rg0 As Range
Dim MyAdd As String
Dim W As Integer

Set Rng = [B8].CurrentRegion
For Each Cls In Range([F8], [F8].End(xlDown))
    Set sRng = Rng.Find(Cls.Value, , xlFormulas, xlPart)
    If Not sRng Is Nothing Then
        MyAdd = sRng.Address:               Set Rg0 = sRng
        W = 0:
        Do
            W = W + 1
            If W > 1 Then
                sRng.Value = Replace(sRng.Value, Cls.Value, Cls.Offset(, 1).Value)              
            End If
            Set sRng = Rng.FindNext(sRng)
        Loop While Not sRng Is Nothing And sRng.Address <> MyAdd
        Rg0.Value = Replace(Rg0.Value, Cls.Value, Cls.Offset(, 1).Value)
        Set Rg0 = Nothing
    End If
Next Cls
End Sub
Bác sửa giúp em với ạ. em muốn từ cần thay thế là ở cột d ạ. đây là đoạn code của bác sau khi em chạy ạ
 

File đính kèm

  • LAY DU LIEU VBA.xlsm
    18.1 KB · Đọc: 6
Upvote 0
Thì bạn chép dữ liệu của cột 'D' thân thương của bạn sang cột 'G" & chạy macro xem có thỏa hay không?
 
Upvote 0
Thì bạn chép dữ liệu của cột 'D' thân thương của bạn sang cột 'G" & chạy macro xem có thỏa hay không?
Bác ơi. em không hiểu ý bác ạ. Thật sự em không biết chút gì về vba nên không biết tùy chỉnh như nào . Em xin nhờ bác lần nữa với ạ. Em xin được nói rõ hơn ví dụ như ô B8 có từ đào đất tài tại ô D8 sẽ là chữ Đ, ô B10 có từ bê tông thì ô D10 có từ B ạ
 
Lần chỉnh sửa cuối:
Upvote 0
Mình viết tiếng Việt mà, có gì mà không hiểu chứ:
(Cột 'D')(cột 'F')( Cột 'G')
Từ khóatừ cần thay
Đbê tôngB
Kđào đấtĐ
BXây móngXM
XMTrát tườngTT
TTXây tườngXT
HSơnK
XTLắp đặtK
KĐóng cọc treK
KĐắpH
 
Upvote 0
Mình viết tiếng Việt mà, có gì mà không hiểu chứ:
(Cột 'D')(cột 'F')( Cột 'G')
Từ khóatừ cần thay
Đbê tôngB
Kđào đấtĐ
BXây móngXM
XMTrát tườngTT
TTXây tườngXT
HSơnK
XTLắp đặtK
KĐóng cọc treK
KĐắpH
Dạ bác ơi. Ý của em là như này ạ. Khi ô b8 có từ đào đất mình sẽ tìm dữ li
Mình viết tiếng Việt mà, có gì mà không hiểu chứ:
(Cột 'D')(cột 'F')( Cột 'G')
Từ khóatừ cần thay
Đbê tôngB
Kđào đấtĐ
BXây móngXM
XMTrát tườngTT
TTXây tườngXT
HSơnK
XTLắp đặtK
KĐóng cọc treK
KĐắpH
Cột D là cột giá trị em cần điền..ví dụ như là trong ô b8 có từ " đào đất" thì mình sẽ tìm trong bảng ở cột f và cột g và lấy giá trị cần điền trong cột d8 là " Đ" ạ
 
Upvote 0
Trường hợp tìm thấy nhiều hơn 1 cụm từ thì điền cái gì bạn?
Công tác xây móng, xây bể phốt bằng gạch bê tông 2 lỗ rỗng D=28mm (220x105x60) M75, vữa xi măng mác 75
Công tác xây tường bằng gạch bê tông 2 lỗ rỗng D=28mm (220x105x60) M75, vữa xi măng mác 75
 
Upvote 0
Trường hợp tìm thấy nhiều hơn 1 cụm từ thì điền cái gì bạn?
Công tác xây móng, xây bể phốt bằng gạch bê tông 2 lỗ rỗng D=28mm (220x105x60) M75, vữa xi măng mác 75
Công tác xây tường bằng gạch bê tông 2 lỗ rỗng D=28mm (220x105x60) M75, vữa xi măng mác 75
dạ em có bổ sung thêm từ ạ để tránh trường hợp như bác vừa nêu. Em xin gửi lại file và nhờ bác xem giúp với ạ
 

File đính kèm

  • HT.xlsx
    10.6 KB · Đọc: 10
Upvote 0
dạ em có bổ sung thêm từ ạ để tránh trường hợp như bác vừa nêu. Em xin gửi lại file và nhờ bác xem giúp với ạ
Bạn thử hàm tự tạo này.
Mã:
Function TraCuu(ByVal sStr As String, ByVal aTable As Variant, ByVal lCol As Long) As Variant
Dim i As Long
aTable = aTable
TraCuu = ""
For i = 1 To UBound(aTable, 1)
    If InStr(1, sStr, aTable(i, 1), 1) Then
        TraCuu = aTable(i, lCol)
        Exit Function
    End If
Next
End Function
Công thức trên sheet:
Mã:
D8=TraCuu(B8,$F$8:$G$16,2)
 
Upvote 0
Bạn thử hàm tự tạo này.
Mã:
Function TraCuu(ByVal sStr As String, ByVal aTable As Variant, ByVal lCol As Long) As Variant
Dim i As Long
aTable = aTable
TraCuu = ""
For i = 1 To UBound(aTable, 1)
    If InStr(1, sStr, aTable(i, 1), 1) Then
        TraCuu = aTable(i, lCol)
        Exit Function
    End If
Next
End Function
Công thức trên sheet:
Mã:
D8=TraCuu(B8,$F$8:$G$16,2)
Chính xác luôn ạ. Em cảm ơn bác ạ. Công việc của em đỡ nhầm lần nhiều ạ
 
Upvote 0
Bạn thử hàm tự tạo này.
Mã:
Function TraCuu(ByVal sStr As String, ByVal aTable As Variant, ByVal lCol As Long) As Variant
Dim i As Long
aTable = aTable
TraCuu = ""
For i = 1 To UBound(aTable, 1)
    If InStr(1, sStr, aTable(i, 1), 1) Then
        TraCuu = aTable(i, lCol)
        Exit Function
    End If
Next
End Function
Công thức trên sheet:
Mã:
D8=TraCuu(B8,$F$8:$G$16,2)
Dạ bác ơi. Có cách nào để đó là đoạn code dạng sub để mình gán nút button không ạ.
 
Upvote 0
Function linh động hơn nhiều sao phải dùng Sub? Trường hợp dùng Function cho từng ô đơn lẻ ảnh hưởng đến tốc độ mới phải dùng Sub thôi.
 
Upvote 0
Function linh động hơn nhiều sao phải dùng Sub? Trường hợp dùng Function cho từng ô đơn lẻ ảnh hưởng đến tốc độ mới phải dùng Sub thôi.
Dạ tại dữ liệu có nhiều dòng nên giả sử có từ d8 đến d1000 em phải kéo công thức. Em muốn để dạng sub gắn vào button để gọi luôn ra cùng các sub khác ạ
 
Upvote 0
.
Mã:
Function TraCuu(ByVal aStr As Variant, ByVal aTable As Variant, ByVal lCol As Long) As Variant
Dim i As Long, s As Long
For s = 1 To UBound(aStr, 1)
    For i = 1 To UBound(aTable, 1)
        If InStr(1, aStr(s, 1), aTable(i, 1), 1) Then
            aStr(s, 1) = aTable(i, lCol)
            GoTo NextStr
        End If
    Next
    aStr(s, 1) = ""
NextStr:
Next
TraCuu = aStr
End Function
Sub ABC()
With Range("B8:B" & Cells(&H100000, 2).End(xlUp).Row)
    .Offset(, 2).Value = TraCuu(.Value, Range("F8:G" & Cells(&H100000, 6).End(xlUp).Row).Value, 2)
End With
End Sub
 
Upvote 0
.
Mã:
Function TraCuu(ByVal aStr As Variant, ByVal aTable As Variant, ByVal lCol As Long) As Variant
Dim i As Long, s As Long
For s = 1 To UBound(aStr, 1)
    For i = 1 To UBound(aTable, 1)
        If InStr(1, aStr(s, 1), aTable(i, 1), 1) Then
            aStr(s, 1) = aTable(i, lCol)
            GoTo NextStr
        End If
    Next
    aStr(s, 1) = ""
NextStr:
Next
TraCuu = aStr
End Function
Sub ABC()
With Range("B8:B" & Cells(&H100000, 2).End(xlUp).Row)
    .Offset(, 2).Value = TraCuu(.Value, Range("F8:G" & Cells(&H100000, 6).End(xlUp).Row).Value, 2)
End With
End Sub
Khi vị trí bảng từ khóa và vị trí cần điền từ thay thế thay đổi thì code trên sửa lại như nào ạ. ( do hôm trước em không để ý được trường hợp phải thêm cột ra ạ)
 

File đính kèm

  • HT.xlsx
    10.7 KB · Đọc: 1
Upvote 0
Web KT

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

Back
Top Bottom