Tạo AddIn: Dựa vào 1 bảng Mã cho trước để tìm chuỗi và thay thế = chuỗi khác!

Liên hệ QC

Hong.Van

Busy
Tham gia
7/5/12
Bài viết
2,330
Được thích
1,767
Em chào Thầy cô & anh chị!
Giúp em tạo AddIn như sau:
Bên Sheet MA, em có danh sách Mặt hàngNhóm
Bên Sheet PC có các diễn giải
VD1: Chi mua Đá 0x4 của Cty Long Thạnh

Đá 0x4 này có tên trong Mặt hàng và nó thuộc nhóm VLXD
Như vậy nó sẽ thay Đá 0x4 thành VLXD
Sau khi chạy Addin nó có kết qủa "Chi mua VLXD của Cty Long Thạnh"
Trong File em có thêm một số VDụ
Em cảm ơn!
 

File đính kèm

Em chào Thầy cô & anh chị!
Giúp em tạo AddIn như sau:
Bên Sheet MA, em có danh sách Mặt hàngNhóm
Bên Sheet PC có các diễn giải
VD1: Chi mua Đá 0x4 của Cty Long Thạnh

Đá 0x4 này có tên trong Mặt hàng và nó thuộc nhóm VLXD
Như vậy nó sẽ thay Đá 0x4 thành VLXD
Sau khi chạy Addin nó có kết qủa "Chi mua VLXD của Cty Long Thạnh"
Trong File em có thêm một số VDụ
Em cảm ơn!
Cái này chỉ là For Next và Replace bình thường, tôi không nghĩ bạn lại không tự làm được
 
Giống bài số 4 ở đây (bạn đã từng hỏi)
http://www.giaiphapexcel.com/forum/showthread.php?76285-Gi%C3%BAp-code-D%E1%BB%B1a-v%C3%A0o-b%E1%BA%A3ng-tra-%C4%91%E1%BB%83-vi%E1%BA%BFt-t%E1%BA%AFt-T%C3%AAn%21&p=468728#post468728
Có điều người ta dùng hàm Replace, bạn nên dùng phương thức Replace sẽ hay hơn (giống Ctrl + H ấy)
Hì em đọc mấy bài đó còn điếc con rái nói chi áp dụng!
Em cảm ơn!
 
Bạn tham khảo cái này (dùng hàm bình thường không có VBscript.RegExp) - Chắc sẽ dễ hiểu cho bạn
Mã:
Function ThayThe(Str As Range, Arr, Col As Integer)
Dim i As Integer, TmpArr
TmpArr = Arr
For i = 1 To UBound(TmpArr)
    If InStr(1, Str, TmpArr(i, 1)) Then
        ThayThe = Replace(Str, TmpArr(i, 1), TmpArr(i, Col))
        Exit For
    End If
Next
End Function

=thaythe(C9,MA!$B$12:$F$48,5)
 
Hi, em mày mò thì ra cái này, thấy cũng chạy được kg biết đúng kg?
Mã:
Sub Replace()
    Dim i As Long, Clls As Range
    Application.ScreenUpdating = False


    For Each Clls In Sheets("MA").[B12].CurrentRegion.Resize(, 5)


        Range("c9").Replace Clls, Clls.Offset(, 4), xlPart


    Next Clls


    Application.ScreenUpdating = True
End Sub
 
Hì em đọc mấy bài đó còn điếc con rái nói chi áp dụng!
Em cảm ơn!
Thôi thì thử hàm này xem, hên xui.
PHP:
Public Function HenXui(Rng As Range, SRng As Range, N As Long) As String
Dim Arr(), I As Long, Tem As String
Arr = SRng.Value: Tem = Rng.Value
For I = UBound(Arr, 1) To 1 Step -1
    If Tem Like "*" & Arr(I, 1) & "*" Then
        HenXui = Replace(Tem, Arr(I, 1), Arr(I, N))
        Exit For
    End If
Next I
End Function
 

File đính kèm

