ビルには、文字のすべてのインスタンスをアルファベットの文字の位置を表す数字に置き換える必要があるテキストの列があります。したがって、たとえば、セルに「T10A22」が含まれている場合、ビルは「2010122」などの文字を置き換える必要があります。ここで、Tは20に置き換えられ、Aは1に置き換えられます。任意のセル。

これを(単一のワークシートで)1回だけ実行する必要がある場合は、列を選択して[検索と置換]を使用するだけで十分な場合があります。 Aを検索して1に置き換えることができ、Bを検索して2に置き換えることができます。実行する反復は26回だけで、面倒に聞こえるかもしれませんが、変更を行うためのマクロを作成するよりも短い時間で実行できます。

そうは言っても、このタスクを定期的に実行する必要がある場合は、マクロが最善の解決策です。次のように、マクロを使用して検索と置換のアプローチを実装できます。

Sub ReplaceLetters1()

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _       SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _       ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     Selection.Replace What:="B", Replacement:="2"

Selection.Replace What:="C", Replacement:="3"

Selection.Replace What:="D", Replacement:="4"

Selection.Replace What:="E", Replacement:="5"

Selection.Replace What:="F", Replacement:="6"

Selection.Replace What:="G", Replacement:="7"

Selection.Replace What:="H", Replacement:="8"

Selection.Replace What:="I", Replacement:="9"

Selection.Replace What:="J", Replacement:="10"

Selection.Replace What:="K", Replacement:="11"

Selection.Replace What:="L", Replacement:="12"

Selection.Replace What:="M", Replacement:="13"

Selection.Replace What:="N", Replacement:="14"

Selection.Replace What:="O", Replacement:="15"

Selection.Replace What:="P", Replacement:="16"

Selection.Replace What:="Q", Replacement:="17"

Selection.Replace What:="R", Replacement:="18"

Selection.Replace What:="S", Replacement:="19"

Selection.Replace What:="T", Replacement:="20"

Selection.Replace What:="U", Replacement:="21"

Selection.Replace What:="V", Replacement:="22"

Selection.Replace What:="W", Replacement:="23"

Selection.Replace What:="X", Replacement:="24"

Selection.Replace What:="Y", Replacement:="25"

Selection.Replace What:="Z", Replacement:="26"

End Sub

マクロを使用するには、処理するセルを選択して実行するだけです。次のように、For …​ Nextループに依存する別のアプローチを使用することもできます。

Sub ReplaceLetters2()

Dim J As Integer

Selection.Replace What:="A", Replacement:="1", LookAt:=xlPart, _         SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _         ReplaceFormat:=False, FormulaVersion:=xlReplaceFormula2     For J = 66 To 90         Selection.Replace What:=Chr(J), Replacement:=J - 64     Next J End Sub

最初の.Replace操作はFor …​ Nextループ内に配置できますが、(少なくとも私には)ループがより単純に見えるように、それを分離しておくことを選択しました。これは何よりも文体的な選択です。

何らかの理由で.Replaceメソッドを使用したくない場合は、評価対象の各文字を調べるという昔ながらのアプローチを使用できます。これは、このユーザー定義関数で使用されるアプローチです:

Function LetterToNum(c As Range) As String     Dim sRaw As String     Dim J As Integer

sRaw = UCase(c)

For J = 1 To 26         sRaw = Replace(sRaw, Chr(J + 64), J)

Next J     LetterToNum = sRaw End Function

この関数を使用するには、ワークシートに次のように入力します。ここで、A1は変換するセルです。

=LetterToNum(A1)

マクロを使用したくない場合は、かなり長い数式を使用してセルの変換を行うことができます。

=TEXTJOIN("",FALSE, IF(ISNUMBER(VALUE(MID(A1,SEQUENCE(1,LEN(A1)),1))), MID(A1,SEQUENCE(1,LEN(A1)),1), COLUMN(INDIRECT(MID(A1,SEQUENCE(1,LEN(A1)),1) & ":" & MID(A1,SEQUENCE(1,LEN(A1)),1)))))

この数式は、変換するテキストがセルA1にあることを前提としています。基本的に、テキスト文字列の各文字を調べて、それが数字であるかどうかを判断します。そうである場合は、元の文字を使用します。そうでない場合は、INDIRECT関数を使用して文字に基づいて列を判別し、COLUMNを使用してその列の数値を返します。次に、これはすべてTEXTJOIN関数を使用して再結合されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

link:/ excelribbon-ExcelTipsMacros [ここをクリックして、新しいブラウザタブでその特別なページを開きます]

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(7820)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice365のExcelに適用されます。