VBA 文字列操作関数と Operaトー

⚡ スマートサマリー

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

  • 🔤 文字列データ: 文字、記号、数字から構成される値。例えば、「Jul-2015」というテキストなど。
  • 連結 Operaトール: アンパサンドは2つの文字列を結合するので、「John 」&「Doe」は「John Doe」を返します。
  • ✂️ Extrac機能: Left、Right、Midは、値の先頭、末尾、または中央から部分文字列を抽出します。
  • 測定機能: len関数は文字数を数え、InStr関数は部分文字列の開始位置を返します。
  • 🧩 分割と結合: splitは区切り文字で区切られた文字列を配列に分割し、joinは配列を単一の文字列に再構築します。
  • ⚠️ 一般的なエラー: 型の不一致、InStrがゼロを返すこと、末尾の空白などが、比較失敗の主な原因です。

VBA 文字列操作関数と Operaトー

VBA文字列 Operaトー

文字列データは、数字、文字、記号で構成されるデータを保持するために使用されます。「Jul-2015」は文字列データの例です。これは、

  • 登場キャラクター(XNUMX月)
  • 記号(-)
  • Numbers (2015)

文字列演算子は、文字列データを操作するために使用されます。たとえば、月と年の最初の 2015 文字から「Jul-3」という値を連結できます。

次の表は、連結 VBA 文字列演算子を示しています。

S / N Operator 詳細説明 例: 出力
1 & 連結: この演算子は文字列を連結するために使用されます "ジョン・ドウ" ジョン・ドウ

サンプルソース Code

VBA文字列 Operators 例のソース Code

MsgBox "John " & "Doe", vbOKOnly, "Concatenate Operator"

上記のコードを実行すると、次の結果が生成されます。

VBA文字列 Operators 例のソース Code

アンパサンドはテキストをつなぐ記号として使われる唯一のものではなく、数字が絡む場合には両者の違いが重要になる。

文字列連結における「&」と「+」の違い

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

よくあるご質問

可変長文字列は最大で約20億文字、固定長文字列は最大で6万5400文字まで格納できます。しかし、ワークシートのセルには3万2767文字しか格納できないため、それより長い値はシートに書き込まれる際に切り捨てられます。

デフォルトでは、等号は大文字と小文字を区別して比較します。大文字と小文字を区別しない結果を得るには、StrComp(a, b, vbTextCompare) を使用するか、モジュールの先頭に Option Compare Text を配置して、モジュール全体のデフォルト設定を変更してください。

アンパサンドは結合前にすべてのオペランドをテキストに変換するため、10 & 5 は文字列 105 を返します。値を数値のままにして最初に加算し、結果をメッセージ内に表示する必要がある場合は連結してください。

はい。入力と希望する出力について説明してください。例:trac最初のダッシュの前のコードを入力すると、AIアシスタントがLeftとInStrの式を返します。ダッシュが欠落しているなどの例外的なケースでテストしてください。

はい。Mid の中に InStr を含むようなネストされた式を貼り付けると、AI アシスタントがそれをステップごとに分解し、各引数に名前を付け、InStr がゼロを返して呼び出しが失敗した場合にフラグを立てます。