和風スパゲティのレシピ

日本語でコーディングするExcelVBA

文字列

"1"+"1"="11"

「+」を文字列に対して使うと連結演算子(&と同じ)になります。足し算の結果がかなり大きな誤った値になったり、セルの表示書式を「文字列」にすると正しく計算されないような不具合が発生した場合は、この仕様を疑ってください。

文字列を部分一致で比較する - Like演算子

文字列を部分一致で比較するLike演算子の使い方を解説します。任意の文字列を意味するワイルドカード「*」を利用して、If 判定したい文字列 Like "*○○*" Thenの形式で使用します。数字を表す#や、アルファベットを表す[A-Z]など、文字種も指定可能です。

Instr関数とLike演算子の速度比較(文字列を含むか判定)

文字列が文字列を含んでいるかどうかを判定する2つの方法「Instr関数/Like演算子」について、どちらが早いかを検証しました。Like演算子が安定して速かったですが、最終結論は「どちらも十分早いので書きやすい/読みやすい方を使えばよい」です。

複数のセル値を区切り付き文字列に結合する

複数のセルの値を文字列に結合する方法を解説します。対象セルがn×1や1×nのセル範囲であればExcelのTEXTJOIN/CONCAT関数、VBAのJoin関数が使えます。対象セルが複数エリアにまたがる場合は、ForEach文で1つずつ結合していきます。

文字列を区切り文字付きで結合する - Join関数

文字列を区切り文字付きで結合するJoin関数の使い方を解説します。Join(1次元配列, 区切り文字)で配列の各要素をつなげた1つの文字列を作ってくれます。この関数は1次元配列限定のため、セル範囲を渡したい場合はTranspose関数をかませます。

指定の文字列より左側(前方)を削除する

テキストからある文字列を検索し、それより左側を削除するコードを解説します。Instr関数で検索文字列の位置を知らべてRight/Mid関数で取り出すコードが基本になりますが、Split関数を使って検索文字で区切るコード短縮技も紹介します。

指定の文字列より右側(後方)を削除する

テキストからある文字列を検索し、それより右側を削除するコードを解説します。Instr関数で文字列の位置を調べて、その1文字手前までをLeft関数で取得します。対象文字列が複数登場する場合は、InstrRev関数と使い分けることになります。

選択エリアの0値を置換で消去するマクロ

値が「0」のセルを置換でクリアするマクロを紹介します。単純な処理ですのでコードも単純で、Selection.Replace 0, "", lookat:=xlWhole1行でOKです。ただし、置換はChangeイベントと相性が悪いので.EnableEvents = Falseを挟んで実行します。

アルファベット(ABC)⇔数字(123)を変換する関数

アルファベット(ABC)を数字(123)に、またはその逆の変換をする関数を紹介します。列見出しと列番号の相互変換という需要がほとんどと思いますので、27番以降はAA~と対応させる関数にして、「Rangeプロパティ」を使用して作ります。

文字列内の指定文字の登場回数をカウントする

文字列の中にある文字がいくつ入っているかを調べる方法を解説します。コード量が最少のSplit関数法、同じ手法がワークシートでも使えるReplace関数法、面倒だが最速のInstr関数法の3つがありますので、お好きなものをお使いください。

パスからフォルダ名やファイル名を取得する

パスからファイル名・フォルダ名を取得する方法を解説します。InstrRev関数で一番右の「\」を検索し、Midでその右側を取ってくることで目的の文字列を取得できます。また、Dir関数の性質を使ってDir(パス)から求めることもできます。

カッコ内の文字列を取得する関数-Mid,Instr関数

文字列から "(" と ")" を検索し、カッコの中身を取得する方法を解説します。Instr関数で開きカッコと閉じカッコを検索し、そうして求まった「○文字目から△文字目」という位置情報をMid(元の文字列, ○, △ - ○ + 1)に代入して取得します。

Replace関数とReplaceメソッドの違い

ExcelVBAにおいて文字列を置換する処理に使う、Replace関数とReplaceメソッドの違いを解説します。Replace関数には、「シート関数のREPLACE」と、「VBA関数のReplace」の2つがありますので、ここでは3つのReplaceについて解説します。

文字列から文字列までを置換する/消す

テキストから2つの文字列を検索し、その間にある文字列を置換したり、削除する方法を解説します。RangeオブジェクトのReplaceメソッドを使うとワイルドカード「*」が使えるため簡単ですが、できない場合はInstr関数で地道に頑張ります。

