VBA 文字列操作関数と Operaトー
⚡ スマートサマリー
VBA 文字列操作関数と Opera組み合わせ、測定、そしてtracExcelマクロ内のテキストについて説明します。このページでは、連結演算子、Left、Right、Mid、Len、InStr関数、分割と結合、および文字列コードを破損させる最も一般的なエラーについて説明します。

VBA文字列 Operaトー
文字列データは、数字、文字、記号で構成されるデータを保持するために使用されます。「Jul-2015」は文字列データの例です。これは、
- 登場キャラクター(XNUMX月)
- 記号(-)
- Numbers (2015)
文字列演算子は、文字列データを操作するために使用されます。たとえば、月と年の最初の 2015 文字から「Jul-3」という値を連結できます。
次の表は、連結 VBA 文字列演算子を示しています。
| S / N | Operator | 詳細説明 | 例: | 出力 |
|---|---|---|---|---|
| 1 | & | 連結: この演算子は文字列を連結するために使用されます | "ジョン・ドウ" | ジョン・ドウ |
サンプルソース Code
MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"
上記のコードを実行すると、次の結果が生成されます。
アンパサンドはテキストをつなぐ記号として使われる唯一のものではなく、数字が絡む場合には両者の違いが重要になる。
文字列連結における「&」と「+」の違い
VBAでは、2つのテキスト値の間にアンパサンドとプラス記号の両方が使用できます。そのため、初心者はこれらを同じものとして扱うことがよくあります。しかし、オペランドの一方が数値または空の値になると、動作が異なり、安全に使用できるのはどちらか一方のみです。
| 行動 | &(アンパサンド) | +(プラス) |
|---|---|---|
| 2つのテキスト値 | 彼らに加わる:「Guru「99」が復活 Guru99 | 彼らに加わる:「Guru「+ 99」が戻ってきます Guru99 |
| テキストと数字 | 数値をテキストに変換します。「年齢」&30は「年齢30」を返します。 | 型不一致エラーが発生します |
| 2つの数字列 | 「10」と「5」は105を返します | 「10」+「5」は加算されて15を返す場合があります |
| ヌル値 | Nullを空文字列として扱います | Nullを返し、結果全体を破棄します。 |
💡ヒント: 連結には必ずアンパサンドを使用し、プラス記号は 算術演算アンパサンドの前後にスペースを入れてください。Total& と書くと、VBA では Long 型の宣言文字として読み取られます。
VBA 文字列操作関数
VBA の文字列操作は重要な要素です。 マクロプログラミングのための Excel VBA および文字列操作。Excel には、次のようなさまざまな種類の VBA 文字列操作関数が用意されています。
- 左派: は、trac文字列の左側からt文字
- 右派: は、trac文字列の右側からt文字
- ミッド: は、trac文字列の中央から部分文字列を抽出する
- レン: 文字列の長さを調べるために使用されます
- InStr: は、文字列内の部分文字列の位置を見つけるために使用されます。
- トリム: は文字列の両端からスペースを削除するために使用されます
- 交換する: は、ある部分文字列のすべての出現箇所を別の部分文字列に置き換えるために使用されます。
- UCase / LCase: は文字列を大文字または小文字に変換するために使用されます
以下の表は、各関数の構文と具体的な使用例を示しています。この表を参考に、パターンをそのままマクロにコピーしてください。
| 演算 | 構文 | 例: | 出力 |
|---|---|---|---|
| 左派 | 左(文字列、長さ) | 左(「2015年7月」、3) | 7月 |
| 右派 | 右(文字列、長さ) | 右(「2015年7月」、4) | 2015 |
| ミッド | 中間(文字列、開始位置、長さ) | Mid(“Jul-2015”, 5, 4) | 2015 |
| レン | 長さ(文字列) | レン(「2015年7月」) | 8 |
| InStr | InStr(開始文字列、文字列、部分文字列) | InStr(1, “2015 年 7 月”, “-”) | 4 |
| トリム | トリム(文字列) | トリム(" Guru99”) | Guru99 |
| 交換する | 置換(文字列、検索、置換) | Replace(“2015 年 7 月”, “-”, “/”) | 2015月XNUMX日 |
| UCase | UCase(文字列) | UCase(“guru99”) | 達人99 |
以下のマクロは、これらの関数のいくつかを組み合わせて、日付ラベルを構成要素から再構築します。
Sub StringFunctionsDemo() Dim Source As String Dim MonthPart As String Dim YearPart As String Source = "July-2015" ' Take the first three characters MonthPart = Left(Source, 3) ' Take the last four characters YearPart = Right(Source, 4) MsgBox MonthPart & "-" & YearPart, vbOKOnly, "String Functions" End Sub
マクロを実行すると「Jul-2015」と表示されます。各関数は新しい値を返し、元の文字列は変更されないため、結果を単一の式に安全に組み合わせることができます。
これらの関数はすべて一度に1つの文字列を処理します。1つの値にリスト全体が含まれている場合は、別の2つの関数の方が適しています。
VBAで文字列を分割および結合する方法
Excelに貼り付けられるデータは、多くの場合、「Pepsi,Coke,Fanta,Juice」のように、各項目間に区切り文字が入った長い値として表示されます。これをMid関数やInStr関数で読み取るのは時間がかかり、不安定です。VBAには、まさにこの作業に適した関数セットが用意されています。
スプリット 区切り文字で区切られた文字列を受け取り、1つの項目につき1つの要素を持つ0ベースの配列を返します。 加入団体 Join は逆の動作をします。配列を受け取り、要素間に区切り文字を含む単一の文字列を返します。Join は配列に対して機能し、2 つの別々の文字列に対しては機能しないことに注意してください。
Sub SplitAndJoinDemo() Dim Source As String Dim Items() As String Dim i As Long Source = "Pepsi,Coke,Fanta,Juice" ' Break the value into an array on every comma Items = Split(Source, ",") For i = LBound(Items) To UBound(Items) Sheet1.Cells(i + 1, 1).Value = Items(i) Next i ' Rebuild the list with a different separator MsgBox Join(Items, " | "), vbOKOnly, "Joined List" End Sub
このループは各ドリンクをワークシートの行に書き込み、メッセージボックスには「ペプシ|コーク|ファンタ|ジュース」と表示されます。このパターンを本番コードで確実に使用するには、次の3つのポイントがあります。
- ゼロベースの結果: Split関数はOption Baseの設定値に関わらず、常に0から始まる番号の配列を返すため、固定番号ではなくLBoundとUBoundを使用してループを制御してください。
- String() として宣言します: 結果を動的な文字列配列に代入してください。最初に固定サイズを宣言するとコンパイルエラーが発生します。
- 入力が空です: 空の文字列を分割すると要素のない配列が返されるため、Items(0) を読み取る前に UBound を使用してテストしてください。
たとえ正しい関数を選択したとしても、文字列コードはごく少数の予測可能な方法で失敗する。
VBAでよくある文字列エラーとその修正方法
Excel VBAにおける文字列関連のバグのほとんどは、限られた原因から発生します。症状を認識できれば、デバッグ作業の時間を短縮できます。
- 連結時の型不一致: テキストと数字の間にプラス記号が使用されています。プラス記号をアンパサンドに置き換えると、数字が自動的に変換されます。
- InStr は 0 を返します: 部分文字列が見つかりませんでした。InStr は失敗した場合に -1 ではなく 0 を返すため、結果を Mid に渡す前に 0 より大きい値かどうかをテストしてください。
- Mid または Left での無効なプロシージャ呼び出し: 要求された長さが負の値であるか、開始位置が 1 未満です。長さが文字列を超えないように、Len 関数を使用して呼び出しを保護してください。
- 一致するはずなのに一致しない比較: インポートされたデータに末尾の空白が含まれていると、等価性が損なわれます。両側をTrimで囲み、大文字小文字を区別しない場合はStrCompを使用してください。
- 数値に変換されないテキスト: 「1,200」のような値は、区切り文字が含まれているため、算術演算で正しく動作しません。CLng で変換する前に、Replace 関数で区切り文字を削除してください。
上記のコードを含む Excel をダウンロード
上記のExcelファイルをダウンロードしてください。 Code


