T.VB基礎編





変数について


'@変数の種類
 '以下に、良く利用する変数の一覧を表にします。

名称 宣言時
の記述
記憶領域
  サイズ
適用可能な範囲
整数型 Integer 2 バイト -32,768 〜 32,767
長整数型 Long 4 バイト -2,147,483,648
〜 2,147,483,647
単精度浮動小数点数型 Single 4 バイト 負の値
-3.402823E+38 〜
-1.401298E-45

正の値
1.401298E-45 〜
3.402823E+38
倍精度浮動小数点数型 Double 8 バイト 負の値
-1.79769313486232E+308 〜
-4.94065645841247E-324

正の値
4.94065645841247E-324 〜
1.79769313486232E+308
日付型 Date 8 バイト 西暦 100 年 1 月 1 日〜
西暦 9999 年 12 月 31 日
文字列型 String 文字列の長さ 文字列
バリアント型 Variant 16 バイト 数値は倍精度浮動小数点数型と同じ。文字列は文字列型と同じ

'注 1. なお上記以外に、バイト型,ブール型,通貨型,10進型,
'   オブジェクト型,ユーザー定義型などがあります。


'A変数の宣言方法

 'プロシージャの中で変数を宣言
 '(変数の有効範囲は、そのプロシージャの中)

   Dim a As Integer             '※ 1

   Static b As Integer           '※ 2


 'モジュールの先頭で変数を宣言

   Public c As Integer           '※ 3
   Private d As Integer           '※ 4


'注 2. 例では、a を整数型として定義しています。なお基本的
'   に、変数宣言は変数を使用する前にしなくてはいけませ
'   ん。また宣言した時点で、変数は自動的に初期化され、
'   すぐに使用可能な状態になります。

'注 3.なおプロシージャとは、Sub や Function で始まり
'   End Sub や End Function で終了するマクロの事です。
'   またモジュールとは、主にプロシージャの集まりです。

'注 4. 同一型の変数を 2つ以上宣言する場合、
'   Dim a, b, c As Integer の様にカンマで区切って
'   まとめて宣言することも可能です。

'※ 1. 変数に格納されるデータは、プロシージャ実行後に
'   破棄されます。


'※ 2. 変数に格納されるデータは、プロシージャ実行後も
'   保持されます。


'※ 3. 変数の有効範囲は、そのブック内の全モジュール、
'   つまりブック内の全プロシージャになります。


'※ 4.変数の有効範囲は、そのモジュール内の全プロシージャ
'   になります。



'B変数に値を代入

 '以下 3 行は、変数宣言
  Dim e, f As Integer
  Dim AA As String
  Dim 日付 As Date


 '以下 4 行それぞれで、値を代入
  e = 5
  AA = "日本"                '※ 5
  日付 = Day(Now())             '※ 6
  f = e


'注 5. 代入に用いる = は、= の両側が等しいと言う意味
'   ではなく、= の右側の値を、= の左側に代入する意味
'   になります。よって上記の場合、e に 5 が代入され、
'   AA に 日本 、日付 に 現在の日付、f に e と同じ値
'   の 5 が代入されます。

'注 6. 変数の型を無視して、値を代入すると、その行でエラー
'   になってしまいます。つまり、上記の場合 e = "Japan"
'   と文字列を代入すると、エラーになります。

'注 7.Aのような変数宣言をせずに、変数に値を代入する時点
'   で、変数の型を宣言できます。つまり、整数型の場合は
'   e% のように記述して、すぐに値を代入できます。(例:
'   e% = 3)なお整数型の % 以外には、長整数型の &、
'   単精度浮動小数点数型の !、倍精度浮動小数点数型の
'    #、文字列型の $があります。

'注 8.変数の名前において、同一プロシージャ内で、型の異
'   なる同一名の変数を宣言してはいけません。また、
'   Dim a as Integer と記述した後に、a$ と言う風に、
'   文字列型で記述した場合も、同一名の宣言と見なされ
'   る為、エラーになります。また、上記の 日付 の様に
'   半角英数以外の 2 バイト文字(全角文字)も使用
'   可能です。

'※ 5. 変数に文字列を代入する場合、文字列の前後を " で
'   くくって下さい。


