ムハンマドはワークシートに会社名の長いリストを持っています。各会社の名前は、どういうわけかすべてのスペースが削除されているため、たとえば、「AstroPhysics」ではなく「AstroPhysics」として表示されます。ムハンマドは、セルの最初の文字を除いて、大文字の出現の間に単一のスペースを挿入するために、すべての会社名を処理する方法を必要としています。彼はこれを行う簡単な方法があるかどうか疑問に思います。

スペースを追加する方法はいくつかあります。避けられないマクロベースのソリューションにたどり着く前に、会社名を調べることをお勧めします。名前の各単語の間に、スペースではなく、単に非印刷文字が含まれている可能性があります。これは、セルを編集し、挿入ポイントを大文字の数文字前に配置してから、右矢印を数回押すことで判別できます。押すたびに、挿入ポイントが1スペース右に移動するのがわかります。スペースがあるべき場所を「ためらう」ように思われる場合は、そこに非印刷文字があります。

この場合、最善の解決策は、検索と置換操作を実行して、印刷されていない文字を実際のスペースに置き換えることです。 (印刷されない文字を選択し、Shiftキーを押しながら右矢印を押しながらコピーします。次に、[検索する文字列]ボックスに貼り付けて検索します。)

データに非印刷文字が含まれていないと仮定すると、非マクロアプローチを使用することもできます。おそらく最も簡単なアプローチは、ヘルパー列を1つまたは2つ追加することです。最初に数式を入力して、会社名内の2番目の大文字の位置を計算できます。会社名がセルA1にあるとすると、次の数式は配列数式として入力する必要があります。

=SMALL(FIND(0,SUBSTITUTE(A1,CHAR(ROW(INDIRECT("65:90"))),0)&0),2)

この数式がセルB1に入力された場合、次を使用して元の会社名にスペースを挿入できます。

=LEFT(A1,B1-1)&" " & RIGHT(A1,(LEN(A1)-B1)+1)

ただし、このアプローチには大きな欠点があります。元のデータが非常に厳密な形式に従っていることを前提としています。大文字で始まり、スペースを1つだけ挿入する必要がある会社名で見事に機能します。名前がこれらのパラメーターに適合しない場合、期待どおりに機能しません。

もちろん、マクロを使用してスペースを挿入すると、これらの問題を克服できます。以下は、セル内の各文字を調べる簡単なアプローチです。文字が大文字の場合、文字の前にスペースが挿入されます。マクロが完了すると、文字列がセルに詰め込まれます。

Function Add_Spaces(ByVal sText As String) As String    Dim CharNum As Long    Dim FixedText As String    Dim CharCode As Long

FixedText = Left(sText, 1)



For CharNum = 2 To Len(sText)

CharCode = Asc(Mid(sText, CharNum, 1))

If CharCode >= 65 And CharCode <= 90 Then          FixedText = FixedText & " " & Mid(sText, CharNum, 1)

Else          FixedText = FixedText & Mid(sText, CharNum, 1)

End If    Next CharNum

Add_Spaces = FixedText End Function

マクロの使用は簡単です。会社名がセルA1にある場合、以下が使用されます:

=Add_Spaces(A1)

よりコンパクトなアプローチは、次のように、正規表現を使用して大文字を検索し、スペースを挿入することです。

Function SplitCaps(str As String) As String     Dim objRegex As Object     Set objRegex = CreateObject("vbscript.regexp")



With objRegex         .Global = True         .Pattern = "([a-z])([A-Z])"

SplitCaps = .Replace(str, "$1 $2")

End With End Function

この特定のマクロ手法では、正規表現を有効にする必要があります。これを行うには、VBエディターで[ツール]、[参照し、利用可能な参照をスクロールして、MicrosoftVBScript正規表現5.5オプションを見つけます。参照の左側にあるチェックボックスが選択されていることを確認してから、[OK]をクリックします。その後、Add_Spaces関数を使用するのと同じ方法で、Excel内からSplitCaps関数を利用できます。

もちろん、どのアプローチの適切性も、主に、使用しているデータの特性に依存します。元の会社名に複数の連続した大文字(「ABCCorp。」など)が含まれている場合、「ABCCorp」のように、出力にスペースが多すぎることになります。 「ABCCorp。」になります。 「ABCCorp。」の代わりに。また、文字以外のキャラクターは、「H&M」のような作品にレンチを投げることがあります

「H&M」になるか、「H&M」のままになります(使用するマクロアプローチによって異なります)。

これらの奇妙な会社名のいくつかを克服するために、複数の連続する大文字があるかどうかを確認し、それに応じて出力を調整する別のマクロアプローチを試すことができます。

Sub AddSpaces()

Dim i As Integer     Dim j As Integer     Dim PriorCap As Boolean     Dim temp As String

j = 1

Do While Cells(j, 2) <> ""

Cells(j, 3) = ""

PriorCap = True         For i = 1 To Len(Cells(j, 2))

Select Case Mid(Cells(j, 2), i, 1)

Case "A" To "Z", "-"

If PriorCap = False Then                         Cells(j, 3) = Cells(j, 3) & " " & _                           Mid(Cells(j, 2), i, 1)

Else                         Cells(j, 3) = Cells(j, 3) & _                           Mid(Cells(j, 2), i, 1)

End If                     PriorCap = True                 Case Else                     Cells(j, 3) = Cells(j, 3) & _                       Mid(Cells(j, 2), i, 1)

PriorCap = False             End Select         Next i         j = j + 1     Loop End Sub

注:

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

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

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