ラベル ExcelVBA-関数 の投稿を表示しています。 すべての投稿を表示
ラベル ExcelVBA-関数 の投稿を表示しています。 すべての投稿を表示

2011年12月24日土曜日

[ExcelVBA] Switch関数


■構文
Switch(expr-1, value-1[, expr-2, value-2 ... [, expr-n,value-n]])

■説明
式と値を1セットのリストを引数として渡し、最初に真となった式に関連づけられている値を返します。
真となるものがない時はNullを返します。
第一引数:式
第二引数:値

■サンプルコード
Option Explicit

Sub SampleCode()
    Dim Score As Integer

    Score = 70
    Debug.Print Switch(80 < Score, "優", 40 < Score, "良", 0 <= Score, "可") '良
    
    Score = -2
    Debug.Print Switch(80 < Score, "優", 40 < Score, "良", 0 <= Score, "可") 'Null
End Sub

[ExcelVBA] Split関数


■構文
Split(expression[, delimiter[, limit[, compare]]])

■説明
区切り文字を含む文字列を受け取り1次元配列を返す
第一引数:区切り文字を含む文字列を指定
第二引数:(省略可能)区切り文字を指定。省略した場合スペースが使用されます。
第三引数:(省略可能)返す配列の要素数を指定。-1を指定するとすべての文字列を含んだ配列を返す。
第四引数:(省略可能)文字列比較の比較モードを指定。省略時、Option Compareステートメントの設定にしたがいます。
定数説明
vbUseCompareOption-1Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare0バイナリ モードの比較を行います。
vbTextCompare1テキスト モードの比較を行います。

■サンプルコード
Option Explicit

Sub SampleCode()
    Dim str As String, result As Variant
    
    str = "a,b,c"
    result = Split(str, ",") 'aとbとcの3要素をもつ配列
    
    str = "1 2 3"
    result = Split(str) '1と2と3の3要素をもつ配列
    
    str = "abcde"
    result = Split(str, "") 'abcdeの1要素をもつ配列
End Sub

2011年12月23日金曜日

[ExcelVBA] Shell関数


■構文
Shell(pathname[,windowstyle])

■説明
他のアプリケーションを起動する。実行が完了するとプロセスIDを返す。ただし、問題が発生した場合は0を返す。
第一引数:アプリケーションのパス。
第二引数:(省略可能)実行するプログラムのウィンドウ形式に対応する数字を指定。省略時、フォーカスを持った状態で最小化となる。
定数内容
vbHide0フォーカス○、非表示
vbNormalFocus1フォーカス○、元のサイズと位置に復元
vbMinimizedFocus2フォーカス○、最小化
vbMaximizedFocus3フォーカス○、最大化
vbNormalNoFocus4フォーカス×、元のサイズと位置に復元
vbMinimiziedNoFocus6フォーカス×、最小化

■サンプルコード
Option Explicit

Sub SampleCode()
    'メモ帳を実行(パスが通っているため、アプリ名だけで実行できる)
    Debug.Print Shell("notepad.exe", vbNormalFocus)
    
    '電卓を実行(パスが通っているため、アプリ名だけで実行できる)
    Debug.Print Shell("calc.exe", vbNormalFocus)
    
    'pdfを開く(パスが通っていないため、フルパスを指定。ファイルを開くためアプリの引数にファイルパスを指定)
    Debug.Print Shell("C:\Program Files\Adobe\Reader 9.0\Reader\AcroRd32.exe C:\test.pdf")
End Sub

2011年12月11日日曜日

[ExcelVBA] VarType関数


■構文
VarType(varname)

■説明
変数の内部処理形式を表す整数型 (Integer) の値を返します。
第一引数:変数を指定します。