ある文字列からある文字列までを取り出す

テキストから2つの文字列を検索し、その間にある文字列を取ってくる方法を解説します。開始位置= InStr(元の文字列, 文字A)+1、終了位置=InStr(元の文字列, 文字B)-1を求め、Mid(元の文字列, 開始位置, 終了位置 - 開始位置 + 1)で取得できます。

Mid関数を位置で指定できるようにカスタマイズ

Mid関数を使う際、第3引数の「取ってくる文字数」を計算するために「終了位置 - 開始位置 + 1」を書くのですが、Instrなど位置を求める式が入っていると、面倒だしミスの元なので、Mid(元の文字列, 開始位置, 終了位置)を自作してみましょう。

指定の文字列より右側(後方)を取り出す

テキストからある文字列を検索し、それより右側を取得するコードを解説します。文字列操作の基本「位置を検索して切り取る」に忠実にRight/Mid/Instr関数を組み合わせたコードと、Split関数を使ったコード短縮技を両方紹介します。

指定の文字列より左側(前方)を取り出す

テキストからある文字列を検索し、それより左側を取得するコードを解説します。「左から文字列が見つかるまで」という日本語そのままに、Instr関数で文字列の位置を調べて、その1文字手前までをLeft関数で取得します。

文字列の左側(先頭)をn文字削除する

文字列の左側をn文字削除するコードを解説します。例えば2文字を消したい場合は、「左から2文字消す」=「左3文字目から右側を取ってくる」ということですので、Mid(元の文字列, 2 + 1)で目的の文字列を作ることができます。

文字列の右側(末尾)をn文字削除する

文字列の右側をn文字削除するコードを解説します。例えば3文字を消したい場合は、「右から3文字消す」=「左から(文字数-3)文字取ってくる」ということですので、Left(元の文字列, Len(元の文字列) - 3)で目的の文字列を作ることができます。

文字列操作の汎用関数集

文字列操作でよく出てくる処理の汎用関数集を紹介します。例えば左から指定の文字まで取り出す処理を「産地 = Left文字列まで("愛媛産みかん", "産")」という関数で済ませて、コードを書きやすく&読みやすくするためにご利用ください。

Len関数は文字列長でなく変数の消費メモリを返すことがある

Len関数には、「String以外の変数を渡すと、変数のメモリ上の大きさを返す」といういらぬ仕様があります。Len関数がなぜか4を返す、文字列の切り抜きがうまくいかない、あたりにお悩みの方は、この落とし穴に落ちていないかご確認ください。

VALUE関数とVal関数(とCDbl関数)の違い

VBAの関数「Val関数」と、ワークシート関数「VALUE関数」の違いを解説します。とその前に、実はVALUEとValはほとんど違う関数です。ワークシートのVALUE関数と対応するVBAの関数は、Val関数ではなくCDbl関数ですので、それを念頭に解説をどうぞ。

Val関数は全角(日本語入力)の「1」を0に変換する

知らずに落ちると抜け出せなくなるVBAの落とし穴です。今回の罠は超単純です。Val("全角の1") ' ← 0が返ります。という罠です。皆さん気をつけましょう。他にも罠がたくさんあるので、Val関数は正直言うと使用禁止関数です。

文字列の中にある数字を抽出する関数

指定の文字列から数字だけを抜き出す汎用関数を紹介します。数値をすべて抽出する(123みかん456 ⇒ 123456)タイプと、最初に登場したものを抽出する(1,100円(税10%) ⇒ 1,100)タイプがありますので、目的にあった方をご覧ください。

選択セル範囲に丸数字を連番で入力するマクロ

選択したセル範囲に、丸数字を連番で入力するマクロを紹介します。簡単な表やグラフの入る資料・マニュアルなんかは、Wordで作るより、Excelで作ったほうが絶対楽です。このマクロをじゃんじゃん使って、サクサクExcel文書を作っていきましょう。

数値を丸数字①②③~に変換する

丸数字(1) = ①、丸数字(24) = ㉔ のように、丸数字(n)を①②…に変換する関数が「丸数字(n) = Chr(Asc("①") + n - 1)」です。お忙しい方は、ソースコードをコピーして、使い方のように呼び出すだけでOKです。コードをしっかり読みたい方は、解説をどうぞ。