Thay thế(Replace) nhiều từ thành một từ. . .

Liên hệ QC

zPeterPan

Thành viên hoạt động
Tham gia
27/2/21
Bài viết
154
Được thích
10
Em chào các anh chị em. Mọi người cho em hỏi về cách thay thế( Replace) với ạ. . .
ví dụ là:
QW hoặc WQ đổi thành QWxWQ
ER hoặc RE đổi thành ERxRE
TY hoặc YT đổi thành TYxYT
UI hoặc IU đổi thành UIxIU
trong mảng dữ liệu khoảng từ A3:AZ10000
Em có dùng theo cách record macro nhưng khi chạy thì ra kết quả kiểu như này ạ QWxQWxWQ, ERxERxRE,QQxQQxYY .
Nhờ mọi người giúp em code này với ạ. . .
File này là ví dụ thôi ạ
 

File đính kèm

  • ThayThe.xlsm
    10.9 KB · Đọc: 15
Lần chỉnh sửa cuối:
Them điều kiện loại ô rổng
Mã:
Sub ABC()
  Dim sArr(), Res(), i&, j&, k&, sRow&, sCol&, str$, str2$

  str = "QQxYY,WWxUU,EExII,RRxOO,TTxPP"
  str2 = "EWQ"
  With Sheets("Sheet1")
    sArr = .Range("A3:E18").Value
    sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
    ReDim Res(1 To sRow, 1 To sCol)
    For i = 1 To sRow
      For j = 1 To sCol
        tmp = sArr(i, j)
        If tmp <> Empty Then
          k = InStr(str, tmp)
          If k Then
            Res(i, j) = Mid(str, Int(k / 6) * 6 + 1, 5)
          Else
            If InStr(1, str2, Mid(tmp, 2, 1)) > InStr(1, str2, Mid(tmp, 1, 1)) Then
              tmp = StrReverse(tmp)
            End If
            Res(i, j) = tmp & "x" & StrReverse(tmp)
          End If
        End If
      Next
    Next
    .Range("G3").Resize(sRow, sCol) = Res
  End With
End Sub
Đoạn này có nghĩa là gì vậy ạ: " Mid(str, Int(k / 6) * 6 + 1, 5)"
Bài đã được tự động gộp:

 
Lần chỉnh sửa cuối:
Upvote 0
Đoạn này có nghĩa là gì vậy ạ: " Mid(str, Int(k / 6) * 6 + 1, 5)"
Bài đã được tự động gộp:
str = "QQxYY,WWxUU,EExII,RRxOO,TTxPP"
Tính cả dấu "," mỗi kết quả có 6 ký tự
Int(k / 6) * 6 + 1: là thứ tự của kết quả cần lấy trong chuổi str
Res(i, j) = Mid(str, Int(k / 6) * 6 + 1, 5) là kết quả thay thế
 
Upvote 0
str = "QQxYY,WWxUU,EExII,RRxOO,TTxPP"
Tính cả dấu "," mỗi kết quả có 6 ký tự
Int(k / 6) * 6 + 1: là thứ tự của kết quả cần lấy trong chuổi str
Res(i, j) = Mid(str, Int(k / 6) * 6 + 1, 5) là kết quả thay thế
Vâng ạ. . . em cảm ơn anh nhiều ạ. . .
anh cho em hỏi chút tại sao em dùng Remove Duplicates nhưng không lọc trùng được hết cả mảng được ạ. . .

456.JPG
 
Upvote 0
Upvote 0
Chỉ là một quy luật chung (XY thành XYxYZ) và một cái bảng tra các trường hợp ngoại lệ (TE > ETxTE, UU > WWxUU, ...) nhưng thớt lười lập cái bảng tra cbo nên đến 20 bài mới xong.
Bi giờ "thêm chút" nữa. Để xem bao nhiêu bài.
 
Upvote 0
Nếu mảng gồm nhiều cột, Remove Duplicates loại trùng giá trị cho cả dòng
Bảng Data, Dòng 3 và 5 không trùng vì chỉ cần có E3<>E5
ý của em là lọc trùng cho bảng Kết quả Data cơ ạ
Bài đã được tự động gộp:

Chỉ là một quy luật chung (XY thành XYxYZ) và một cái bảng tra các trường hợp ngoại lệ (TE > ETxTE, UU > WWxUU, ...) nhưng thớt lười lập cái bảng tra cbo nên đến 20 bài mới xong.
Bi giờ "thêm chút" nữa. Để xem bao nhiêu bài.
Do em trình bày sơ sài nên mọi người không rõ nội dung nên nhiều bài ạ. . .
 
