Trong excel, có những lúc chúng ta muốn văn bản bị đảo ngược hoàn toàn hoặc thứ tự của chúng bằng mã VBA. Có thể có nhiều yêu cầu khác nhau, như trích xuất nội dung ô đảo ngược, đảo ngược thứ tự ô, v.v.

Trong bài này chúng ta cùng tìm hiểu các nội dung sau:

  • Làm thế nào để lấy nội dung ô ngược?

  • Làm thế nào để lấy tất cả các từ theo thứ tự ngược lại từ một ô?

  • Làm thế nào để đảo ngược thứ tự cột?

  • Làm thế nào để nhận được số đảo ngược chỉ từ văn bản?

  • Làm thế nào để đảo ngược nội dung ô của activecell?

Làm thế nào để lấy nội dung ô ngược?

Trong Excel có yêu cầu đảo ngược văn bản hoặc số trong ô, ví dụ: “English” thành “hsilgne” Sau đây là ảnh chụp dữ liệu trước khi xuất:

img1

Sau đây là ảnh chụp nhanh yêu cầu đầu ra trong cột B:

img2

Để có kết quả trên, chúng ta cần làm theo các bước sau để khởi chạy trình soạn thảo VB. Nhấp vào tab Developer Từ nhóm Code, chọn Visual Basic

img3

  • Sao chép đoạn mã dưới đây trong mô-đun chuẩn

Function CompleteReverse(rCell As Range, Optional IsText As Boolean)

Dim i As Integer

Dim StrNewTxt As String

Dim strOld As String

strOld = Trim(rCell)

For i = 1 To Len(strOld)

StrNewTxt = Mid(strOld, i, 1) & StrNewTxt

Next i

If IsText = False Then

CompleteReverse = CLng(StrNewTxt)

Else

CompleteReverse = StrNewTxt

End If

End Function

img4

===

Trong ô B1, công thức sẽ là = CompleteReverse (A1, TRUE)

img5

Làm thế nào để lấy tất cả các từ theo thứ tự ngược lại từ một ô?

Chúng tôi sẽ có một vài mã để tìm ra giải pháp. Để có được tất cả các từ theo thứ tự ngược hoàn toàn, chúng tôi sẽ sao chép và dán đoạn mã sau vào mô-đun

Function ReverseOrder1(Rng As Range)

Dim Val As Variant, Counter As Integer, R() As Variant

Val = Split(Application.WorksheetFunction.Substitute(Rng.Value, " ", ""), ",")

ReDim R(LBound(Val) To UBound(Val))

For Counter = LBound(Val) To UBound(Val)

R(UBound(Val) - Counter) = Val(Counter)

Next Counter

ReverseOrder1 = Join(R, ", ")

End Function

img6

Trong ô C1, công thức sẽ là = ReverseOrder1 (A1)

img7

Hãy xem mã VBA thứ hai:

Function ReverseOrder2(Rng As Range) As String

Dim Counter As Long, R() As String, temp As String

R = Split(Replace(Rng.Value2, " ", ""), ",")

For Counter = LBound(R) To (UBound(R) - 1) \ 2

temp = R(UBound(R) - Counter)

R(UBound(R) - Counter) = R(Counter)

R(Counter) = temp

Next Counter

ReverseOrder2 = Join(R, ", ")

End Function

img8

Trong ô D1, công thức sẽ là = ReverseOrder2 (A1)

img9

Làm thế nào để đảo ngược thứ tự cột?

Trong trường hợp bạn có yêu cầu đảo ngược thứ tự của dữ liệu cột thì bạn nên xem kỹ đoạn mã dưới đây:

Sub ReverseColumnOrder()

Dim wBase As Worksheet, wResult As Worksheet, i As Long, x As Long

Set wBase = Sheets("Sheet1")

Set wResult = Sheets("Sheet2")

Application.ScreenUpdating = False

With wBase

For i = .Range("A1").CurrentRegion.Rows.Count To 1 Step -1

x = x + 1

.Range("A1").CurrentRegion.Rows(i).Copy wResult.Range("A" & x)

Next i

End With

Application.ScreenUpdating = True

End Sub

img10

Đoạn mã trên sẽ kiểm tra dữ liệu ở cột A trong sheet1 và sau đó đảo ngược thứ tự trong sheet 2. Tham khảo hình ảnh dưới đây

Img11

Img12

===

Làm thế nào để nhận số đảo ngược chỉ từ văn bản?

