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

マクロ / VBA

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

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

20-1.jpg

上のように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であれば後半を返します。

使い方、セルへの入力

20-2.jpg

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

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

  • ▼お小遣い稼ぎしませんか?▼ 日々の生活にhappyをプラスする|ハピタス

    クレジットカード・FX口座を作るだけで簡単に3万円GETです。一切支出はありません。

目標 COLUMN MATCH 印刷 変換 DATE TODAY 条件付き書式 フロー図 SUMIF SUM 日付 HLOOKUP INDEX VLOOKUP 検索 COUNTIF バーコード XLSTART コピペ 置換 ユーザー定義関数 無料 図形 ワイルドカード NA() グラフ 作業効率UP テンプレート SUMIFS
  • 関西在住の30代サラリーマン。事務職で毎日Excelと戯れています。
    システム導入なんて資金が無い!Excelでなんとかやりたい零細中小の社長さん・事務員さんの力になればと思います。
    詳しいプロフィール


PAGE TOP ↑