次の方法で共有


文字列を変換する

Microsoft Office 2000/Visual Basic プログラマーズ ガイド   

文字列中のテキストの大文字と小文字を切り替えるには、VBA StrConv 関数を使用します。VBA StrConv 関数は文字列を小文字、大文字、またはイニシャルの大文字のように状況に応じて適切に変換します。VBA StrConv 関数は文字列、および文字列の変換方法を指定する定数を受け取ります。たとえば、次のコードは文字列の大文字と小文字を正しく変換します。

  Debug.Print StrConv("washington, oregon, and california", vbProperCase)

このコードを実行すると、[イミディエイト] ウィンドウに次のテキストが表示されます。

  Washington, Oregon, And California

メモ   StrConv 関数は、その他の文字列の変換を実行することもできます。たとえば、文字列を Unicode と ANSI 間で変換することが可能です。StrConv 関数の詳細については、Visual Basic リファレンス ヘルプの [キーワード] タブ "StrConv 関数" を選択して、関連するトピックを参照してください。

ただし、"washington"、"oregon"、"california" などと同時に "and" も大文字に変換される可能性があります。"and" などの小単語は、文法上の規則では文頭でない限りは大文字にはなりません。VBA では、このような単語の変換を状況によって判断する機能がないため、すべてが変換されます。

VBA が小単語を省略するように設定するには、該当の単語をファイルまたは表で定義し、各単語を変換するときにファイルまたは表に対する比較を実行します。次に示すプロシージャの ConvertToProperCase は、文字列を取得して個別の単語に分割し、各単語をテキスト ファイルのファイルと比較して小単語以外の単語を大文字または小文字に正しく区別して変換します。

ConvertToProperCase プロシージャは GetMinorWords という別のプロシージャを呼び出します。このプロシージャは、小単語のリストが含まれるテキスト ファイルを読み込み、各単語が含まれる文字列の配列を返します。次に、ConvertToProperCase プロシージャは Filter 関数を使用して、文字列内で変換の対象となる単語を、小単語の配列に含まれる単語のリストと比較します。単語がリストに含まれない場合は、大文字と小文字のいずれか適切な方に変換されます。リストに含まれる単語は小文字に変換されます。

  Function ConvertToProperCase(strText As String) As String
   ' この関数は文字列を取得し、小単語以外の単語を
   ' 大文字と小文字を区別して変換します。

   Dim astrText()       As String
   Dim astrWords()      As String
   Dim astrMatches()    As String
   Dim lngCount         As Long
   
   ' 小単語が含まれる配列を返します。
   astrWords = GetMinorWords
   
   ' 文字列を配列に分割します。
   astrText = Split(strText)

   ' 渡された文字列を、小単語の配列
   ' と照らし合わせて確認します。
   For lngCount = LBound(astrText) To UBound(astrText)
      ' Filter 関数は、一致した単語が含まれる配列を返します。
      ' 一致した単語が見つからなかった場合、配列の上限が下限を下回ることを示します。
      ' Filter 関数で返された結果を、文字列型 (String) の配列に保管し、
      ' 上限と下限を比較します。
      astrMatches = Filter(astrWords, astrText(lngCount))
      If UBound(astrMatches) < Lbound(astrMatches) Then
         ' 文字列の単語が、小単語の配列と一致しない場合は、
         ' 単語を大文字と小文字に区別して変換します。
         astrText(lngCount) = StrConv(astrText(lngCount), vbProperCase)
      Else
         ' 一致する場合は、小文字に変換します。
         astrText(lngCount) = StrConv(astrText(lngCount), vbLowerCase)
      End If
   Next

   ' 文字列に含めます。
   ConvertToProperCase = Join(astrText)
End Function

このプロシージャは、Office 2000 Developer CD-ROM の ODETools\V9\Samples\ODETools\V9\Samples\OPG\Samples\CH07 サブフォルダに含まれる VBA.mdb の modStrings モジュールにあります。

ConvertToProperCase プロシージャは、GetMinorWords プロシージャを呼び出します。GetMinorWords プロシージャは小単語のリストが含まれるテキスト ファイルを開き、リストのすべての単語が含まれる文字列を取得して配列に分割し、その配列を返します。GetMinorWords プロシージャは、GetLikelyDelimiter という別のプロシージャを呼び出します。GetLikelyDelimiter プロシージャは、テキスト ファイル内で区切り文字と見なされる最初の文字を検索します。いずれのプロシージャも、小単語のリストが含まれるテキスト ファイルと同様に、Office 2000 Developer CD-ROM の ODETools\V9\Samples\ODETools\V9\Samples\OPG\Samples\CH07 サブフォルダに含まれる VBA.mdb の modStrings モジュールにあります。

メモ   ConvertToProperCase プロシージャを呼び出すためには、Microsoft Scripting Runtime オブジェクト ライブラリへの参照を設定する必要があります。オブジェクト ライブラリの詳細については、この章の「ファイルを使用する」を参照してください。