VBA 文字列の操作

わずかな知識で VBA!

VBA 文字列の操作


 

VBA 文字列の操作★VBA関数



  関数というと、複雑な演算を思い浮かべるかもしれませんが、
  文字列を操作するVBA関数もあります。

  文字列を操作するVBA関数は、プログラミングする上ではとても重要で、
  これを使いこなせなければ、条件分岐などのプログラミングが難しくなります。

  入力された文字列の中から、特定の事項や条件を引き出して判別したり、
  データとして整形する場合など、

  文字列の操作は、
  プログラミングする上で不可欠なものと言えます。

  ここでは、VBA関数のうち、非常によく使う文字列処理関数や、
  データの整合性をチェックする関数などについて説明していきます。


      

わずかな知識で
VBA!







  最初に、文字列を操作するVBA関数の一覧を書いておきます。
  機能がちょっと分かりずらいのもありますが、あとの解説を読めば何とかなると思います。(たぶん?)

文字列を操作する関数の一覧
 関  数    機 能
文字列の取得・検索  Left  文字列の右/左から指定した文字数ぶんの文字列を返す
 Right
 Mid  指定された位置から指定した文字数ぶんの文字列を返す
 Len  文字列の長さを返します。
 InStr  文字列の中から別の文字を前(左側)から検索し、
 最初に見つかった文字位置を前(左側)からの文字位置で返します。
 InStrRev  文字列の中から別の文字を後方(右側)から検索し、
 最初に見つかった文字位置を前(左側)からの文字位置で返します。
文字列の変換  LCase  アルファベットの大文字を小文字に変換する。
 UCase  アルファベットの小文字を大文字に変換する。
 StrConv  指定した方法で、文字列を変換します。
 Chr  文字コードに対応した文字列を返す。
 Asc  文字列に対応する文字コードを返す。
 Trim  文字列の先頭と末尾の両方のスペースを削除する。
 LTrim  文字列の先頭のスペースを削除する。
 RTrim  文字列の末尾のスペースを削除する。
 Replace  文字列の一部を、別の文字列で指定した回数分置換する。
文字列の比較  StrComp  指定した方法で、文字列を変換します。
  その他  Space  指定した数のスペースからなる文字列を返す。
 String  指定した文字列を繰り返す。
 StrReverse  文字列を逆に並べ替える。
 MonthName  数値から月を返す。
 WeekdayName  数値から曜日を返す。
  書  式  Format  文字列を指定した書式に変換します。
  文字列の
  チェック
 IsNumeric  データを数値として評価できるかどうかをチェック
 IsDate  データを日付として評価できるかどうかをチェック
IsObject  データをオブジェクトとして評価できるかどうかをチェック
 

  Left,Right

     文字列の右/左から指定した文字数ぶんの文字列を返す

       strmoji = Left(strmoji, 3)
 
       Left(<文字列>,<文字数>)

       変数strmojiが仮に「12345」なら、strmojiに「123」が代入されます。
       全角でも半角でも1文字として数えます。


  Mid

     指定された位置から指定した文字数ぶんの文字列を返す

       strmoji = Mid(strmoji,3,2)

       Mid(<文字列>,<開始位置>,<長さ>)

       変数strmojiが仮に「12345」なら、strmojiに「34」が代入されます。
       長さを省略すると、開始位置以降の全ての文字となります。


  Len

     文字列の長さを返します。

       i = Len(strmoji)

       Len(<文字列)

       変数strmojiが仮に「12345」なら i に 5が代入されます。


  Instr

     文字列の中から別の文字を前(左側)から検索し、最初に見つかった文字位置を
     前(左側)からの文字位置で返します。

       i = InStr(keisansiki, "×")

       Instr(<開始位置>,<文字列>,<検索文字>,<モード>)

       keisansikiが「125.25×2.75」なら i に7が代入されます。


  InstrRev

     文字列の中から別の文字を後方(右側)から検索し、最初に見つかった文字位置を
     前(左側)からの文字位置で返します。

       i = InStrRev(keisansiki, "×")

       Instr(<開始位置>,<文字列>,<検索文字>,<モード>)

       keisansikiが「125.25×2.75」なら i に 7が代入されます。
       keisansikiが「125.25×2.75×10.00」なら i に 12が代入されます。


  LCase・UCase

     アルファベットの大文字と小文字を変換します。

       strmoji = LCase(strmoji)
     
  strmoji = UCase(strmoji)

     ユーザーが入力したデータが大文字で、条件判断等が小文字で設定してあるときなどに
     これらの関数を使ってどちらかに変換して判断します。


  StrConv  

     指定した方法で、文字列を変換します。

     StrConv関数は、引数と組合せて、文字列を全て小文字にしたり、大文字にそろえたりと、
     文字列の書式を変換します。

     引数は、組合せて使用することも可能です。

       strmoji = StrConv(Range("C5").Value, vbNarrow + vbProperCase)

       vbUpperCase   :  文字列を大文字に変換する
       vbLowerCase   :  文字列を小文字に変換する
       vbProperCase   :  文字列の各単語の先頭の文字を大文字に変換する
       vbWide       :  文字列内の半角文字を全角文字に変換する
       vbNarrow      :  文字列内の全角文字を半角文字に変換する
       vbKatakana     :  文字列内のひらがなをカタカナに変換する
       vbHiragana     :   文字列内のカタカナをひらがなに変換する
       vbUnicode     :   システムの既定のコードページを使用して文字列をUnicodeに変換する
       vbFromUnicode  :  文字列をUnicodeからシステム既定のコードページに変換する

  
  Chr

    ASCIIコードに対応する文字列を返します。
 
    最近のExcelでは知らなくても済むようになってきましたが、
    MsgBox関数や、InputBox関数などで、メッセージの改行等を行います。

       Sub tesuto()
           Dim modori As Integer

           modori = MsgBox("MsgBox関数について知りたいですか?", 36, "学習意欲の確認")
           Select Case modori
           Case 6
              MsgBox "「はい」が押されました。" & Chr(13) & Chr(10) _
                  & "続けてお読みください!", , "がんばりましょう!"
           Case 7
              MsgBox "「いいえ」が押されました。" & vbCrLf _
                  & "後悔しますよ!", , "残念!"
           End Select

        End Sub

         Case6 