'※ 6. Now()は、現在の年月日と時刻を取得します。またDay()
'   は、カッコ内のデータから、日付の部分を取り出して、
'   数値型に型を変換します。他にも年の Year() や月の
'   Month() や曜日の Weekday() や時間の Hour() や
'   分の Minute() や秒のSecond() があります。





演算子について


'演算子は大別すると、算術演算子、比較演算子、文字列
'連結演算子、論理演算子の 4 種類があります。

'@算術演算子
 '数値を加減乗除します。

  Dim a, b As Integer
  Dim c As Single
  a = 10
  b = 2
  c = a + b + 1     '加算  (c には  13 が格納)
  c = a - 2 - b     '減算  (c には   6 が格納)
  c = a * b * 3     '乗算  (c には  60 が格納)
  c = a / b / 2     '除算  (c には  2.5 が格納)
  c = a ^ 2 ^ b     'べき乗 (c には 10000 が格納)
  c = a Mod 3      '剰余  (c には   1 が格納)
  c = a \ 3       '整数の商(c には   3 が格納)


'A比較演算子
 '2 つの数値を比較します。

  Dim d, e As Integer
  Dim f As Boolean
  d = 10
  e = 2
  f = e < d    '右より左が小さい( f には Trueが格納)
  f = e <= 2   '以下      ( f には Trueが格納)
  f = e > d    '右より左が大きい( f にはFalseが格納)
  f = e >= 3   '以上      ( f にはFalseが格納)
  f = d = 10   '等しい     ( f には Trueが格納)
  f = d <> 10   '等くない    ( f にはFalseが格納)


'B文字列連結演算子
 '文字列を連結します。以下の場合 CC に 東京都練馬区 と
 'いう文字列が代入されます。

  Dim AA, BB, CC As String
  AA = "東京都"
  BB = "練馬区"
  CC = AA + BB
  '又は、
  CC = AA & BB


'注 1. AA="12"、BB = "4"として上記の様に記述すると
'   & 、+ のどちらを用いても CC には、124 という
'   文字列が格納されます。


'C論理演算子

        '現在作成中です。m(_ _)m




条件付きの実行_If


'@特定の単一条件に合致するかどうかを調べ、合致した場合
'だけ処理を行う。

 '例では、現在の曜日が、日曜日かどうかを調べ、日曜日
 'ならマクロを終了させる処理を行います。

  Dim a As Integer

  a = WeekDay(Now())     '現在の曜日を数値で取得

  If a = 1 Then       'もし a が 1 の場合
               '    (日曜日の場合)

    Exit Sub        'マクロを終了させます

  End If

 '又If以降は、以下の様に記述してもokです。

  If a = 1 Then Exit Sub   '一行で記述する場合
               '    End If は不要


'A特定の単一条件に合致するかどうかを調べ、合致
'した場合としない場合で異なった処理を行う。

 '例では現在の月から、年度を計算します。つまり
 '1 〜 3 月は、現在の(年 - 1)年度になります。

  Dim b, c As Integer
  b = Month(Now())      '現在の月を取得

  c = Year(Now()) - 1988   '現在の和暦を取得

  If b >= 4 Then       '月が4月〜12月の場合

    MsgBox "今月は、平成" & c & "年度。"

  Else            '月が1月〜3月の場合

    MsgBox "今月は、まだ平成" & c - 1 & "年度。"
  End If


'B複数の条件で評価する場合

 '例では現在の日付から、月初め、月中、月末、その他
 'を判断します。

  Dim d As Integer
  Dim BB As String
  d = Day(Now())          '現在の日を取得

  If d >= 1 And d <= 5 Then    '1日〜5日は、月初め
    BB = "月初め"
  ElseIf d >= 12 And d <= 17 Then '12日〜17日は、月中
    BB = "月中"
  ElseIf d >= 27 And d <= 31 Then '27日〜31日は、月末
    BB = "月末"
  Else               '上記以外の日付は、
                  '      その他

    BB = "その他"
  End If
  MsgBox BB


