【関数・プロパティ設定をつかう】

 4 三つの文字列取得関数をつかう

 5 文字列の指定位置から1文字を取得

 6 文字列の文字数を取得

 7 文字列のループで1文字ずつ分解

 8 文字が入っているセルの最大行を取得

 9 文字が入っているセルの最大列を取得

10 行のループで複数の文字列を連続分解

文字列のループで1文字ずつ分解

1. 文字列のループで1文字ずつ分解

パイさん

「今度は、Excel VBA/マクロによって1文字ずつ分解する処理を文字列のループ処理で一つにまとめてみましょう。

 予め、次のようなExcelシートを用意します。」

Img7_2_34

パイさん

「書込行:WRwを『3』に、最大文字数:MaxStrを『13』に固定して、

 書込列を変数WCm、開始位置を変数StPとします。

 1文字目から最大文字数まで1文字ずつカウントアップしていきながら、

 そのつどセルA3の値を1文字ずつ読みとり、

 セル(WRw, WCm)に書きこんでみましょう。」

ソンくん

「『WRw』を『3』、『MaxStr』を『13』として定数宣言、

 WCm・StPを整数型として変数宣言。

 Const WRw = 3

 Const MaxStr = 13

 Dim WCm As Integer

 Dim StP As Integer

 と記述します。

 次に、1文字目から最大文字数まで1文字ずつカウントアップしていきながら、

 そのつどセルA3の値を1文字ずつ読みとり、セル(WRw, WCm)に書きこむということを考えてみます。

 開始位置:StPを『1』から最大文字列:MaxStrまで1ずつカウントアップしていきながら、

 そのつどセルA3の値を1文字ずつ読みとり、セル(WRw, WCm)に書きこむということだから、

 For StP = 1 To MaxStr

   Cells(WRw, WCm).Value = Mid(Range("A3").Value, StP, 1)

 Next StP

 と記述します。」

パイさん

「そうですね。ほぼ正しいプログラムコードです。

 しかし、開始位置:StPと書込列:WCmの関係が記述されていません。

 ループ処理の中で、開始位置:StPは1ずつカウントアップしていきますが、

 書込列:WCmは何も値が代入されていません。」

ソンくん

「確かに、書込列:WCmが『0』だと、マクロを実行したときにエラーとなってしまいます。

 開始位置:StPと書込列:WCmの等式を考えてみます。

 StPが 『1』文字目のとき、WCmはB列つまり 『2』列

 StPが 『2』文字目のとき、WCmはC列つまり 『3』列

 StPが 『3』文字目のとき、WCmはD列つまり 『4』列

 StPが 『4』文字目のとき、WCmはE列つまり 『5』列

 StPが 『5』文字目のとき、WCmはF列つまり 『6』列

 StPが 『6』文字目のとき、WCmはG列つまり 『7』列

 StPが 『7』文字目のとき、WCmはH列つまり 『8』列

 StPが 『8』文字目のとき、WCmはI列つまり 『9』列

 StPが 『9』文字目のとき、WCmはJ列つまり『10』列

 StPが『10』文字目のとき、WCmはK列つまり『11』列

 StPが『11』文字目のとき、WCmはL列つまり『12』列

 StPが『12』文字目のとき、WCmはM列つまり『13』列

 StPが『13』文字目のとき、WCmはN列つまり『14』列

 ということは、

 WCm = StP + 1という等式が成り立ちます。

 

 For StP = 1 To MaxStr

   WCm = StP + 1

   Cells(WRw, WCm).Value = Mid(Range("A3").Value, StP, 1)

  Next StP

  と記述します。」

Sub Mid関数_1文字連続分解ループ()

 Const WRw = 3

 Const MaxStr = 13

 Dim WCm As Integer

 Dim StP As Integer

 

 For StP = 1 To MaxStr

   WCm = StP + 1

   Cells(WRw, WCm).Value = Mid(Range("A3").Value, StP, 1)

 Next StP

End Sub

パイさん

「その通りです。それでは、そのマクロを実行してみましょう。」

Img7_2_36

ソンくん

「セルB3~N3に

 『セ』『ル』『を』『思』『い』『の』『ま』『ま』『に』『動』『か』『そ』『う』

 が、書きこまれました。」


2. 文字列の文字数を取得後、文字列のループで1文字ずつ分解

パイさん

「先ほど、1文字ずつ分解する処理を文字列のループ処理で一つにまとめてみましたが、

 ループの終了値つまり最大文字数:MaxStrを『13』に固定していました。

 ループの終了値を毎回人が数えていては手間がかかるし時間もかかるので、

 コンピュータに計算してもらうようにしましょう。

 いったん全てのセルB3~N3の値をクリアしてください。」

