■ 文字列操作、検索、比較、文字コード、書式
文字列操作をマスターしよう!
前回に引き続き文字列操作について解説します。
Instr、InstrRev関数
文字列の中から指定した文字列の見つかった位置を返します。"B"をつけることでバイトデータを扱うこともできます。戻り値は見つかった場合、見つかった文字列の位置を、見つからなかった場合"0"をそれぞれ返します。Instr関数は文字を前方から検索し、InstrRev関数は後方から検索します。
(例)
Debug.Print InStr("1234567890", "345")
Debug.Print InStr("1234567890", "333")
この例では、"3"、"0"が出力されます。
文字列の比較方法は、Option Compareステートメントを用いてモジュール全体で指定することが可能です。既定(省略した場合)ではBinaryモードでの比較になります。
Binaryモードでは大文字と小文字、半角と全角、ひらがなとカタカナが区別され、ASCIIコード順に比較が行われます。
Textモードを指定することで大文字と小文字、半角と全角、ひらがなとカタカナが区別されず、五十音順に比較が行われます。
Option Compareステートメントを使用した場合、そのモジュール全体で設定が有効になるので注意してください。
(例)
' Option Compareの指定なし(Binaryモードでの比較)
Debug.Print InStr("abcdef", "D")
この場合、"0"を出力します。("D"が見つからなかった)
' Option Compare Textの指定あり(モジュール宣言部にて行う、Textモードでの比較)
Debug.Print InStr("abcdef", "D")
この場合、"4"を出力します。("D"が見つかった)
モジュール全体で指定をしたくない場合は、Instr関数の第4引数で比較方法を指定することも可能です。指定をしない場合、Option Compareステートメントの設定を使用します。また第4引数を指定する場合、必ず第1引数で開始位置を指定する必要があります。
(例)
Debug.Print InStr(1, "abcdef", "D", vbTextCompare)
この場合、"4"を出力します。
Strcomp関数
文字列を比較した結果を返します。等しい場合は"0"を、第1引数が第2引数未満の場合は"-1"を、第1引数が第2引数を超える場合は"1"をそれぞれ返します。
(例)
Debug.Print StrComp(Range("A1"), Range("A2"))
この場合、セルA1とセルA2の内容が等しいとき"0"を出力します。比較方法についてはInstr関数を参照してください。
Like演算子
文字列の比較を行い、真または偽を返します。Like演算子の詳しい解説はこちらを参照してください。
※ 演算子について詳しく知ろう!
Chr、Asc関数
Chr関数は指定された文字コードの文字を返します。Asc関数は指定された文字の文字コードを返します。
(例)
Debug.Print Chr(65)
Debug.Print Asc("A")
この場合、Chr関数は"A"を、Asc関数は"65"をそれぞれ返します。
ちなみにChr(9)はTabを、Chr(10)はラインフィードを、Chr(13)はキャリッジリターンを表します。Chr(34)は " を表すので次のように使用することも可能です。
(例)
Debug.Print "Press ""Enter"" Button!"
Debug.Print "Press " & Chr(34) & "Enter" & Chr(34) & " Button!"
この場合、どちらも"Press "Enter" Button!"を出力します。
Format関数
文字列に書式を設定します。
(例)
Debug.Print Format(Now, "yyyy.mm.dd ddd hh:mm:ss")
Debug.Print Format(1234567890, "#,##0")
Debug.Print Format(1, "00000")
Debug.Print Format(1, "0.00%")
Debug.Print Format("ABC", "<")
Debug.Print Format("abc", ">")
Debug.Print Format("1234567890", "@@-@@@@-@@@@")
この場合、
"2000.01.01 Wed 12:00:00"
"1,234,567,890"
"00001"
"100.00%"
"abc"
"ABC"
"12-3456-7890"
等が、それぞれ出力されます。
Format関数の書式はたくさんあり、すべてを網羅することはできませんが、次に代表的な書式を紹介しておきます。
代表的なFormat関数の書式
| 日付関連 |
| Long Date |
[2000年1月1日]の形式で表示します |
| Medium Date |
[01・Apr・98]の形式で表示します |
| Short Date |
[98/11/11]の形式で表示します |
| / |
日付の区切り記号を表示します |
| d |
1〜31で日付を表示します |
| dd |
01〜31で日付を表示します |
| ddd |
曜日を英語の省略形で表示します(Sun〜Sat) |
| aaa |
曜日を日本語の省略形で表示します(日〜土) |
| dddd |
曜日を英語で表示します(Sunday〜Saturday) |
| aaaa |
曜日を日本語で表示します(日曜日〜土曜日) |
| w |
曜日を数値で表示します(1〜7) |
| ww |
その日が1年の何週目であるかを表示します(1〜53) |
| m |
1〜12で月を表示します |
| mm |
01〜12で月を表示します |
| mmm |
月の名前を省略形で表示します(Jan〜Dec) |
| mmmm |
月の名前を省略せずに表示します |
| q |
1年のうちどの四半期に属するかを表示します(1〜4) |
| g |
年号の頭文字を表示します(M,T,S,H) |
| gg |
年号の先頭の1文字を漢字で表示します(明,大,昭,平) |
| ggg |
年号を表示します(明治,大正,昭和,平成) |
| e |
和暦年を表示します(1〜99) |
| ee |
和暦年を2桁の数値で表示します(01〜99) |
| y |
日付を1月1日からの日数で表示します(1〜366) |
| yy |
西暦の最後の2桁を表示します(01〜99) |
| yyyy |
西暦を表示します(0100〜9999) |
| 時刻関連 |
| Long Time |
[12:00:00PM]の形式で表示します |
| Medium Time |
[12:00PM]の形式で表示します |
| Short Time |
[12:00]の形式で表示します |
| : |
時刻の区切り記号を表示します |
| h |
0〜23で時刻を表示します |
| hh |
00〜23で時刻を表示します |
| n |
0〜59で分を表示します |
| nn |
00〜59で分を表示します |
| s |
0〜59で秒を表示します |
| ss |
00〜59で秒を表示します |
| AM/PM |
大文字のAM,PMを付加して12時間制で時刻を表示します |
| am/pm |
小文字のam,pmを付加して12時間制で時刻を表示します |
| 数値関連 |
| 0 |
0が1桁に相当します。指定した桁に数値がない場合0が表示されます |
| # |
#が1桁に相当します。指定した桁に数値がない場合何も表示されません |
| , |
3桁カンマを挿入します |
| . |
小数点を挿入します |
| % |
数値をパーセント表示します |
| ¥¥ |
円記号をつけます |
| 文字列関連 |
| > |
大文字にします |
| < |
小文字にします |
| & |
1文字に相当します。対応する位置に文字がない場合は何も表示されず詰められます。右から左の順に埋められます。 |
| @ |
1文字に相当します。対応する位置に文字がない場合はスペースが表示されます。右から左の順に埋められます。 |
| !& |
&と同じですが、左から右の順に埋められます。 |
| !@ |
@と同じですが、左から右の順に埋められます。 |
以上で文字列操作の解説を終わります。
文字列操作は、さまざまなプログラムの中で使用されます。システムが日本語を扱う以上、文字列操作の習得は必須項目です。
今回のテクニックを応用すれば、ほとんどの場合の文字列操作に対応できると思います。
がんばってマスターしてください。
|