'注 1. If はネスト (入れ子) 構造にすることができます。
'   ネスト構造とは、最初のIfで処理を分岐させ、その
'   分岐処理の中で、Ifを再度使用して分岐処理を行う
'   ことです。なおネスト構造は、何段もカスケードを
'   重ねて記述可能ですが、段数を増やすほど処理速度
'   が遅くなってしまいます。




条件付きの実行_Case


'@特定の条件(一対一)に合致するかどうかを調べる。
'例では、現在の曜日が何曜日かを調べます。

  Dim a As Integer
  Dim AA As String
  a = WeekDay(Now())   '現在の曜日を数値で取得
  Select Case a
   Case 1
    MsgBox "今日は、日曜日です。"
   Case 2
    MsgBox "今日は、月曜日です。"
   Case 3
    MsgBox "今日は、火曜日です。"
   Case 4
    MsgBox "今日は、水曜日です。"
   Case 5
    MsgBox "今日は、木曜日です。"
   Case 6
    MsgBox "今日は、金曜日です。"
   Case 7
    MsgBox "今日は、土曜日です。"
  End Select

'A特定の条件(多対一)に合致するかどうかを調べる。
'例では、現在の月が、春夏秋冬のどの季節にあたるかを
'を調べます。

  Dim b As Integer
  Dim BB As String
  b = Month(Now())   '現在の月を数値で取得
  Select Case b
    Case 3 To 4   '月が 3 〜 4 の場合、春
      BB = "春"
    Case 7 To 8   '月が 7 〜 8 の場合、夏
      BB = "夏"
    Case 9 To 10   '月が 9 〜10 の場合、秋
      BB = "秋"
    Case 12, 1, 2  '月が12, 1, 2 の場合、冬
      BB = "冬"
    Case Else    '上記以外、つまり 11,5,6
            '         の場合

      BB = "??"
  End Select
  MsgBox "今は、" & BB & "です。"


'注 1. Select Case は If と同様に、ネスト (入れ子) 構造に
'   することができます。




ユーザーからの入力


'InputBox を使用して、ユーザーからの入力値を取得します。

 '@ユーザーから文字列を入力してもらう

  Dim AA As String
  AA = InputBox("市区町村を入力して下さい。" _
    , "市区町村の入力", "東京都")     '※ 1

 'Aユーザーから数値のみを入力してもらう

  Dim a As Integer
  a = Val(InputBox("西暦を入力して下さい。" _
    , "数値入力", "2000"))         '※ 2
  If a = 0 Then Exit Sub           '※ 3


'注 1.ユーザーが入力した文字列や数値は、AA や a に格納
'   されます。

'※ 1.左から順に、表示するメッセージ,タイトル,初期値
'   です。なお、表示するメッセージ以外は省略可能です。
'   ただし省略した場合、タイトルは Microsoft Excel
'   となり、初期値の方は何も設定されません。


'※ 2.Val を使用すると、ユーザーが間違って全角文字等
'   を入力しても、以降の処理を続行できます。


'※ 3.ユーザーがキャンセルボタンをクリックした場合や、
'   ユーザーが整数ではなく文字等を入力した場合に、
'   マクロを終了させます。





メッセージを表示


'MsgBoxを使用して、簡単なメッセ−ジを表示したり、ユーザー
'との会話形式処理としても利用できます。

 '@単純にメーッセージを表示

  MsgBox "処理が終了しました。" _
    , vbOKOnly, "確認ウィンドウ"      '※ 1

 'Aメッセージ + アイコンを表示

  MsgBox "予期しないエラーにより、" & _
    "マクロを強制終了します。", _
    vbOKOnly + vbCritical, "確認"     '※ 2

 'Bユーザーとの会話形式

  '例では、削除対象行をユーザーと会話しながら決定
  'します。なお、ユーザーがキャンセルした場合、
  'マクロを終了させます。

  Dim a, b As Integer
  a = MsgBox("1行目を削除します。よろしいですか?" _
    , vbYesNoCancel, "対象行")       '※ 3

  If a = 6 Then        'ユーザーが「はい」
                '     を選択した場合

    Rows("1").Delete Shift:=xlUp

  ElseIf a = 7 Then       'ユーザーが「いいえ」
                '     を選択した場合

   b = Val(InputBox("削除対象行を数値で" & _
    "入力して下さい。", "数値入力", "1"))
   If b = 0 Then Exit Sub
    Rows(b).Delete Shift:=xlUp

  Else            'ユーザーが「キャンセル」
                '     を選択した場合

   MsgBox "処理はキャンセルされました。" _
    & "マクロを終了します。"
   Exit Sub
  End If


