■ 文字列操作、検索、比較、文字コード、書式
文字列操作をマスターしよう!
前回に引き続き文字列操作について解説します。
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文字に相当します。対応する位置に文字がない場合はスペースが表示されます。右から左の順に埋められます。 |
!& |
&と同じですが、左から右の順に埋められます。 |
!@ |
@と同じですが、左から右の順に埋められます。 |
以上で文字列操作の解説を終わります。
文字列操作は、さまざまなプログラムの中で使用されます。システムが日本語を扱う以上、文字列操作の習得は必須項目です。
今回のテクニックを応用すれば、ほとんどの場合の文字列操作に対応できると思います。
がんばってマスターしてください。
|