スコットは、Excelで特定のセルのすべての文字の間にダッシュを自動的に追加する方法を考えています。例として、セルA1に「家」が含まれている場合、スコットはそれを「h-o-u-s-e」に変換したいと考えています。

これは数式で行うことができますが、すぐに扱いにくくなります。たとえば、次の数式を使用して、セルA1に入力した文字の間にダッシュを入れることができます。

=CHOOSE(LEN(A1),A1,LEFT(A1,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & MID(A1,3,1) & "-"

& RIGHT(A1,1),LEFT(A1,1) & "-" & MID(A1,2,1) & "-"

& MID(A1,3,1) & "-" & MID(A1,4,1) & "-" & RIGHT(A1,1), LEFT(A1,1) & "-" & MID(A1,2,1) & "-" & MID(A1,3,1)

& "-" & MID(A1,4,1) & "-" & MID(A1,5,1) & "-" & RIGHT(A1,1))

数式のこの特定の例は、最大6文字のテキストでのみ機能します。したがって、「家」では適切に機能しますが、「世帯」では機能しません。式は長くなる可能性がありますが、繰り返しになりますが、すぐに非常に長くなります。

より良いアプローチは、マクロを使用して変換を行うことです。ダッシュをセルに直接挿入する場合は、次のようなマクロを使用できます。

Sub AddDashes1()

Dim Cell As Range     Dim sTemp As String     Dim C As Integer

For Each Cell In Selection         sTemp = ""

For C = 1 To Len(Cell)

sTemp = sTemp + Mid(Cell, C, 1) + "-"

Next         Cell.Value = Left(sTemp, Len(sTemp) - 1)

Next End Sub

このマクロは、選択した範囲のセルで使用するように設計されています。変換するセルを選択して、マクロを実行するだけです。ダッシュはセル内の各文字の間に追加されます。

元のセル値を変更したくない場合は、次のジョブを実行するユーザー定義関数を作成できます。

Function AddDashes2(Src As String) As String     Dim sTemp As String     Dim C As Integer

Application.Volatile     sTemp = ""

For C = 1 To Len(Src)

sTemp = sTemp + Mid(Src, C, 1) + "-"

Next     AddDashes2 = Left(sTemp, Len(sTemp) - 1)

End Function

この関数を使用するには、ワークシートで次を使用します。

=AddDashes2(A1)

関数がもう少し堅牢であることを確認したい場合は、複数の単語を処理するように関数を変更できます。このような場合、スペースを「ダッシュ可能な文字」として扱わないようにする必要があります。たとえば、ルーチンで「one two」にダッシュを追加して、「o-n-e—​t-w-o」ではなく「o-n-et-w-o」として出力されるようにします。関数の次のバリエーションでうまくいきます:

Function AddDashes3(Src As String) As String     Dim sTemp As String     Dim C As Integer

Application.Volatile     sTemp = ""

For C = 1 To Len(Src)

sTemp = sTemp + Mid(Src, C, 1)

If Mid(Src, C, 1) <> " " And           Mid(Src, C + 1, 1) <> " " And           C < Len(Src) Then             sTemp = sTemp + "-"

End If     Next     AddDashes3 = sTemp End Function

注:

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

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

このヒント(9633)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。