戻り値
定数内容
vbEmpty0Empty 値 (未初期化)
vbNull1Null 値 (無効な値)
vbInteger2整数型 (Integer)
vbLong3長整数型 (Long)
vbSingle4単精度浮動小数点数型 (Single)
vbDouble5倍精度浮動小数点数型 (Double)
vbCurrency6通貨型 (Currency)
vbDate7日付型 (Date)
vbString8文字列型 (String)
vbObject9オブジェクト
vbError10エラー値
vbBoolean11ブール型 (Boolean)
vbVariant12バリアント型 (Variant) (バリアント型配列にのみ使用)
vbDataObject13非OLE オートメーション オブジェクト
vbDecimal1410 進数型
vbByte17バイト型 (Byte)
vbUserDefinedType36ユーザー定義型を含むバリアント型
vbArray8192配列



■サンプルコード
Option Explicit

Sub SampleCode()
    '■Empty値と判定するケース
    Dim var0 As Variant
    Debug.Print VarType(var0) '0
        
        '注:値を入れたらその値の型に判定されます
        var0 = 123
        Debug.Print VarType(var0) '2
    
    
    '■Null値と判定するケース
    Dim var1 As Variant
    var1 = Switch(False, "test") 'switch関数で真にならずNullを返す
    Debug.Print VarType(var1) '1
    
        '注:vbNullは長整数型の1と同等のため3を返します。
        Debug.Print VarType(vbNull)
    
    
    '■整数型と判定するケース
    Dim var2 As Integer
    Debug.Print VarType(var2) '2
    Debug.Print VarType(-100)  '2
    Debug.Print VarType(32767) '2  32767まで整数型の範囲なので2を返す

    
    '■長整数型と判定するケース
    Dim var3 As Long
    Debug.Print VarType(var3) '3
    Debug.Print VarType(32768) '3  32768以上は長整数型の範囲
    
    
    '■単精度浮動小数点数型と判定するケース
    Dim var4 As Single
    Debug.Print VarType(var4) '4
    
    
    '■倍精度浮動小数点数型と判定するケース
    Dim var5 As Double
    Debug.Print VarType(var5) '5
    Debug.Print VarType(1.1) '5


    '■通貨型と判定するケース
    Dim var6 As Currency
    Debug.Print VarType(var6) '6
    
    
    '■日付型と判定するケース
    Dim var7 As Date
    Debug.Print VarType(var7) '7
    
    
    '■文字列型と判定するケース
    Dim var8 As String
    Debug.Print VarType(var8) '8
        
        '注:改行コードやタブといったものも文字列型と判定されます
        Debug.Print VarType(vbCrLf) '8
        Debug.Print VarType(vbTab) '8
    
    
    '■オブジェクトと判定するケース
    Dim var9 As Object
    Debug.Print VarType(var9) '9
    
    Dim SelfClass As New TestClass '自作のTestClass
    Debug.Print VarType(SelfClass) '9
    
    
    '■ブール型と判定するケース
    Dim var11 As Boolean
    Debug.Print VarType(var11) '11
    Debug.Print VarType(True) '11
    Debug.Print VarType(False) '11
    
    
    '■バリアント型と判定するケース(バリアント型の配列にのみ使用)
    Dim var8204() As Variant
    Debug.Print VarType(var8204)
    
    
    '■10新数方と判定するケース
    Dim var14 As Variant
    var14 = CDec(123)
    Debug.Print VarType(var14)
    
    
    '■バイト型と判定するケース
    Dim var17 As Byte
    Debug.Print VarType(var17) '17
    

    '■配列と判定するケース
    Dim var8200(3) As String
    Debug.Print VarType(var8200) '8200(String:8 + 配列:8192)
End Sub

[ExcelVBA] StrComp関数


■構文
StrComp(string1, string2[, compare])

■説明
文字列の比較を行い結果を返します。
第一引数:比較対象の文字列を指定。
第二引数:比較対象の文字列を指定。
第三引数:(省略可能)文字列比較の比較モードを指定。省略時、Option Compareステートメントの設定にしたがいます。
定数説明
vbUseCompareOption-1Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare0バイナリ モードの比較を行います。
vbTextCompare1テキスト モードの比較を行います。

戻り値
内容戻り値
string1 は string2 より小さい-1
string1 と string2 は等しい0
string1 は string2 より大きい1
String1 または string2 は Null 値Null値