Img7_2_41

ソンくん

「ループの終了値つまり最大文字数:MaxStrを取得するために、Len関数をつかってみます。

 引数としてセルA3から取得した文字列を渡してから、文字数を受け取り、変数『MaxStr』に格納してみます。

 MaxStr = Len(Range("A3").Value)

 ループ処理の前処理として、これをループ処理より先に記述します。」

Img7_2_42

パイさん

「その通りです。

 今回は、マクロを実行する前に、

 『ビジュアル ベーシック エディター』の『コードウィンドウ』で、

 MaxStr = Len(Range("A3").Value)

 の行の左端をクリックして、ブレークポイントを設定しておきましょう。」

Img7_2_43

ソンくん

MaxStr = Len(Range("A3").Value)

 の行の左端をクリックすると、左端に赤丸がついて、

 プログラムコードの背景が赤に文字が白に変わり、

 ブレークポイントが設定されました。

 ところで、ブレークポイントって何ですか?」

パイさん

ブレークポイントとは、ソフトウェア開発のデバッグ作業において

 実行中のプログラムを意図的に一時停止させる箇所のことです。

 それでは、そのマクロを実行してみましょう。」

Img7_2_44

ソンくん

MaxStr = Len(Range("A3").Value)の行に右矢印が付いて背景色が黄色になっています。」

パイさん

「それは、MaxStr = Len(Range("A3").Value)の行で

 実行中のプログラムが一時停止している状態です。

 それでは、マウスを動かしてMaxStrにカーソルを合わせてください。」

Img7_2_45

ソンくん

MaxStrのすぐ下にMaxStr = 0という文字が表示されました。」

パイさん

「実行中のプログラムが一時停止している状態のときは、

 プログラムコードの変数に、マウスを動かしてカーソルを合わせると、

 その変数の現在値を知ることができます。

 現在、MaxStr = 0です。

 ここで、F8をクリックした後、マウスを動かしてMaxStrにカーソルを合わせてください。」

Img7_2_46

ソンくん

For StP = 1 To MaxStrの行に右矢印が付いて背景色が黄色になりました。

 マウスを動かしてMaxStrにカーソルを合わせると、

 MaxStrのすぐ下にMaxStr = 13という文字が表示されました。」

パイさん

デバッグ中にF8をクリックすると、一時停止していたプログラムコードが実行されて、

その次の行のプログラムコードが一時停止状態となります。

 F8をクリックしたことで、MaxStr = Len(Range("A3").Value)が実行されて、

 MaxStr = 13となりました。

 ここで、マウスを動かしてFor StP = 1 To MaxStrの行のMaxStr

 カーソルを合わせてください。」

Img7_2_47

ソンくん

「マウスを動かしてMaxStrにカーソルを合わせると、

 MaxStrのすぐ下にMaxStr = 13という文字が表示されました。」

パイさん

MaxStr = Len(Range("A3").Value)が実行されて、MaxStr = 13となったことにより、

 For StP = 1 To MaxStrの行のMaxStr13となりました。

 このように、ブレークポイントを設定して、デバッグ作業を行えば、

 実行中のプログラムの変数の値が正しく取得されているか等を確認することができます。

 デバッグ中にF5をクリックすると、一時停止していたプログラムコード以降の

 全てのプログラムコードが最後まで一気に実行されます。

 ここで、F5をクリックしてください。」

Img7_2_48

ソンくん

「セルB3~N3に『セ』『ル』『を』『思』『い』『の』『ま』『ま』『に』『動』『か』『そ』『う』

 が、書きこまれました。」

 

パイさん

「試しに、対象文字列:セルA2の値を13文字以内の適当な文字に書きかえて、マクロを実行して、

 ある文字列が左端から右端まで順に1文字ずつ分解できることを確かめてみましょう。」



目 次

1. セルに文字を書きこむ
セルに文字を書きこむ

2. RangeとCellsでセルの位置を指定する
RangeとCellsでセルの位置を指定する

3. ループ処理でセルに値を書きこむ
ループ処理でセルに値を書きこむ

4. ループ処理でセルの値を読みとる
ループ処理でセルの値を読みとる

5. ループ処理でセルからセルへ値を代入する
ループ処理でセルからセルへ値を代入する

6. 条件分岐処理でセルの操作を分ける
条件分岐処理でセルの操作を分ける

7. 関数・プロパティ設定をつかう
関数・プロパティ設定をつかう

8. 他のレンジ/シート/ブックを更新する
他のレンジ/シート/ブックを更新する




YouTube

Excelマクロの実用版とデモ版


ブログ