の部分が Chr関数を使って作成した部分で、
         Case7 の部分は、組込定数を使って作成した部分です。
定数 内 容
 vbCrlf   Chr(13)+Chr(10)   キャリッジリターンとラインフィード 
vbCr  Chr(13)  キャリッジリターン
vbLf  Chr(10)  ラインフィード

  Asc

    文字列に対応する文字コードを返す。
 
    文字コードは、たとえば大文字のA〜Zなら65以上90以下となります。

       Asc(文字列)

    空白の場合は、実行時エラーとなります。
    私の場合は、日本語がメインなので、あまり使いません。


  Trim  
  
    文字列の前後のスペースの削除

    Trim関数は、引数に指定した文字列の先頭と末尾のスペースを削除します。
     しかし、文字列の中のスペースは削除できません。
    その場合は、前出のReplace関数を使用します。

      strmoji = Trim(Range("C5").Value)


  LTrim関数:先頭のスペースを削除します。
  RTrim関数:末尾のスペースを削除します。


  Replace

    文字列の置換

    「指定された文字列の一部を、別の文字列で指定された回数分で置換した文字列を返します。」

    上の文章はヘルプの説明文です、例のごとく日本語が変ですが、
    下の使用例をみればすぐにわかると思います。

      strokikaemoji = Replace("VBA文字列の操作", "VBA", "", 1, -1, 1)

      「VBA文字列の操作」の中の、「VBA」を空白と置き換え(消す)ます。
      strokikaemoji は 「文字列の操作」となります。

     1, -1, 1 は省略可能で、順に、「開始位置」、「置換回数」、「比較モード」となっています。
     省略すると、文字列の中にある全ての置換該当文字が置換されます。

     文字列の中の空白(スペース)を削除する場合は、こうです。

      strmoji = Replace(strmoji, " ", "")


  StrComP

    2つの文字列を比較してバリアント型の値を返します。

    StrComp関数は、比較モード定数があり、それを指定して比較します。
    
      StrComp(<文字列1>、<文字列2>、<比較モード>)

    実際のプログラミングで行う文字列の比較は、

        : 等しい         If strmoji = strmoji2 Then

       <> : 等しくない     If strmoji <> strmoji2 Then

       Like : 文字列の中に指定した文字列がある。
                        If strmoji Like "*文字*" then

         で、今のところ十分なので、この関数は使ったことがありません。
   
   「Space」、「String」、「StrReverse」関数も、同じ理由で省略します。
   知りたい方は、VBEのヘルプを参照してください。(わずかな知識でExcel VBA)


  Format

    Format関数は、その用途が非常に広い関数です。
    文字列を指定した書式に変換します。

       strmoji = Format(strmoji,"#,##0")
       strmoji = Format(strmoji,"000-0000")

       Fomat(<文字列>,<変換書式>)

    使用する引数によって、いくつもの異なる動作をします。
    引数については、「マクロの記録」に教えてもらうか、
    Excelの「セルの書式設定(F)」→「表示形式」タブ→「分類(ユーザー定義)」で学べます。


  文字列のチェック

    データを数値として評価できるかどうかのチェック

    データを入力したり、書式を変換したりする前に、データに誤りがないかどうかをチェックすることは
    とても大事なことです。

    たとえば、データが文字列だと、SingleやLongなどの変数には代入できません。
    そこで、変数に格納する前に、データを数値として評価できるかどうかをチェックします。

    その関数が IsNumeric関数です。

       If IsNumeric(kazu.Value) = True then
          suryo = kazu.Value
       Else
          MsgBox "数量を正しく入力してください!"
          Exit Sub
       End if


      上は、ユーザーフォームのTextBox(kazu)に入力したデータを取得する時のものです。
      変数(suryo)が、Long型の場合は、このようにしています。

      数量は、String型として取得しても結構ですが、あとで、大きさを比較する場合などは、
      Long,やSingle型などでないと比較できません。

  その他のチェック

      IsDate :データを日付として評価できるかどうかをチェック
      IsObject :データをオブジェクトとして評価できるかどうかをチェック

        


  わずかな知識でVBA!       TOP

  マクロで何ができる?   ユーザーインターフェース    マクロの記録   マクロの登録
 
  イベントについて      マクロの編集           ゲームで覚えるVBAプログラミング
 
  オブジェクトの操作     セルの操作            MsgBox関数・InputBox関数
 
  変数の型           ヘルプの活用          イミディエイトウィンドウ  
 
  Withステートメント      Setステートメント
 
  条件分岐のステートメント   If Then Else,Select Case
 
  繰り返しのステートメント   Do Loop
 
  繰り返しのステートメント   For Next
  
  ダイアログボックスを作ってみよう1              ダイアログボックスを作ってみよう2 【実践編】
  
  ActiveXコントロール   各コントロールのプロパティ      文字列の操作        Endプロパティ

  リンク・検索   相互リンク    マイプロフィール       YouTubeの部屋 

Copyright (C) わずかな知識でVBA! All Rights Reserved