'注 1. MsgBoxで使用可能なボタンの種類は、以下の通り。
'   [OK]のみの vbOKOnly,[OK]と[キャンセル]の
'   vbOKCancel,[中止]と[再試行]と[無視]の
'   vbAbortRetryIgnore,[はい]と[いいえ]と
'   vbYesNo,[はい]と[いいえ]と[キャンセル]の
'   vbYesNoCancel,[再試行]と[キャンセル]の
'   vbRetryCancel

'※ 1.左から順に、表示するメッセージ,表示するボタン等の
'   種類,メッセージウィンドタイトルです。
'   なお、表示するメッセージ以外は省略可能です。ただし
'   省略した場合、タイトルは Microsoft Excel となり、
'   表示するボタンは ok ボタンになります。


'※ 2.設定可能なアイコンは、警告のvbCritical,
'   問い合わせのvbQuestion,注意のvbExclamation,
'   情報のvbInformation の4種類があります。


'※ 3. aには、ユーザーが選択したボタンの種類が数値として
'   格納されます。ボタンの種類は、7種類あり、1:[OK],
'   2:[キャンセル],3:[中止],4:[再試行],5:[無視],
'   6:[はい],7:[いいえ]です。





ループ処理


'@Forを使用した通常ループ
 '以下の例では、コンピュータの警告音を 13 回に設定
 'します。For を使用する場合、カウンタ変数 a と、その
 '開始値(1)および終了値(13)を指定します。その後 Next
 'の行で、カウンタ変数 a が 1ずつ増加されます。

  Dim a As Integer
  For a = 1 To 13
    Beep          '警告音(ビープ音)を鳴らす
  Next a


'AForを使用した変則ループ
 '以下の例では、カウンタ変数 b は、2 から始まり 2 ずつ
 '加算され 10 まで繰り返されます。つまり2、4、6、8、10
 'の 5 回ループ処理が行われることになります。

  Dim b, c As Integer
  For b = 2 To 10 Step 2
    c = c + j               '※ 1
  Next b
  MsgBox "合計値 " & c    'c は、30 になります


'BFor Each...Nextを使用したループ
 '以下の例では、全シートにシート保護をかけます。
 'つまりループの回数は、シート数と常に同じ数になります。

  Dim BB As String
  Dim CCC As Variant

  For Each CCC In Sheets    '全シートについて評価

   BB = CCC.Name        'シート名を取得

   Sheets(BB).Protect Password:=pw, _
    DrawingObjects:=True, Contents:=True, _

    Scenarios:=True      'シートを保護

  Next CCC


'CDo While...Loopを使用したループ
 '以下の例では、入力用ウィンドウを表示させて、ユーザーに
 'シート名を入力してもらい、その名前が実際のシート名と
 '合致するか、ユーザーがキャンセルするまで、入力用
 'ウィンドウを表示させ続けます。なお Do While は、
 '指定条件を満たすまで、ループ処理を継続させたい場合に
 '使用します。

  Dim d As Integer
  Dim CC As String
  Dim EEE As Variant
  Do While d <> 99              '※ 2
   CC = InputBox("シート名を入力して下さい。" _
    & " 例:シート00", "シート名入力")

   If CC = "" Then Exit Sub  '上でキャンセル
                '     を選んだ場合

   For Each EEE In Sheets   '全シート名と入力
                '    された値を比較

    If EEE.Name = CC Then d = 99      '※ 3
   Next EEE
   If d <> 99 Then             '※ 4
    MsgBox "入力したシート名は存在しません!"
   End If
  Loop


'注 1. @〜Bで Exit For を使用すると、カウンタが終了値に
'   なる前に、ループ処理を終了できます。
'   例えば、エラーの為にループを抜けなければならない
'   場合、エラーチェックに If や Select Case を利用
'   し、特定条件を満たしたら、Exit For を使用します。