Ví dụ: “mẹo excel (123)” là nội dung ô Yêu cầu đầu ra: “mẹo excel (321)”

Img13

Trong excel, có thể có nhiều cách để có được kết quả giống nhau và tìm giải pháp với VBA UDF’s cũng vậy. Đối với ví dụ này, chúng tôi sẽ chỉ ra 5 cách khác nhau.

Sao chép và dán các mã sau vào mô-đun chuẩn:

Function ReverseNumber1(v As Variant) As String

Dim iSt As Integer, iEnd As Integer, sNum As String, sTemp As String

iSt = InStr(v, "(")

iEnd = InStr(v, ")")

If iSt = 0 Or iEnd = 0 Then ReverseNumber1 = v: Exit Function

sNum = Mid(v, iSt + 1, iEnd - iSt - 1)



For i = Len(sNum) To 1 Step -1

sTemp = sTemp & Mid(sNum, i, 1)

Next i

ReverseNumber1 = Left(v, iSt) & sTemp & Mid(v, iEnd, 5 ^ 5)

End Function

Function ReverseNumber2(s As String) As String

Dim i&, t$, ln&

t = s: ln = InStr(s, ")") - 1

For i = InStr(s, "(") + 1 To InStr(s, ")") - 1

Mid(t, i, 1) = Mid(s, ln, 1)

ln = ln - 1

Next

ReverseNumber2 = t

End Function

Function ReverseNumber3(c00)

c01 = Split(Split(c00, ")")(0), "(")(1)

ReverseNumber3 = Replace(c00, "(" & c01 & ")", "(" & StrReverse(c01) & ")")

End Function

Function ReverseNumber4(c00)

ReverseNumber4 = Left(c00, InStr(c00, "(")) & StrReverse(Mid(Left(c00, _

InStr(c00, ")") - 1), InStr(c00, "(") + 1)) & Mid(c00, InStr(c00, ")"))

End Function

Function ReverseNumber5(s As String)

Dim m As Object

With CreateObject("VBScript.Regexp")

.Global = True

.Pattern = "(\D)(\d)"

For Each m In .Execute(s)

ReverseNumber5 = ReverseNumber5 & m.submatches(0) & StrReverse(m.submatches(1))

Next

End With

Set m = Nothing

End Function

Img14

Img15

Trong ô B2, công thức sẽ là = ReverseNumber1 (A2)

Img16

Chúng ta có thể kiểm tra 4 mã còn lại bằng công thức sau:

{trống} 1. = ReverseNumber2 (A2)

{trống} 2. = ReverseNumber3 (A2)

{trống} 3. = ReverseNumber4 (A2)

{trống} 4. = ReverseNumber5 (A2)

Tất cả 5 mã macro trên sẽ cung cấp cùng một đầu ra; Tuy nhiên; người ta có thể áp dụng mã mà họ cảm thấy thoải mái nhất.

Làm thế nào để đảo ngược nội dung ô của activecell?

Trong trường hợp bạn muốn macro chỉ chạy trên activecell & sau đó đảo ngược nội dung. Mã này sẽ không chạy trên ô có chứa công thức.

Chúng tôi sẽ sử dụng đoạn mã sau:

Sub Reverse_Cell_Contents()

'this macro will run only on activecell' --- Comment

If Not ActiveCell.HasFormula Then

sRaw = ActiveCell.Text

sNew = ""

For j = 1 To Len(sRaw)

sNew = Mid(sRaw, j, 1) + sNew

Next j

ActiveCell.Value = sNew

End If

End Sub

Img17

Nếu con trỏ nằm trên ô A1, có chứa “exceltip”, thì macro ở trên sẽ chuyển nó thành “pitlecxe”.

Kết luận: Chúng ta có thể có bao nhiêu UDF cho một giải pháp duy nhất trong Microsoft Excel. UDF này sẽ hoạt động từ phiên bản 2003 đến 2013.

image 29

Nếu bạn thích blog của chúng tôi, hãy chia sẻ nó với bạn bè của bạn trên Facebook. Và bạn cũng có thể theo dõi chúng tôi trên Twitter và Facebook.

Chúng tôi rất muốn nghe ý kiến ​​của bạn, hãy cho chúng tôi biết cách chúng tôi có thể cải thiện, bổ sung hoặc đổi mới công việc của mình và làm cho nó tốt hơn cho bạn. Viết thư cho chúng tôi theo địa chỉ [email protected]