こんにちは! 健史です。
文字列の開始位置、例えばアルファベット[ABCDEFGHIJKLMNOPQRSTUVWXYZ]の並びから「'R'は何文字目?」と数えたい場合の文字位置を把握できるプログラムの紹介です。
「プログラムだけを早く使いたい!」という方は、ココをクリックして頂ければページ内のプログラムに飛びます。セル:B1に文字列を入れて実行です。
尚この記事は、Excel-VBAを起動して貼り付ければ動作することを目指しています。
Excel-VBAの構造、起動方法、実行方法などを理解されていない方は、以下の記事を参照しながら一度やってみてから対応されることをお勧めします。
実行中に発生したエラーの対処法は、上記記事の2.エラーが発生したときの対処法に記載しています。(この段落のリンクから直接遷移します)
プログラムの概要
今回のサンプルプログラムは
イメージは以下です。
1.入力
2.出力
セル:A1からA2,A3・・と分解された文字列が格納されます。
格納位置をA1からにしたのは、Excelの行番号をみれば文字位置を数えなくても把握できるからです。
プログラムの作成と実行
シンプル版のプログラム
1.Excelを起動
1).対象となるデータ入力
セル:B1に数えたい文字のある文字列を入力します。
↑の[セル:B1に数えたい文字のある文字列を入力します。]をコピー&ペーストします。
イメージは上記プログラムの概要の[1.入力]です。
2.Excel-VBAを起動
Altを押した状態でF8キーを押します。
4.[マクロ名(M):]に'test'と入力(''は不要、''内のtestを入力)
5.[作成(C)]をクリック
6.以下のプログラムをドラッグ&コピー
Dim i As Long For i = 1 To Len(Sheets(1).Cells(1, 2)) Sheets(1).Cells(i, 1) = Mid(Sheets(1).Cells(1, 2), i, 1) Next
7.以下に貼り付け(ペースト)
Sub test()
ここに貼り付ける
End Sub
8.F5キーで実行
9.実行結果の確認
A列に分解・抽出した文字が入っています。
イメージは上記プログラムの概要の[2.出力]です。
文字列を変え複数回実行するなど場合のプログラム
以下はコメント入りのプログラムですが、上記プログラムに機能追加した内容であることから、上記プログラムの詳細説明も兼ねています。
'添え字:iを定義 Dim i As Long 'A列の内容をクリア Sheets(1).Columns(1).Clear 'iを1からセル:B1の文字列長になるまで繰り返す For i = 1 To Len(Sheets(1).Cells(1, 2)) 'セル:B1のiの位置から1文字をA列のi番目に格納する Sheets(1).Cells(i, 1) = Mid(Sheets(1).Cells(1, 2), i, 1) '格納したセルの書式に文字列を設定 Sheets(1).Cells(i, 1).NumberFormatLocal = "@" Next
追加した機能は以下の2つです。
・文字列を変えて複数回実行する場合の対応
'A列の内容をクリア Sheets(1).Columns(1).Clear
今回作成したプログラムで文字列を変えて複数回実行する場合に必要な処理です。
1回目に[セル:B1に数えたい文字のある文字列を入力します。]で実行したあと、連続して[ABCDE]で実行すると結果は「ABCDEに数えたい文字のある文字列を入力します。」となります。
そのままでも文字位置を把握できますが、前回の結果は消去して正確に処理したいものです。
・分解した文字を格納するA列のセルの書式を文字型にする場合の対応
'格納したセルの書式に文字列を設定 Sheets(1).Cells(i, 1).NumberFormatLocal = "@"
セル:A5「1」の書式が標準で右詰になっているので、他の文字と同じ左詰に合わせるため文字列に変更しています。
目的が「見た目を同じにしたい!」なので、左詰め(インデント)でも同じにできます、お好みで。
書式設定のあれこれは、ネットで「EXCELVBA 書式設定」などで検索して頂ければと思います。
・その他
For文については、以下の記事を参照下さい。
最後に
プログラムは文字位置を数えなくても把握できるようにしましたが、「文字位置を把握する」より「文字位置を数える」のほうが'わかりやすく認識されやすいだろう'と考えてのタイトルにしました。
目的の文字列の開始位置から文字数を把握したい場合は、手でB列に1から入力します。
冒頭、文字列の開始位置、例えばアルファベット[ABCDEFGHIJKLMNOPQRSTUVWXYZ]の並びから「'R'は何文字目?」と数えたい場合は、
・'A'から→キーでカーソルを動かしながら「1,2,3,・・・」と数える
・「ABC・・・」と指を折りながら数える
で求めることでしょう。
後者はアルファベットであれば頭の中に記憶されているでしょうから文字を見なくてもできますが、例えばディレクトリ情報
\\172.16.1.1\F$\01.個人フォルダ\10.学習\20.EXCEL-VBA\マイノート.txt
から'マイノート.txt'の'マ'の位置を数える場合はやりにくいと思います。
あまり使うシーンは多くないと思いますが、文字列が長く、かつ、文字列後方にある開始位置を把握したい場合には使えると思います。
コメント