■サンプルコード
Option Explicit

Sub SampleCode()
    'AとBではAの方が先なので小さいになるはず
    Debug.Print StrComp("A", "B", vbBinaryCompare) '-1 (第一引数の方が小さい)
    
    '大文字と小文字では大文字の方が先なので小さいになるはず
    Debug.Print StrComp("A", "a", vbBinaryCompare) '-1 (第一引数の方が小さい)
    
    '大文字の方が先なので小さいという結果になるはず
    Debug.Print StrComp("B", "a", vbBinaryCompare) '-1
    
    'テキストモードで大文字小文字を区別せず比較する
    Debug.Print StrComp("B", "a", vbTextCompare) ' 1
End Sub

[ExcelVBA] String関数


■構文
String(number, character)

■説明
指定した文字を指定した回数繰り返します。
第一引数:繰り返す回数を指定します。
第二引数:繰り返す文字を指定します。

■サンプルコード
Option Explicit

Sub SampleCode()
    Dim i As Integer
    For i = 0 To 5
        Debug.Print "(" & i & ")" & String(i, "★") & String(5 - i, "☆")
    Next
End Sub

[ExcelVBA] TimeSerial関数


■構文
TimeSerial(hour, minute, second)

■説明
時、分、秒を引数に時間を返す
第一引数:時にあたる部分。0~23の範囲で指定。
第二引数:分にあたる部分。0~59の範囲で指定。
第三引数:秒にあたる部分。0~59の範囲で指定。

■サンプルコード
Option Explicit

Sub SampleCode()
    Debug.Print TimeSerial(10, 20, 30) '10:20:30
    Debug.Print TimeSerial(10, 80, 30) '11:20:30 分は、繰り上がり発生
    Debug.Print TimeSerial(10, 20, 90) '10:21:30 秒は、繰り上がり発生
End Sub

[ExcelVBA] TypeName関数


■構文
TypeName(varname)

■説明
変数の型を返します。
第一引数:変数を指定します。

■サンプルコード
Option Explicit
Sub SampleCode()
    Dim Str1 As String
    Debug.Print TypeName(Str1) 'String

    Dim Str2() As String
    Debug.Print TypeName(Str2) 'String() 文字列の配列

    Dim num1 As Integer
    Debug.Print TypeName(num1) 'Integer
    
    Dim num2 As Long
    Debug.Print TypeName(num2) 'Long
    
    Dim yymmdd As Date
    Debug.Print TypeName(yymmdd) 'Date
    
    Dim obj As Object
    Debug.Print TypeName(obj) 'Nothin (Set前)
    
    Set obj = CreateObject("Scripting.Dictionary")
    Debug.Print TypeName(obj) 'Dictionary (Set後)
End Sub

[ExcelVBA] Val関数


■構文
Val(string)

■説明
文字列のうち連続する数字文字列を数字を返します。ただし、数字じゃない文字列を見つけた場合処理を中断します。
第一引数:文字列を指定します。

■サンプルコード
Option Explicit

Sub SampleCode()
    'CInt or CDblと比較
    
    Debug.Print Val("123  456") '123456(スペースは無視)
    'Debug.Print CInt("123  456") 'エラー(スペースがある為)
    
    Debug.Print Val("1,234")  '1(コンマの前まで)
    Debug.Print CInt("1,234") '1234
    
    Debug.Print Val("12.34")  '12.34
    Debug.Print CDbl("12.34") '12.34
    
    Debug.Print Val("\1234")  '0(\が数字じゃない為)
    Debug.Print CInt("\1234") '1234
End Sub

[ExcelVBA] Space関数


■構文
Space(number)

■説明
指定した数のスペースを返します
第一引数:スペースの数を指定

■サンプルコード
Option Explicit

Sub SampleCode()
    '1桁~5桁の数字を出力する時、半角スペースを使い1の桁で揃えて出力する
    Dim RndNumber As Integer
    Randomize
    RndNumber = Int(Rnd() * 30000) + 1
    
    Debug.Print Space(5 - Len(CStr(RndNumber))) & RndNumber
