Microsoft ExcelでVBA経由リバース内のテキスト&ナンバーを取得する方法
Excelでは、テキストを完全に逆にしたり、VBAコードで順序を逆にしたりする場合があります。逆セルコンテンツの抽出、逆セル順序など、さまざまな要件があります。
この記事では、次のことを学びます。
-
逆セルコンテンツを取得するにはどうすればよいですか?
-
セルからすべての単語を逆の順序で取得するにはどうすればよいですか?
-
列の順序を逆にする方法は?
-
テキストからのみ逆数を取得するにはどうすればよいですか?
-
アクティブセルのセルコンテンツを逆にする方法は?
逆セルコンテンツを取得する方法は?
Excelでは、セル内のテキストまたは数字を逆にする必要があります。 「english」から「hsilgne」以下は、出力前のデータのスナップショットです。
以下は、列Bのrequire出力のスナップショットです。
上記の出力を取得するには、以下の手順に従ってVBエディターを起動する必要があります。[開発者]タブをクリックします。[コード]グループから、[VisualBasic]を選択します
-
以下のコードを標準モジュールにコピーします
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
===
セルB1では、数式は= CompleteReverse(A1、TRUE)
になります。
セルからすべての単語を逆の順序で取得するにはどうすればよいですか?
解決策を見つけるためのコードがいくつかあります。すべての単語を完全に逆の順序で取得するには、次のコードをコピーしてモジュールに貼り付けます
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
セルC1では、数式は= ReverseOrder1(A1)
になります。 2番目のVBAコードを見てみましょう:
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
セルD1では、数式は= ReverseOrder2(A1)
になります。
列の順序を逆にする方法は?
列データの順序を逆にする必要がある場合は、以下のコードを詳しく調べる必要があります。
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
上記のコードは、シート1の列Aのデータをチェックしてから、シート2の順序を逆にします。下の画像を参照してください
===
テキストからのみ逆数を取得するにはどうすればよいですか?
例:「excel(123)tip」はセルの内容です出力が必要です:「excel(321)tip」
Excelでは、同じ出力を取得する方法が複数あり、VBAUDFを使用してソリューションを見つける方法も同じです。この例では、5つの異なる方法を示します。
次のコードをコピーして標準モジュールに貼り付けます:
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
セルB2では、数式は= ReverseNumber1(A2)
になります。他の4つのコードは、次の式でテストできます。
{空} 1。 = ReverseNumber2(A2)
{空} 2。 = ReverseNumber3(A2)
{空} 3。 = ReverseNumber4(A2)
{空} 4。 = ReverseNumber5(A2)
上記の5つのマクロコードはすべて同じ出力を提供します。しかしながら;彼らが最も快適なコードを採用することができます。
アクティブセルのセルコンテンツを逆にする方法は?
マクロをactivecellでのみ実行してから、コンテンツを逆にする場合。このコードは、数式を含むセルでは実行されません。
次のコードを使用します:
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
カーソルが「exceltip」を含むセルA1にある場合、上記のマクロはそれを「pitlecxe」に変換します。
結論:MicrosoftExcelの単一のソリューションに対して同じ数のUDFを持つことができます。このUDFは2003バージョンから2013まで動作します。
私たちのブログが気に入ったら、Facebookで友達と共有してください。また、TwitterやFacebookでフォローすることもできます。
皆様からのご意見をお待ちしております。私たちの仕事を改善、補完、革新し、より良いものにする方法をお知らせください。 [email protected]_までご連絡ください