エクセル術

セルにある文字列を分裂させる

関連記事[自分で関数を作ってみる
上記の記事でユーザー定義関数の設定について書きました。
じゃあどんな関数を作ったらいいのか?標準関数に出来ない事ってなによ?ということで、ここでユーザー定義関数を一つご紹介。

1つのセルに長文が・・・



上のように1つのセルに文字がずら~っと打たれている。

 

引数

引数(ひきすう)・・・関数の後ろの括弧内の事を言います。SUMであれば、SUM(A1:A4)の様にA1:A4が引数と言います。(いんすうと読んでいましたがどうやらひきすうと読むらしい)
引数を使って、文字列・指定バイト数・文字列の前か後ろかの判定をします。

コード

'「前後」引数は0=前、1=後
Function B_Split(文字列, 区切バイト数, 前後)
    x = LeftB(文字列, 区切バイト数)
    '区切バイト数手前の句読点を検索しその場所をintSrchに返す
    intSrch = InStrRev(x, "、")
    If intSrch < InStrRev(x, "。") Then
        intSrch = InStrRev(x, "。")
    End If
    '区切り位置内に句読点が無い場合、区切バイト数で区切る
    If intSrch = 0 Then
        intSrch = Len(x)
    End If
    '前後判定し、intSrchの場所で区切る
    If 前後 = 0 Then
        y = Left(文字列, intSrch)
    Else
        y = Right(文字列, Len(文字列) - intSrch)
    End If
    B_Split = y
End Function

今回はB_Splitという名前の関数にしてみました。
セルに入力するのは「=B_Split(対象セル,バイト数,区切り順番)」という形になります。

VBAの解説

※バイト数で区切りますので全角文字は2バイトという事を念頭に置いてください。
Function B_Split(文字列, 区切バイト数, 前後)
関数の定義Functionです。関数名とその後ろの引数を定義します。

x = LeftB(文字列, 区切バイト数)

文字列の左から区切バイト数分だけを切り取ります。
例:「LeftB(“あいうえお”,6)」であれば「あいう」がxに入ります。

intSrch = InStrRev(x,"、")

文字列xを最後から検索を開始して初めて”、”が見つかった位置を頭から数えて何文字目かをintSrchへ入れます。
“。”についても同様に検索し、”、”とどちらが最後の方にあるかを判定しています。
あとは前後という判定フラグを使用し、0であれば文字列の前半、1であれば後半を返します。

使い方、セルへの入力

A5セルに =B_Split(A1,A2,0) とすることで1つ目の区切り、
A6セルに =B_Split(A1,A2,1) これで2つ目の区切りとなります。

モバイルバージョンを終了