End Sub

[ExcelVBA] Rnd関数


■構文
Rnd[(number)]

■説明
0以上1未満の値を返します。
第一引数:(省略可能)、単精度浮動小数点数型 (Single) の数値を指定します。

初期シード値が変わらない限り、一連の Rnd 関数が返す乱数系列は同じになります。これは、連続する各 Rnd 関数が乱数系列の中の直前の乱数をシード値として、次の乱数をそれぞれ生成するためです。

システム タイマーから取得した新しいシード値を使って、乱数ジェネレータを初期化するには、Rnd 関数を呼び出す前に、引数を指定せずに Randomize ステートメントを実行してください。

■サンプルコード
Option Explicit

Sub SampleCode()
    Randomize
    
    'A.0-4の値を返す(基本)
    Debug.Print Int(Rnd() * 5)
    
    'B.1-5の値を返す
    'Aに1足す
    Debug.Print Int(Rnd() * 5) + 1
    
    'C.100-104の値を返す
    'Aに100足す
    Debug.Print Int(Rnd() * 5) + 100
    
    'D.100-105の値を返す
    Debug.Print Int(Rnd() * 6) + 100
    
    'E.3,6,9,12,15 の値を返す
    'Bを3倍する
    Debug.Print (Int(Rnd() * 5) + 1) * 3
End Sub

[ExcelVBA] RGB関数


■構文
RGB(red, green, blue)

■説明
RGBからその色を表す値を返します。
第一引数:赤の割合を指定。0~255の整数値
第二引数:緑の割合を指定。0~255の整数値
第三引数:青の割合を指定。0~255の整数値

■サンプルコード
Option Explicit

Sub SampleCode()
    '白のRGB値を10進数で表示
    Debug.Print RGB(255, 255, 255) '16777215
    
    '白のRGB値を16新数で表示
    Debug.Print Hex(RGB(255, 255, 255)) 'FFFFFF
    
    '青のRGB値を16新数で表示
    Debug.Print Hex(RGB(0, 0, 255)) 'FF0000
    
    '赤のRGB値を16新数で表示(数値なので先頭の0は表示されない)
    Debug.Print Hex(RGB(255, 0, 0)) 'FF

    '先頭の0を補う
    Dim HexRGB As String
    HexRGB = Hex(RGB(255, 0, 0))
    HexRGB = String(6 - Len(HexRGB), "0") & HexRGB
    Debug.Print HexRGB '0000FF
End Sub

[ExcelVBA] Replace関数


■構文
Replace(expression, find, replace[, start[, count[, compare]]])

■説明
文字列の一部を別の文字列へ指定された回数分置換して返します。
第一引数:置換対象文字列を指定します。
第ニ引数:置換該当文字列を指定します。
第三引数:置換該当文字列を置換する文字列を指定します。
第四引数:(省略可能)置換該当文字列を検索開始する位置を指定します。省略時1になります。
第五引数:(省略可能)置換する文字列数を指定します。省略時-1となり全て置換されます。
第六引数:(省略可能)文字列比較の比較モードを指定。省略時、Option Compareステートメントの設定にしたがいます。
定数説明
vbUseCompareOption-1Option Compare ステートメントの設定を使用して比較を行います。
vbBinaryCompare0バイナリ モードの比較を行います。
vbTextCompare1テキスト モードの比較を行います。

■サンプルコード
Option Explicit

