アクセス数
健康情報 ⇒ どこへ向かって・・・ ⇒ VBAトップ ⇒ 文字列を操作しよう
文字であっても、コンピュータの中では数値として捉えられています。
文字と数値の対応
Chr([文字コード(数値)])
例えば、
Chr(34) は「"(ダブルクォーテーション)」、
Chr(9) はタブ
Chr(10) はラインフィード文字
Chr(13) はキャリッジリターン
Chr(-32096) は「あ」
調べる方法は、
=Asc("あ")
とすれば、-32096が帰ってきますので分かります。
改行は、上に出てきた「ラインフィード」と「キャリッジリターン」の組み合わせで実現します。
VBAでは、これらが分かりやすいように組み込み定数として定義されています。
vbCrLf Chr(13) & Chr(10)
使い方例:strX = strA & vbcrlf & strB
⇒strAの内容
strBの内容
※Microsoft Excelのセル内での改行(文字列の途中で改行[Alt]+[Enter])した場合には、ラインフィード(Chr(10))のみが埋め込まれます。vbCrLf (chr(13) & chr(10))を埋め込むと、Office2000では表示がおかしかったのですが、OfficeXp(Excel2002)では普通に表示されるようです。
どの改行文字が含まれているか実験
(ダブルクリック時に「A1」の内容 「aaa 改行 bbb」 の文字を検査)
Private Sub Worksheet_BeforeDoubleClick(ByVal
Target As Range, Cancel As Boolean)
MsgBox ("vbCr=" & InStr(1, Range("a1"), vbCr, vbBinaryCompare) & vbCrLf & "vbLf="
& InStr(1, Range("a1"), vbLf, vbBinaryCompare))
End Sub
結果⇒
Excel2000では
aaa・ bbb |
|
このような感じに(@遥か昔)
他にも組み込み定数としていくつかあります。
vbBack Chr(8)
vbCr Chr(13)
vbLf Chr(10)
vbCrLf Chr(13) & Chr(10)
vbTab Chr(9)
vbVerticalTab Chr(11)
vbFormFeed Chr(12)
vbNewLine Chr(13)
vbNullChar nullキャラクター Chr(0)
vbNullString null文字 文字列がnullポインタを指しているかどうか(初期化状態の判定)
vbObjectError オブジェクトエラー
※Visual Basic Editor画面より、
⇒表示
⇒オブジェクトブラウザ
⇒ライブラリ=VBA、クラス=Constants で上のメンバが表示されます。
strResult = "文字列a" & "文字列b"
文字列は「"(ダブルクォーテーション)」で囲みます。
その文字列に「"(ダブルクォーテーション)」を含ませたい場合には「"""」と三つ並べます。
strResult = "ダブルクォーテーション表示⇒" & """
あるいは、「"」の文字コード(34)を使います。
strResult = "ダブルクォーテーション表示⇒" & Chr(34)
間に変数を入れることもできます。
strResult = "変数 i の値は「" & i & "」です。"
変数「i」が10の場合⇒"変数 i の値は「10」です。
計算結果も結合対照になります。
strResult = 1 + 1 & "個"
strResult ⇒ 2個
※逆に文字列としての数字「1(全角)」を「1(英数)」に変換する場合には、
Dim strX as String
Dim intResult as Integer
strX = "1"
intResult = CInt(strX) + 1
Join()関数を使います
Range("a1") = Join(Array("a", "b", "c", "d"), ",")
このようにすれば、CSV形式の文字列が作成されます。(第二引数に「,」を指定しているため)
結果⇒a,b,c,d
※Array(・・・)⇒配列。普通に Dim ar(10) as Integer と定義したものでも同様に使えます。
InStr()関数
Left() LeftB()
Right() RightB()
Mid() MidB()
InStr()関数などと組み合わせることにより、高度な抽出が可能となります。
「B」が付くものは、バイト(Byte)単位で抜き出します。
Replace()関数を使います。
Dim strX As String
strX = "今日は暖かい"
Range("a1") = Replace(strX, "暖か", "寒")
結果⇒今日は寒い