関連記事[自分で関数を作ってみる]
上記の記事でユーザー定義関数の設定について書きました。
じゃあどんな関数を作ったらいいのか?標準関数に出来ない事ってなによ?ということで、ここでユーザー定義関数を一つご紹介。
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つ目の区切りとなります。