Sub SampleCode()
    Debug.Print Replace("検索文字列", "検索", "置換")
    
    'Start,Countオプション Startで指定した検索位置より前は返さないことに注意
    Debug.Print Replace("1a3a5a7a9a", "a", "*")
    Debug.Print Replace("1a3a5a7a9a", "a", "*", Start:=1, Count:=2)
    Debug.Print Replace("1a3a5a7a9a", "a", "*", Start:=3, Count:=2)
    Debug.Print Replace("1a3a5a7a9a", "a", "*", Start:=5, Count:=2)
    

    '文字列比較、デフォルト(バイナリモード)、テキストモードの比較
    '大文字/小文字
    Debug.Print Replace("Aa", "A", "*")
    Debug.Print Replace("Aa", "A", "*", Compare:=vbTextCompare)
    '全角/半角
    Debug.Print Replace("AA", "A", "*")
    Debug.Print Replace("AA", "A", "*", Compare:=vbTextCompare)
    'ひらがな/カタカナ
    Debug.Print Replace("あア", "あ", "*")
    Debug.Print Replace("あア", "あ", "*", Compare:=vbTextCompare)
End Sub

[ExcelVBA] WeekdayName関数


■構文
WeekdayName(weekday, abbreviate, firstdayofweek)

■説明
指定された曜日を表す文字列を返します。
第一引数:日付を指定します。
第二引数:(省略可能)曜日名を省略するかどうかを示すブール値を指定します。
第三引数:(省略可能)曜日の最初の火を示す数値を指定します。
定数内容
vbUseSystem0各国語対応 (NLS) API の設定値を使用します。
vbSunday1日曜 (既定値)
vbMonday2月曜
vbTuesday3火曜
vbWednesday4水曜
vbThursday5木曜
vbFriday6金曜
vbSaturday7土曜


■サンプルコード
Option Explicit

Sub SampleCode()
  Debug.Print Date                               '2011/12/11
  Debug.Print (WeekdayName(Weekday(Date)))       '日曜日
  Debug.Print (WeekdayName(Weekday(Date), True)) '日
End Sub

[ExcelVBA] Weekday関数


■構文
Weekday(date, [firstdayofweek])

■説明
曜日を表す数字を返します。
第一引数:日付
第二引数:(省略可能)週の第 1 日目の曜日を指定します。省略時、vbSundayを指定したとみなします。
定数内容
vbUseSystem0NLS APIの 設定値を使います。
vbSunday1(既定値) 日曜
vbMonday2月曜
vbTuesday3火曜
vbWednesday4水曜
vbThursday5木曜
vbFriday6金曜
vbSaturday7土曜

戻り値
定数内容
vbSunday1日曜
vbMonday2月曜
vbTuesday3火曜
vbWednesday4水曜
vbThursday5木曜
vbFriday6金曜
vbSaturday7土曜

■サンプルコード
Option Explicit

Sub SampleCode()
  Debug.Print Date          '2011/12/11
  Debug.Print Weekday(Date) '1
End Sub

[ExcelVBA] Time関数


■構文
Time

■説明
現在の時刻を返します。

■サンプルコード
Option Explicit

Sub SampleCode()
  Debug.Print (Time)  '18:16:19
End Sub

[ExcelVBA] Now関数


■構文
Now

■説明
現在の日付と時刻を返します。

■サンプルコード
Option Explicit

Sub SampleCode()
  Debug.Print (Now)  '2010/12/11 18:16:19
End Sub

[ExcelVBA] MsgBox関数


■構文
MsgBox(prompt[, buttons] [, title] [, helpfile, context])

■説明
ダイアログボックスにメッセージを表示します。戻り値としどのボタンがクリックされたのか整数値を返します。
第一引数:ダイアログボックス内に表示する文字列を指定します。
第二引数:(省略可能)表示されるボタンの種類、アイコンのスタイルなどのダイアログボックスの仕様を指定します。
・第1グループ:ボタンの種類
定数内容
vbOKOnly0[OK] ボタンのみを表示します。
vbOKCancel1[OK] ボタンと [キャンセル] ボタンを表示します。
vbAbortRetryIgnore2[中止]、[再試行]、および [無視] の 3 つのボタンを表示します。
vbYesNoCancel3[はい]、[いいえ]、および [キャンセル] の 3 つのボタンを表示します。
vbYesNo4[はい] ボタンと [いいえ] ボタンを表示します。
vbRetryCancel5[再試行] ボタンと [キャンセル] ボタンを表示します。

