Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » 改行までの文字列にするユーザー定義関数とマクロ

改行までの文字列にするユーザー定義関数とマクロ

対象:Excel2003, Excel2007, Excel2010

セルの先頭から一つ目の改行までの文字列を取得するワークシート関数を組み合わせた数式をご紹介しました。

実際に他のシステムにデータを渡す場合、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

End Function

改行が含まれていない場合には、指定された文字列をそのまま返すようにしてみました。

「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」で画面更新が行われるように戻しています。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » ユーザー定義関数 » 改行までの文字列にするユーザー定義関数とマクロ

「ユーザー定義関数」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.