'注 2. Cで Exit Do を使用すると、注 1 と同様にループ処理
'   を途中で終了する事ができます。

'※ 1. この行では、前回の c の値にカウンタ変数 b が毎回
'   加算されます。つまり1回目は 0+2で2、2回目は
'   2+4で6、3回目は 6+6で12、4回目は 12+8で20、
'   5回目は 20+10で30 になります。


'※ 2. d が 99 になるまで、ループ処理を継続させます。なお
'   Do を使用したループ処理は、For の場合と異なり用意
'   されたカウンタ変数がありません。その為 d がループ
'   回数に応じて、自動的に増加する事はありません。また
'   Do While の代わりに、Do Until を使用することが
'   できます。その場合、<> の箇所を = に変更して、
'   お使い下さい。


'※ 3. 入力したシート名と合致するシートが、見つかった場合
'   d に 99 を代入します。また CC には、シート名が格納
'   されます。


'※ 4. 入力したシート名と合致するシートが、見つからない
'   場合に、エラーメッセージを表示させます。





変換関数


関数名 代入する値 変換後の値  説明
CBool
Day(Now())=32
ブール型
False
 式をブール型に変換。式が 偽 又は 0 のときは、False を、それ以外は True を返します。
CByte ※ 1 バイト型  代入された値をバイト型に変換。
CCur ※ 1 通貨型   〃  通貨型 〃
CDate ※ 1 日付型   〃  日付型 〃
CDbl ※ 1 倍精度浮動小数点数型   〃  倍精度浮動小数点数型 〃
CDec ※ 1 10 進型   〃  10 進型 〃
CInt ※ 1 整数型   〃  整数型 〃
CLng ※ 1 長整数型   〃  長整数型 〃
CSng ※ 1 単精度浮動小数点数型   〃  単精度浮動小数点数型 〃
CStr ※ 1 文字列型   〃  文字列型 〃
CVar ※ 1 バリアント型   〃  バリアント型 〃
Asc 文字列型
"A"
"a"
"Apple"
整数型
65
97
65
 代入した文字列の先頭文字の文字コードを返します。
Chr 長整数型
65
9
10
13
文字列型
"A"
タブ
ラインフィード
キャリッジリターン
 指定した文字コードに対応する文字を返します。なお、コード 0 〜 31 の範囲の文字は制御文字のため表示できません。
Format
※ 2
バリアント型 バリアント型  式を指定した書式に変換し、その文字列を示すバリアント型の値を返します。
Hex 数値
5
10
459
文字列型
"5"
"A"
"1CB"
 数値を 16 進数に変換した値(文字列型)を返します。
Str 長整数型
459
-459.3
459.001
文字列型
" 459"
"-459.3"
" 459.001"
 数値を文字列で表した値を返します。数値を文字列に変換すると、符号を表示するためのスペースが必ず先頭に確保されます。
Val 文字列
"1234567.8"
""
"12月10日"
"平成12年"
数値
1234567.8
0
12
0
 文字列に含まれている数値を返す
変換後の型は、適切なデータ型になりますが、文字列中に数字以外の文字(全角数字も含)が見つかると、Val 関数は読み込みを中止します。


'注 1. なお、上記関数の使用方法は、Format関数を除いて
'    関数名(代入値)  つまり Str関数では、Str(459)
'   となります。

'※ 1. 代入値は、変換されるデータ型の範囲を超えると
'   エラーになります。


'※ 2. 使用方法は、
'    Format(代入値,書式)
'   となり、書式 には、定義済み書式または
'   表示書式指定文字を指定します。つまり
'    Format(5459.4, "##,##0.00")
'   ならば変換後の値は "5,459.40" となります。





配列について


'1 つの変数には、1 つの値しか格納しできませんが、
'配列ならば複数の値を格納する事ができます。これを
'通常の変数だけで処理する場合、格納する値の数だけ
'変数を使用しなくてはなりません。


'@格納する値の数と型が決まっている場合(静的配列)

