こんにちは、Ryoです。
VBAで処理するうえで文字列に関することは多々ありますが、一部の文字を置換したいことや指定した数だけ文字を追加したいことってありますよね。
例えばURLのような長い文字列に対して一部を置換したり、セル上で簡易的なグラフ表示をしてみたい時に使えますので、今回はその方法についてご紹介します。
1.Replace関数・・・文字列を別の文字に置換
◆構文
Replace(expression, find, replace[, start[, count[, compare]]])
【引数】
「expression」・・・文字列を指定
「find」・・・文字や文字列を指定し検索
「Replace」・・・指定した文字や文字列に置換
「count」・・・置換する回数を指定
「compare」・・・文字列比較モードを表す定数の設定
構文としてはこのようになりますが、私が普段使う上では
Replace(expression,find,replace)の形が多いですね。
このサンプルコードとしては以下の形です。
◆サンプルコード
Sub Str_Replace() Cells(2, 1).Value = Replace(Cells(1, 1).Value, "jizilog", "自恃ろぐ") End Sub
このサンプルコードはセルA1に記入されている”jizilog”を”自恃ろぐ”に置換します。
「Replace」と表示したボタンに上述コードを登録して実行すると・・・
セルA2に指定した文字列を表示します。
このReplace関数を使って「指定した文字を取り除く」ことも出来ます。
Sub Str_Replace() Cells(2, 1).Value = Replace(Cells(1, 1).Value, "https://jizilog.com/", "") End Sub
セルA1に記載されたURLから”https://jizilog.com/”を取り除くので””と指定します。
ここも同じように「Replace」ボタンに登録し実行すると・・・
この様に指定した文字を削除できますので、知っていると何かと有用です。
◆Replace関数の戻り値
条件 | 戻り値 |
対象文字列が0 | 長さ0の文字列(“”) |
対象文字列がNull | エラー |
検索文字列長さ0の文字列(“”) | 対象文字列のコピー |
置換文字列長さ0の文字列(“”) | 検索文字列を全て削除 |
置換数が0 | 対象文字列のコピー |
上表の通りになります。
◆引数compareに指定する定数
定数 | 値 | 説明 |
vbUseCompareOption | -1 | OptionCompareステートメントの設定を使用 |
vbBinaryCompare | 0 | バイナリモードで比較 |
vbTextCompare | 1 | テキストモードで比較 |
この部分の設定は今まで特に意識したことが無いので、参考までに載せておきます。
2.String関数・・・指定した数だけ文字を追加
◆構文
String(number, character)
【引数】
number・・・繰り返しの指定数
character・・・指定文字
この関数は「指定した文字」を「指定回数」繰り返すものですので、私は専ら簡易グラフ表示に使用しています。
サンプルコードとしては以下になります。
◆サンプルコード
Sub Str_Graph() Dim i As Long For i = 1 To 7 Cells(i + 1, 5).Value = String(Cells(i + 1, 4).Value / 100000, "|") Next i End Sub
このサンプルコードは会社で生産する製品の単価、生産数から出荷金額を数式にて算出された表があるとして、その出荷金額の数だけ「|」を繰り返し文字列を入力することで簡易グラフとするものです。(/100000としているのは文字が多くなりすぎる為です)
この表で「String(簡易グラフ化)」ボタンを押すと・・・
この通り簡易的なグラフ表示出来ますから、一目で比較評価できますね。
数多い品種を取り扱っている場合はより効果的に表現できますので、普段の業務でも何かと
有用なことが多いですから私も良く使っています。
以上が知ってると役立つ文字列操作(Replace/String関数)についての解説でした。
この辺りはVBAでよく使う条件分岐(If,For等)に比べれば利用頻度は少ないのですが、
ふと思いついた時に・・・どうやるんだろ?ってなる部分かと思います。
その時に知ってるとReplaceはコード記述が楽になりますし、Stringは日々管理する
Excelファイルをより効果的に視覚化出来ますから役立つのではないでしょうか。
今回の記事が何かの参考になれば幸いです。
Ryo