|
|
本章では、関数の文法や使い方についてコードサンプルを示しながら説明しています。 |
|
|
|
InStr関数は、string1の中で、string2が存在する位置を返します。
string2がstring1の中に存在しないときInStr関数は0を返します。
long = InStr([start, ]string1, string2[, compare])
※InStr 関数は、compare 引数を指定しないと、アルファベットの大文字小文字を区別します。
大文字小文字の区別なく検索したい場合には、compare引数、"vbTextCompare" 又は "1"
を指定して、
テキスト・モードを使います。
ex.
セル範囲A1:B100内で「"aaa"という文字列が含まれる」セルの背景を赤色にします
Dim str
For Each str In Range("A1:B100")
If InStr(str.Value, "aaa") > 0 Then
str.Interior.ColorIndex = 3
End If
Next str
セル内の文字列を比較する(InStrRev)
long = InStrRev(string1, string2[,start[,compare]])
InstrRev関数は、文字列 の中から指定された文字列 を最後の文字位置から検索を開始し、最初に見つかった文字位置 (先頭からその位置までの文字数)
を返します
long = InStrRev([start, ]string1, string2[, compare])
|
|
|
|
|
String1とString2の2つの文字列を引数Compareで指定した比較モードで比較を行い、その結果を返します
StrComp(String1, String2, Compare)
ex.
セルAとBの文字列を比較し、等しい場合セルの背景を赤色にする。
Dim int
For int = 1 To 100
If IStrComp(Cells(i, 1), Cells(i, 2), vbTextCompare = 0 Then
Cells(i, 1).Interior.ColorIndex = 3
End If
Next |
|
|
|
|
|
IsDate関数 値を日付型に変換可能かどうかをチェック
IsNumeric関数 値を数値として評価できるかどうかをチェックする
IsObject関数 識別子がオブジェクトかどうかをチェックする
IsEmpty関数 値がEmptyかどうかを調べる
IsError関数 式がエラー値を持つかをチェック
IsMissing関数 省略可能な変数がプロシージャに渡されたかをチェック
IsNull関数 式にNull値が含まれているかをチェック
IsArray関数 変数が配列かどうかをチェック
ex.
If IsDate(変数) = False Then 日付形式のチェック
If IsNumeric(変数) = False Then 数値形式のチェック |
|
|
|
|
|
Mid(String,Start,[Length])
ex.
先頭から4文字目が「県」という字かどうかを判断します
IF(MID(A1,4,1)="県" Then
|
|
|
|
|
|
Left(string, length)
ex.
VBAを表示します
MsgBox Left("VBA Expert", 3)
|
|
|
|
|
|
Rightt(string, length)
ex.
Expertを表示します
MsgBox Right("VBA Expert", 6)
|
|
|
|
|
|
Len(string | varname)
ex.
If Len(DataWord) >5
|
|
|
|
|
|
MyDouble = 437.324 ' 変数 MyDouble は倍精度浮動小数点数型.
MyString = CStr(MyDouble) ' 変数 MyString には "437.324"が入る
|
|
|
|
|
|
Abs(number)
ex.
If Abs(-100) = 100 |
|
|
|
|
|
UCase(string)
小文字だけが大文字に変換されます. |
|
|
|
|
|
StrConv(string,定数)
vbUpperCase 1 大文字に変換
vbLowerCase 2 小文字に変換
vbProperCase 3 各単語の先頭の文字を大文字に変換
vbWide 4 半角文字を全角文字に変換
vbNarrow 8 全角文字を半角文字に変換
vbKatakana 16 ひらがなをカタカナに変換
vbHiragana 32 カタカナをひらがなに変換
vbUnicode 64 システム既定のコードページを使って文字列をUnicodeに変換
vbFromUnicode 128 文字列をUnicodeからシステム既定のコードページに変換
StrConv("あいうえお", vbFromUnicode).とすれば、UNICODE → Shift JIS に変換します。
VBA は内部的に UNICODEを使用していています。 |
|
|
|
|
|
Asc(文字) 文字をASCIIコードに変換する
Chr(コード) ASCIIコードを文字に変換する
CR = Chr(13) '改行コード for Macintosh
LF = Chr(10) '改行コード for Unix/Linux、UTF-8他
CRLF = Chr(13) & Chr(10) '改行コード for Windows
ChrW(コード) Unicode を文字に変換する |
|
|
|
|
|
Val(string)
数値に変換できない文字を読み込んだ時点で変換を中止します |
|
|
|
|
|
Str(number) |
|
|
|
|
|
LTrim(string) 先頭のスペース(全角、半角)を取り除く
RTrim(string) 末尾のスペース(全角、半角)を取り除く
Trim(string) 先頭と末尾のスペース(全角、半角)を取り除く |
|
|
|
|
|
指定された文字列の一部を、別の文字列で指定された回数分で置換した文字列を返します
Replace(expression, find, replace[, start[, count[, compare]]])
定数
vbUseCompareOption -1 OptionCompareステートメントの設定を使用して比較
vbBinaryCompare 0 バイナリモードで比較(大文字/小文字 半角/全角 ひらがな/カタカナを区別して比較
vbTextCompare 1 テキストモードで比較(大文字/小文字 半角/全角 ひらがな/カタカナを区別されず五十音で比較
vbDatabaseCompare 2 Accessのデータベースの設定を使用して比較 |
|
|
|
|
|
String(number, character)
number 長整数型 (Long) の値を指定します。文字をいくつ並べるのかを指定する。
character バリアント型 (Variant) の値を指定します。文字の文字コード、または文字列式を指定する。
この文字列の先頭文字を number 回繰り返したものを返します。
'str_statementの頭にゼロを埋めます(3桁)
n=3
m = Len(str_statement)
If m ,< n Then
f = String(n - m, "0") & str_statement |
|
|
|
|
|
Date 関数は、時刻のない現在の日付を返します。
Dim Date_1 as Date
Msgbox Date '04/04/2006
Msgbox Time '11:57:33
その他の関数
現在の日時、時刻を返す
Now
定義済みの書式を使って日付の書式を設定
FormatDateTime(date,format)
日付から日を取り出す
Day(Date)
日付から月を取り出す
Month(Date)
日付から年を取り出す
Year(Date)
日付から時間を取り出す
Hour(Time)
日付から分を取り出す
Minute(Time)
日付から秒を取り出す
Second(Time)
日、月、年の引数を受け取り、再結合された日付を含む日付を返す
DateSerial(day,month,year)
その日付の曜日を示す定数を返す
Weekday(date)
(vbMonday、vbTuesday、vbWednesday、vbThursday、vbFriday)
その日付の曜日を返す
WeekdayName(Weekday(Date)
日付の加算
DateAdd("yyyy", 1, dteThisYear)
2つの日付の間のインターバルを調べる
DateDiff("d", dteDate1,dteDate2) |
|
|
|
|
|
文字列を区切り文字で分割し、各要素を文字列型の1次元配列に格納して返します。
Dim i As Integer
Dim strDispStr As String
Dim strString As String
Dim varData As Variant
strDispStr = ""
strString = "5,3,1,7,4,6,2"
varData = Split(strString, ",")
For i = 0 To UBound(varData)
strDispStr = strDispStr &
varData(i) & vbCrLf
Next i
MsgBox strDispStr |
|
|
|
|
|
'現在のシステム日付が2005/11/21の場合
dtToday=Date
Debug.Print Format(dtToday,"yyyymmdd")
'20051121を返す
Debug.Print Format(dtToday,"yyyy/mm/dd")
'2005/11/21を返す
lngData=0.7
Debug.Print Format(lngData,"0.00%")
'70.00%を返す
lngData=70
Debug.Print Format(lngData,"000")
'070を返す
|
|
|
|
|
|
Sub 桁数を揃えながら文字列を連結する()
Dim I, Lastgyo As Integer
Const n As Integer = 2 '桁数
'最終行を求める
Sheets(1).Activate
Cells(16384, 1).Select
Lastgyo = Range("A1").End(xlDown).Row
'桁数を揃えながら文字列を連結する
For I = 1 To Lastgyo
If Len(Cells(I, 1)) < n Then
Cells(I, 1) = "'" & String(n - Len(Cells(I, 1)), "0")
& Cells(I, 1)
End If
If Len(Cells(I, 2)) < n Then
Cells(I, 2) = "'" & String(n - Len(Cells(I, 2)), "0") & Cells(I, 2)
End If
If Len(Cells(I, 3)) < n Then
Cells(I, 3) = "'" & String(n - Len(Cells(I, 3)), "0") & Cells(I, 3)
End If
Cells(I, 1) = "'" & Cells(I, 1) & Cells(I, 2) &
Cells(I, 3) & Cells(I, 4)
Next
End Sub |
|
|
|
|
文字列関数を使用した例
Sub a()
'list_a(50バイト)内にある "ABC" の数をカウントします。
Const list_a As String = "XXXABCXXXXXABCXXXXXABCXXXXXXABCXXXXXXXXXABCXXXXABC"
Dim con As Integer '回数カウント
Dim a As Integer 'ABCのポジション
Dim list_a_temp As String
list_a_temp = list_a
a = InStr(list_a_temp, "ABC")
While a > 0
cnt = cnt + 1
list_a_temp = Mid(list_a_temp, a + 3, Len(list_a) - a - 2)
a = InStr(list_a_temp, "ABC")
Wend
MsgBox ("""ABC""は " & cnt & "個ありました")
End Sub |
|
|
|
|
|
Dim strDATA As String
Dim numDATA As String
strDATA = "生年月日 - 75|Y"
Do While Len(strDATA)
If strDATA Like "[0-9]*" Then
numDATA = Val(strDATA)
Exit Do
End If
strDATA = Mid$(strDATA, 2)
Loop
Debug.Print numDATA |
|
|
|
|
Dim AAA As Variant
min = LBound(AAA )
'配列AAAの最小インデックス番号
max = UBound(AAA )
'配列AAAの最大インデックス番号 |
|
|
|
|
|
|
|
|
|
|
参考サイトへジャンプ |
|
|
|