'a.一次元配列(通常の配列)

 '宣言方法

  Dim aaa(1 To 4) As Integer         '※ 1
 '値の代入(以下では、2〜8までの偶数を代入)
  aaa(1) = 2
  aaa(2) = 4
  aaa(3) = 6
  aaa(4) = 8
   '又は
  Dim b As Integer
  For b = 1 To 4               '※ 2
   aaa(b)=b*2
  Next b


'b.二次元配列(シートのセル値を参照する場合等)
' VBAでは、最大 60 次元までの配列を宣言可能です。

 '宣言方法

  Dim bbb(1 To 3, 1 To 2) As String     '※ 3
 '値の代入
  bbb(1, 1) = "a"
  bbb(1, 2) = "b"
  bbb(2, 1) = "aa"
  bbb(2, 2) = "bb"
  bbb(3, 1) = "aaa"
  bbb(3, 2) = "bbb"
   '又は
  Dim c, d As Integer
  Dim e As String
  For c = 1 To 3
   For d = 1 To 2
    If c = 1 Then
     If d=1 Then bbb(1,1)="a" Else bbb(1,2)="b"
    Else
     bbb(c, d) = bbb(c - 1, d) & bbb(1, d)
    End If
   Next d
  Next c



'A格納する値の数を後で変更する場合(動的配列)

 'a.格納済みの値を破棄して変更

  '要素数を16→9に変更

  Dim ccc(15) As Long
  ReDim ccc(8) As Long
  '要素数を8→15に変更
  Dim ccc(2 To 9) As Integer
  ReDim ccc(2 To 16) As Integer
  '変数を利用して要素数を変更
  Dim ddd() As Long
  Dim n ,p As Integer
  n=5
  p=10
  ReDim ddd(1 To n, 1 To p) As Long


 'b.格納済みの値を保持して変更        '※ 4

  '要素数を6→9に変更

  Dim ccc(5) As Long
    ' ∫
    '値代入
    ' ∫
  ReDim Preserve ccc(8) As Long

   '或いは

  Dim ccc(1 To 6) As Long
    ' ∫
    '値代入
    ' ∫
  ReDim Preserve ccc(1 To 9) As Long

  '変数を利用して要素数を変更

  Dim ddd(1 To 2, 1 To 3) As Long
    ' ∫
    '値代入
    ' ∫
  Dim n As Integer
  n=5
  ReDim Preserve ddd(1 To 2, 1 To n) As Long


'注 1. 配列の一つ一つを構成するもの(変数)を、要素と
'   呼び、各要素を表す数字をインデックス番号と
'   言います。なおインデックス番号は、連続した整数
'   でなくてはなりません。

'注 2. 配列では、インデックス番号ごとにメモリ領域が
'   確保されるので、必要以上に大きな要素数や型の
'   配列を宣言しないようにしましょう。

'注 3. 3 次元以上の配列は、2 次元と同じ方法で宣言
'   できます。例:Dim aaa(3, 10, 15)

'注 4. 動的配列では、ReDimを使用して配列の要素数や
'   次元数を何回でも変更できます。また値の代入
'   方法は、静的配列と同じなので省略しています。

'※ 1. 宣言する型は、何でも構いませんし、型を宣言
'   しなくてもOKです。又 Dim aaa(3) As Integer
'   と宣言した場合は、インデックス番号が 1 から
'   ではなく 0 から始まるため、要素数が4個の配列
'   を表しています。


'※ 2. For を使用したループの使用方法については、
'   ループ処理を参照。なお、ループを利用せずに
'   配列を使用するのは大変困難ですので、ループ
'   処理の使用をお勧めします。

'※ 3. 宣言する型は、何でも構いませんし、型を宣言
'   しなくてもOKです。又 Dim bbb(2, 1) As String
'   と宣言した場合は、要素数が 0〜2 × 0〜1 = 6
'   個の配列を意味します。


'※ 4. 多次元の配列では、最後の次元の上限値のみ変更
'   できます。例:aaa(1 To 3, 1 To 4, 1 To 5) の
'   場合は、最後の5のみが変更可能。なお Preserveを
'   使用すると、次元数やデータ型の変更はできません。





エラー処理


