セルの先頭から一つ目の改行までの文字列を取得するワークシート関数を組み合わせた数式をご紹介しました。
実際に他のシステムにデータを渡す場合、VBA(Visual Basic for Applications)が書けないという方なら、ご紹介した数式を作成しておいて、形式を選択して貼り付けなどで改行までの文字列にする作業が必要になります。
こういう部分は、VBAがわかるとやはり楽です。
VBAがわかる方なら、マクロにしてしまいましょう。
一つのSubプロシージャにしてしまっても、大した量のコードになるわけではありませんが、一つ目の改行までの文字列を取得するユーザー定義関数も、役に立ちそうですから、ユーザー定義関数と、そのユーザー定義関数をループの中で呼ぶマクロを作成してみました。
Function StrBeforLF(文字列 As String) As String
Dim iLf As Long
iLf = InStr(1, 文字列, vbLf, vbTextCompare)
If iLf = 0 Then
StrBeforLF = 文字列
Else
StrBeforLF = Left(文字列, iLf - 1)
End If
改行が含まれていない場合には、指定された文字列をそのまま返すようにしてみました。
「InStr(1, 文字列, vbLf, vbTextCompare)」で、改行「vlLf」が何文字目にあるかを調べ変数「iLf」に格納しておきます。
改行がなかった場合「If iLf = 0 Then」、ユーザー定義関数の戻り値に引数をそのまま渡しています「StrBeforLF = 文字列」。
改行が存在していた場合は改行の一つ前の文字列までをユーザー定義関数の戻り値に指定しています「StrBeforLF = Left(文字列, iLf - 1)」。
上記のユーザー定義関数を使ったマクロが以下のとおりです。
Sub 先頭の改行までの文字列にする()
Dim c As Range
Application.ScreenUpdating = False
For Each c In Selection
c.Value = StrBeforLF(c.Value)
Next
Application.ScreenUpdating = True
End Sub選択されているセルで「For Each c In Selection」、先のユーザー定義関数・StrBeforLFにセルの値を引数として渡して、戻り値を新たなセルの値に指定しています「c.Value = StrBeforLF(c.Value)」。
ループに入る前の「Application.ScreenUpdating = False」は画面更新を停止する定番の処理で、ループ処理後に「Application.ScreenUpdating = True」で画面更新が行われるように戻しています。
- Newer:上下方向・縦方向の配置指定-文字の配置
- Older:Word文書で英単語の途中で折り返さないように
Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » 改行までの文字列にするユーザー定義関数とマクロ