Hi, em mày mò thì ra cái này, thấy cũng chạy được kg biết đúng kg?
Mã:
Sub Replace()
    Dim i As Long, Clls As Range
    Application.ScreenUpdating = False


    For Each Clls In Sheets("MA").[B12].CurrentRegion.Resize(, 5)


        Range("c9").Replace Clls, Clls.Offset(, 4), xlPart


    Next Clls


    Application.ScreenUpdating = True
End Sub
Chính xác đến 99% rồi, nhưng...
Sheets("MA").[B12].CurrentRegion.Resize(, 5) chính là vùng A1:F48 của sheet MA ---> Sao lại duyệt toàn bộ vùng này? Lý ra chỉ duyệt trong cột B và thay thế bằng cột F thôi chứ
Range("c9").Replace ---> Sao lại C9 mà không là C:C, thay toàn bộ luôn?
Ví dụ:
Mã:
Sub Replace()
  Dim Clls As Range
  Application.ScreenUpdating = False
  For Each Clls In Sheets("MA").[COLOR=#ff0000]Range("B12:B50")[/COLOR]
    Sheets("PC").[COLOR=#ff0000]Range("C:C")[/COLOR].Replace Clls.Value, Clls.Offset(, 4).Value, xlPart
  Next Clls
  Application.ScreenUpdating = True
End Sub
Vậy không được sao?
Dám cá bài này dùng Function (như các code ở trên) chẳng ngon lành gì so với cách bạn đang làm đâu (dùng phương thức Replace)
Ẹc... Ẹc...
 
Hi, em mày mò thì ra cái này, thấy cũng chạy được kg biết đúng kg?
Mã:
Sub Replace()
    Dim i As Long, Clls As Range
    Application.ScreenUpdating = False
    For Each Clls In Sheets("MA").[B12].CurrentRegion.Resize(, 5)
        Range("c9").Replace Clls, Clls.Offset(, 4), xlPart
    Next Clls
    Application.ScreenUpdating = True
End Sub
HongVan viết cũng đã gần 1200 bài rồi nha, vậy mà giờ vẫn tà tà xử lý trên sheet là sao. Kiểu này chắc phải phạt 1 chầu gì đó cho sợ. Tập thói quen nghĩ đến mảng trong mọi trường hợp.
Nếu phải xử lý trên sheet thì chơi kiểu của anh NDU là hợp lý nhất.
 
Lần chỉnh sửa cuối:
Thôi thì thử hàm này xem, hên xui.
PHP:
Public Function HenXui(Rng As Range, SRng As Range, N As Long) As String
Dim Arr(), I As Long, Tem As String
Arr = SRng.Value: Tem = Rng.Value
For I = UBound(Arr, 1) To 1 Step -1
    If Tem Like "*" & Arr(I, 1) & "*" Then
        HenXui = Replace(Tem, Arr(I, 1), Arr(I, N))
        Exit For
    End If
Next I
End Function
Bài của Thầy & anh dhn46, nếu không có mã tồn tại thì nó trả về không!
VD: Chi trả tiền điện thoại -> thì nó trả về 0 hay trống!!!
Vậy có cách nào khắc phục không ạ!
Em cảm ơn!
 
Bài của Thầy & anh dhn46, nếu không có mã tồn tại thì nó trả về không!
VD: Chi trả tiền điện thoại -> thì nó trả về 0 hay trống!!!
Vậy có cách nào khắc phục không ạ!
Em cảm ơn!
Thêm cái Else vào Henxui =Rng là ok liền
 
Bài của Thầy & anh dhn46, nếu không có mã tồn tại thì nó trả về không!
VD: Chi trả tiền điện thoại -> thì nó trả về 0 hay trống!!!
Vậy có cách nào khắc phục không ạ!
Em cảm ơn!
Thì bạn thêm điều kiện cho If là được mà
Mã:
Function ThayThe(Str As Range, Arr, Col As Integer)
Dim i As Integer, TmpArr
TmpArr = Arr
For i = 1 To UBound(TmpArr)
    If InStr(1, Str, TmpArr(i, 1)) Then
        ThayThe = Replace(Str, TmpArr(i, 1), TmpArr(i, Col))
        Exit For
    Else
        ThayThe = Str
    End If
Next
End Function
 
Web KT

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

Back
Top Bottom