・第2グループ:アイコンの種類
定数内容
vbCritical16警告メッセージ アイコンを表示します。
vbQuestion32問い合わせメッセージ アイコンを表示します。
vbExclamation48注意メッセージ アイコンを表示します。
vbInformation64情報メッセージ アイコンを表示します。

・第3グループ:標準ボタンの指定
定数内容
vbDefaultButton10第 1 ボタンを標準ボタンにします。
vbDefaultButton2256第 2 ボタンを標準ボタンにします。
vbDefaultButton3512第 3 ボタンを標準ボタンにします。
vbDefaultButton4768第 4 ボタンを標準ボタンにします。

・第4グループ:モーダルの設定
定数内容
vbApplicationModal0アプリケーション モーダルに設定します。メッセージ ボックスに応答するまで、現在選択中のアプリケーションの実行を継続できません。
vbSystemModal4096システム モーダルに設定します。メッセージ ボックスに応答するまで、すべてのアプリケーションが中断されます。

・その他
定数内容
vbMsgBoxHelpButton16384ヘルプ ボタンを追加します。
VbMsgBoxSetForeground65536最前面のウィンドウとして表示します。
vbMsgBoxRight524288テキストを右寄せで表示します。
vbMsgBoxRtlReading1048576テキストを、右から左の方向で表示します。

第三引数:(省略可能)ダイアログボックスのタイトルを指定します。
第四引数:(省略可能)ヘルプファイルの名前を示す文字列を指定。この引数を指定する場合、第七引数(context)の指定も必要となる。
第五引数:(省略可能)ヘルプ トピックに指定したコンテキスト番号を表す数式を指定。この引数を指定する場合、第六引数(helpfile)の指定も必要となる。

戻り値
定数内容
vbOK1[OK]
vbCancel2[キャンセル]
vbAbort3[中止]
vbRetry4[再試行]
vbIgnore5[無視]
vbYes6[はい]
vbNo7[いいえ]


■サンプルコード
Option Explicit

Sub SampleCode()
    '第一引数のみ指定
    MsgBox ("表示する文字列")
    
    Dim Result As Integer
    'ボタンの種類を指定
    Result = MsgBox("表示する文字列", vbOKCancel)

    'ボタンの種類+アイコンの種類
    Result = MsgBox("表示する文字列", vbOKCancel + vbInformation)
    
    'ボタンの種類+アイコンの種類+デフォルトボタンの指定
    Result = MsgBox("表示する文字列", vbOKCancel + vbInformation + vbDefaultButton2)
End Sub

[ExcelVBA] MonthName関数


■構文
MonthName(month[, abbreviate])

■説明
指定された月を表す文字列を返します。
第一引数:月を示す値を指定します。
第二引数:(省略可能)付き名を省略するかどうかを表すブール値を指定します。省略時、Falseが指定され省略されません

■サンプルコード
Option Explicit

Sub SampleCode()
    Debug.Print Date                   '2011/12/11
    Debug.Print MonthName(Month(Date)) '12月
    
    '第二引数にTrueを指定し省略して表示すると・・・
    'Month(Date)と一緒に見えるが・・・
    Debug.Print MonthName(Month(Date), True) '12
    Debug.Print Month(Date)                  '12
    
    '両者では型が違う。
    Debug.Print TypeName(MonthName(Month(Date), True)) 'String
    Debug.Print TypeName(Month(Date))                  'Integer
End Sub

[ExcelVBA] Len関数


■構文
Len(string | varname)

■説明
文字数を返します。
第一引数:文字列または変数を指定します。変数の時は文字列型として値を返します。

■サンプルコード
Option Explicit

Sub SampleCode()
    Debug.Print (Len("a"))   '1
    Debug.Print (Len("あ"))  '1
    Debug.Print (Len(""))    '0
    Debug.Print (Len(CStr(123)))  '3(型が文字列じゃないのは変換しておく)
    Debug.Print (Len(123)) '6(型が文字列じゃないのは変換しておく
End Sub