'ファイルの読み取りエラーや、保存先ディスク容量の不足
'など避けられないエラーの為、マクロが停止してしまう事
'があります。また利用する側に立ってマクロを作成するよう
'心がけていても、予想外の方向へ処理が分岐してしまい
'マクロが停止すると言った事も少なくないでしょう。
'このような場合、エラー処理という手法を利用すれば
'便利です。
'エラー処理を利用するには、On Error 〜と言う行を追加し、
'別途エラーに対する処理を記述します。以下に解説します。


'@エラーが発生しても、エラーを無視し処理を続行する場合

 'On Error Resume Next の行から End Sub 間の記述で
 'エラーが発生しても、エラーが発生した行を無視し、
 'エラーが発生した行の次の行からマクロ処理を継続します。
 '単体で利用する事はあまりありませんが、Aと併用
 'すると便利です。

  On Error Resume Next

  '∫ 処理内容

  End Sub


'Aエラー発生時に特定の処理を行う場合

 'On Error GoTo ○△□ の行から Exit Sub 間の記述で
 'エラーが発生した場合、○△□: へと処理がジャンプし、
 '「エラー発生時処理」を行った後、マクロを終了します。
 'これは、処理対象シートが存在しない 等のエラーが発生
 'する可能性のあるマクロに利用すると便利です。

  On Error GoTo ○△□

  '∫ 処理内容

  Exit Sub

  ○△□:

  '∫ エラー発生時処理

  End Sub

 'On Error GoTo ○△□ の行から Exit Sub 間の記述で
 'エラーが発生した場合、○△□: へと処理がジャンプし、
 '「エラー発生時処理」を行った後、エラーが発生した行
 'から、もう一度マクロ処理を継続します。保存先ディスク
 '容量の不足等のエラー処理で、「エラー発生時処理」の
 '部分に、保存先ディスクの変更や、ディスクの入れ替えを
 '促すような処理を記述すれば便利です。

  On Error GoTo ○△□

  '∫ 処理内容

  Exit Sub

  ○△□:

  '∫ エラー発生時処理

    Resume
  End Sub

 'On Error GoTo ○△□ の行から Exit Sub 間の記述で
 'エラーが発生した場合、○△□: へと処理がジャンプし、
 '「エラー発生時処理」を行った後、エラーが発生した行の
 '次の行からマクロ処理を継続します。

  On Error GoTo ○△□

  '∫ 処理内容

  Exit Sub

  ○△□:

  '∫ エラー発生時処理

    Resume Next
  End Sub


'Bエラー処理を全て無効にする

 'On Error 〜 で記述した内容を無効にするには、
 'On Error GoTo 0 を利用します。直前に記述した
 'エラー処理とは異なるエラー処理を行いたい場合にも
 '利用します。


  On Error Resume Next

  '∫ 処理1

  On Error GoTo 0

  '∫ 処理2

  End Sub

 '上の記述の場合、処理1でエラーが発生した場合、
 'マクロは停止せず続行しますが、処理2でエラーが
 '発生した場合、マクロは停止してしまいます。しかし
 '下の記述では、処理1,処理2のどちらでエラーが
 '発生しても、それぞれのエラー処理が実行されますので、
 'マクロは停止しません。


  On Error GoTo ○△□

  '∫ 処理1

  On Error GoTo 0
  On Error GoTo ○○○
  '∫ 処理2

  Exit Sub

  ○△□:

  '∫ 処理1でエラー発生時の処理

  Exit Sub

  ○○○:

  '∫ 処理2エラー発生時の処理

  End Sub


'Cエラー内容の確認

 'エラー処理では、発生したエラーの種類によって処理を
 '分岐させるのが一般的です。そこで、どのようなエラーが
 '発生したかを判別することが重要になってきます。エラー
 'の種類を判別するには、Err.Number を利用します。これ
 'によりエラー番号(数値)が取得できます。またエラー
 '番号に対応するエラーメッセージ(文字列)を取得する
 'には、Error.Err.Number を利用します。なお、エラー
 '番号の一覧は、Excel97のVisualBasicEditorの場合、
 'ヘルプの「トラップできるエラー」を参照して下さい。




応用 T


 現在作成中です。m(_ _)m




トップページへ戻る ▲このページの先頭へ