Upvote 0
Chạy code
Mã:
Sub ABC()
  Dim sArr(), Res(), i&, j&, k&, sRow&, sCol&, str$, str2$

  str = "QQxYY,WWxUU,EExII,RRxOO,TTxPP"
  str2 = "EWQ"
  With Sheets("Sheet1")
    sArr = .Range("A3:E18").Value
    sRow = UBound(sArr, 1): sCol = UBound(sArr, 2)
    ReDim Res(1 To sRow, 1 To sCol)
    For i = 1 To sRow
      For j = 1 To sCol
        tmp = sArr(i, j)
        k = InStr(str, tmp)
        If k Then
          Res(i, j) = Mid(str, Int(k / 6) * 6 + 1, 5)
        Else
          If InStr(1, str2, Mid(tmp, 2, 1)) > InStr(1, str2, Mid(tmp, 1, 1)) Then
            tmp = StrReverse(tmp)
          End If
          Res(i, j) = tmp & "x" & StrReverse(tmp)
        End If
      Next
    Next
    .Range("G3").Resize(sRow, sCol) = Res
  End With
End Sub
Không biết có kiểu "OR", "OT"... không, nếu có thì code chưa đúng ý thì phải bác ạ
 
Upvote 0
Không biết có kiểu "OR", "OT"... không, nếu có thì code chưa đúng ý thì phải bác ạ
có kiểu đó chứ ạ, ký tự gồm có 10 ký tự ( POIUYTREWQ) kết hợp với nhau thành 2 ký tự. . . code của bác chạy đúng hướng. . . và phải thêm dữ liệu cho (str= ) thì kết quả đúng ý tưởng luôn ạ. . .
 
Upvote 0
có kiểu đó chứ ạ, ký tự gồm có 10 ký tự ( POIUYTREWQ) kết hợp với nhau thành 2 ký tự. . . code của bác chạy đúng hướng. . . và phải thêm dữ liệu cho (str= ) thì kết quả đúng ý tưởng luôn ạ. . .
Vậy thì code bác ấy str2 bạn sửa thành chuỗi "POIUYTREWQ" là được (đoán vậy :D )
 
Upvote 0
Mình thử nhiều lần, nếu trùng sẽ xóa nguyên dòng
56788.JPG

Sub RemoveDuplicates() With Sheet1 Range("M3:M11").Select ActiveSheet.Range("$M$3:$M$11").RemoveDuplicates Columns:=1, Header:=xlNo Range("N3:N11").Select ActiveSheet.Range("$N$3:$N$11").RemoveDuplicates Columns:=1, Header:=xlNo Range("O3:O10").Select ActiveSheet.Range("$O$3:$O$10").RemoveDuplicates Columns:=1, Header:=xlNo Range("P3:P11").Select ActiveSheet.Range("$P$3:$P$11").RemoveDuplicates Columns:=1, Header:=xlNo Range("Q3:Q9").Select ActiveSheet.Range("$Q$3:$Q$9").RemoveDuplicates Columns:=1, Header:=xlNo End With End Sub
nếu như khoảng 1000 cột thì sao ạ
 
Upvote 0
View attachment 254913

Sub RemoveDuplicates() With Sheet1 Range("M3:M11").Select ActiveSheet.Range("$M$3:$M$11").RemoveDuplicates Columns:=1, Header:=xlNo Range("N3:N11").Select ActiveSheet.Range("$N$3:$N$11").RemoveDuplicates Columns:=1, Header:=xlNo Range("O3:O10").Select ActiveSheet.Range("$O$3:$O$10").RemoveDuplicates Columns:=1, Header:=xlNo Range("P3:P11").Select ActiveSheet.Range("$P$3:$P$11").RemoveDuplicates Columns:=1, Header:=xlNo Range("Q3:Q9").Select ActiveSheet.Range("$Q$3:$Q$9").RemoveDuplicates Columns:=1, Header:=xlNo End With End Sub
nếu như khoảng 1000 cột thì sao ạ
Bạn lập thớt mới, với dữ liệu và yêu cầu xử lý, thêm bảng kết quả. Nói rỏ có loại trùng dữ liệu khác cột không
 
Upvote 0
Web KT

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

Back
Top Bottom