文字列操作

文字列の長さ取得と一部取得

 Excelは数字での計算処理が中心のように思われがちですが、データの検索やその他多くの扱いで、文字列に対する扱い頻度も極めて多く、文字列に対する知識も重要です。

ここでは文字列の長さおよび文字列の一部取得について解説します。

文字列の長さ取得

文字列の長さを求めるには 「Len関数」と「LenB(レンバイト)関数」があります。

「Len関数」は文字列の長さを文字数で取得します。

「LenB関数」は文字列の長さをバイト数で取得します。

Sub mojisu()

  Dim MJ As String ‘①

  Dim P As Long ‘②

  For P = 3 To 9 ‘③

    MJ = Cells(P, “B”).Value ‘④

    Cells(P, “C”).Value = Len(MJ) ‘⑤

    Cells(P, “D”).Value = LenB(MJ) ‘⑥

  Next P

① 文字を代入する変数 型は文字列

② 処理を繰り返すカウンター変数 型は数字

③ 3~9回 処理を繰り返す

④ 商品名をMJに代入

⑤ 商品名の文字数を取得し、C列に書き込む

⑥ 商品名のバイト数を取得し、D列に書き込む

Len関数の「文字数」とは全角であれ半角であれ一文字を1個としてカウントします。

LenB関数では、全角も半角も一文字2バイトとして扱われます(Excel 97から)。

商品名には「空白」も含まれていますが、「空白」も文字列としてカウントされます。

通常のマクロ作成に当たっては「文字数(Len関数)」が中心になります。

Len関数はよく使われる関数ですので、確実に理解するようにしてください。

文字列の一部取得

文字列の一部を取得することはよくあります。

取得の指定は次の3通りです。

  • Left(文字列, 文字数)
  • Right(文字列, 文字数)
  • Mid(文字列, 開始位置, 文字数)

 金融機関の振込用コード表があります。

 この「振込用金融コード」は、最初の4文字が銀行コード、次の3文字がその銀行の支店コード、残りの7文字が普通預金の口座番号をで構成されています。

それぞれを分離して表示するマクロです。

Sub moji1()

  Dim MJ As String ‘①

  Dim CD1 As String ‘②

  Dim CD2 As String ‘③

  Dim CD3 As String ‘④

  Dim P As Long ‘⑤

  For P = 3 To 10 ‘⑥

    MJ = Cells(P, 2).Value ‘⑦

    CD1 = Left(MJ, 4) ‘⑧

    CD2 = Mid(MJ, 5, 3) ‘⑨

    CD3 = Right(MJ, 7) ‘⑩

    Cells(P, 3).Value = CD1 ‘⑪

    Cells(P, 4).Value = CD2 ‘⑫

    Cells(P, 5).Value = CD3 ‘⑬

  Next P

End Sub

① 振込用金融コードを代入する変数 型は文字列

② 銀行コードを代入する変数 型は文字列

③ 支店コードを代入する変数 型は文字列

④ 口座番号を代入する変数 型は文字列

⑤ 3から10回繰り返すカウンター変数 型は数字

⑥ Pが 3から10 まで繰り返す

⑦ 振込用金融コードをMJに代入

⑧ 左 4文字の銀行コードを CD1 に代入

⑨ 5文字目から3文字の支店コードをCD2 に代入

⑩ 右 7文字の口座番号をCD3に代入

⑪ 銀行コードをC列に書き込む

⑫ 支店コードをD列に書き込む

⑬ 口座番号をE列に書き込む

少し難しくなります。

ゆっくり順を追って考えてください。

アドレスがあります。

アドレスからユーザー名(@マークより前の文字列)だけを抜き出すマクロです。

4列目の「momoko@asahi.ne.jp」だけで考えてみます。

まず@マークがこのアドレスの何個目にあるかを知る必要があります。

それがわかれば、その数より 1少ない数の文字列を Leftを使って取り出せばよいことになります。

この例では@マークが7個目ですので、Left(cells(4,2),6) となります。

Sub USR()

  Dim AD As String

  Dim ms As Long

  Dim SS As String

  Dim ban As Long

  Dim user As String

  Dim I As Long

  AD = Cells(4, “B”) ‘①

  ms = Len(AD) ‘②

  For I = 1 To ms ‘③

    SS = Mid(AD, I, 1) ‘④

    If SS = “@” Then ‘⑤

      ban = I ‘⑥

      Exit For ‘⑦

    End If

  Next I

  user = Left(AD, ban – 1) ‘⑧

  Cells(4, “C”) = user ‘⑨

End Sub

① momoko@~ のアドレスをADという変数に代入します。

② このアドレスの全文字数を取得します。

③ 1から文字数までの繰り返し処理

④ アドレスの最初の一文字を取り出しSSという変数に代入します。

⑤ もしSSが@だったら ⑥⑦を実行します。

⑥ @はI番目になるので、banという変数にIを代入します。

⑦ ループを抜け出ます。

もしSSが@でなければ、ループの最初に戻り次の一文字を調べます。

⑧ @より前の文字列を user という変数に代入します。

⑨ セル C4 にユーザー名を書き入れます。

これはあくまで1件目の「momoko@asahi.ne.jp」だけの記述です。

上記 ①~⑨までが

For P = 7 to 8
 ① ~⑨の処理
Next P

となって、全数の取り出しができることになります。

Sub USR2()

  Dim AD As String

  Dim ban As Long

  Dim user As String

  Dim ms As Long

  Dim SS As String

  Dim I As Long

  Dim P As Long

  For P = 4 To 8 ‘⑩

    AD = Cells(P, “B”)

    ms = Len(AD)

    For I = 1 To ms

       SS = Mid(AD, I, 1)

       If SS = “@” Then

          ban = I

          Exit For

      End If

    Next I

    user = Left(AD, ban – 1)

    Cells(P, “C”) = user

  Next P

End Sub

大文字・小文字および指定形式への変換  文字を扱っているとき、大文字を小文字に変えたり、反対に小文字を大文字に変えたりすることがよくあります。  また全角文字から半角...