• ベストアンサー

VBAでエラー時の分岐処理

お世話になります。 VBAでエラーが起こった時の分岐処理を記載したいと思っています。 私が知っているのは 「On Error Resume Next」 なのですが、次の行に進みたいわけではなく、 a = b+c    -(1) が成功したら Z=a エラーを発生したら Z=0 という形で ・エラーの発見対象は(1)のみ※他の箇所でエラーが発生しても、関係なし ・(1)の時のエラーの有無で処理を切り分け したいのです。 お手数ですが、何卒宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

On Error Resume Next a = b+c If Err Then   Z=0 Else   Z=a End If On Error GoTo 0

kgyqk433
質問者

お礼

ありがとうございます!!

関連するQ&A

  • エクセルVBAで分岐処理と繰り返し処理を使って最大値を求める方法

    エクセルVBAを使って列に書かれている数値の中からFor~Next、もしくはDo~Loopの繰り返し処理とIf文などの分岐処理を使ってA列の中に無造作に書かれている数値から最大値を求めることはできるのでしょうか? たとえば A 12 56 -3 85 -18 ・ ・ ・ などとA列に書かれているの文字の中から最大値=85と求めるようなものを分岐処理と繰り返し処理を使って作りたいのですが可能でしょうか? わかりにくい文章で申し訳ありませんがアドバイス等くれると助かります。

  • excel VBAの分岐の書き方について

    excel VBAの分岐の書き方について 列Aに、 ああ  いいい  うううう  ああ いいい ええ ・・・ のようなデータがあるとします。 このときにVBAのフォームで、 ああ いいい うううう ええ をチェックボックスで選ばせ、該当する行のみに処理を行いそれ以外には処理をしない、というプログラムを考えています。 どのように実装するのが正しい書き方でしょうか? 処理すべき行数は200行程度。ああ、いいい・・・等は10種類ほどで可変です。 in演算子で、配列をみれるような仕掛けがあるといいのですが。。。

  • エラー処理

    環境:IIS,ASP(VBScript) サーバー Windows2000Server ASP超初心者です。 処理の途中でエラーになっても On Error Resume Next と If Err.Number then ........ を組み合わせればうまく逃げられるのはわかるの ですが、On Error Resume Nextを書いてもエラー が表示されて落ちます。 #include file の中についてはOn Error Resume Nextは無効なのでしょうか?

  • VBAのエラー処理について

    EXCEL VBAのエラー処理で On Error GoToを使いましたが、 あるPCでは正常にエラー処理を行うのに、違うPCでは、 実行時エラー91 オブジェクト変数またはWithブロック変数が設定されていませんというエラーが起き、エラー処理行に行きません。 理由が分かる方、回答をお願いします。

  • エラーが発生した場合は VBA

    Sub Sample() On Error GoTo Err1 Dim i As Integer i = "あ" '←ココで構文エラーとなる。 MsgBox "あ" Debug.Print "無事終了します" Exit Sub Err1: Debug.Print "エラーになりました" i = 1 Resume Next 'エラーの発生した次の行から処理を続行します。 End Sub このようなエラー処理で エラーが発生した場合は MsgBox "あ" ではなく i = "あ" '←ココで構文エラーとなる。 に戻る事は出来ないのでしょうか?

  • マクロ実行時のエラー処理について

    VBAのエラー処理の方法について教えて下さい。 エクセル2007を使用しています。 VBAでシートの名前を以下のように変更しようとしています。 シート名1 ← "1" シート名2 ← "2" シート名3 ← "3" 記述内容は以下の通りです。 '〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 On Error GoTo Err1  For i = 1 to 3   Sheet(i).Name = i  'Sheet(i)の名前を変数"i"に変更する。 Err1:   Sheet(i).Delete   '上記処理でエラーが発生した場合はそのシートを削除する。  Next i '〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓  以上の処理を実行しようとした場合、同じ名前の既存シートが存在していたり、シート名に含まれてはいけない文字列が含まれていたりした場合、エラーが発生しますが、On Errorステートメントを使用してエラーが発生した場合の処理を実行したいのですが、1回目のエラーについてはOn Errorが働くのですが、2回目になるとOn Errorが働きません。  2回目以降のエラーも1回目と同様に処理したいのですが、コードの記述の変更方法や又は他の処理方法を教えて下さい。 エラーの種類は以下の通りです。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 実行時エラー'1004': シートの名前をほかのシート、Visual Basicで参照されるオブジェクト ライブラリまたは ワークシートを同じ名前に変更することはできません。 〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓〓 以上。 尚、On Error Resume Nextは処理を無視するだけなので使用したくありません。 以上、宜しくお願い致します。

  • ExcelのVBAでエラーになるのですが

     最近、VBAを始めたので、よくわかっていないのですが、以下のようなマクロを書いています。(長いので、かなり省略していますが)一応、動くようになったのですが、なぜか、一旦、最初(sheet 1)に戻ってしまうことがあります。(何度か繰り返して、進みますが) なぜなのかと考えると、該当シートが見つからないからのようなのですが、どのように対策したら良いのでしょうか? Dim s_A As String Sub Spec() s_A = "1" Call Spec3 Call Spec4 s_A = "2" Call Spec3 Call Spec4   'このあと s_A = "100" まで続く ActiveWorkbook.Close End Sub Sub Spec3() On Error Resume Next Do Until Selection.Value = ""   If ~ then Else ~ Else if ~ End If Loop 'ここで、動作を繰り返させている End Sub  そこで、エラー対策として、specの先頭にOn Error Resume Nextを入れるとエラーになりますよね?  該当シートがない場合は、次のシート(3行下)にジャンプさせたいのですが。  よろしくお願いします。

  • Excel VBA 条件分岐のスマートな書き方

    すみません。すごく初歩的な質問なのですが、 Excel VBAで以下のような条件分岐をさせたい場合、 もっとスマートな書き方できませんか? 命題 AとBに対して if not A then 処理X end if if not B then 処理Y end if if not(A and B) then 処理Z(この処理の中には処理Xと処理Yの結果が含まれている) end elseifを使った書き方が思い浮かばず、 同じことを何度も書いているようで、もっと上手に書けそうな気がしまして・・・ どなたかご教示頂けたらと思います。

  • VBAでの処理分岐方法を教えてほしいです

    VBAの分岐処理で悩んでおります。 誰かお助けお願いします。 A列に昇順で番号があります。 1 2 4 4 5 6 9 欠番や重複した数値があります。 やりたいことは欠番箇所に行を挿入し、連番にしたいです。 この例で言うと、3行目に1行を挿入し番号を3と入れる、6行目に2行挿入し7,8と連番にする。 連番になった後に、重複した数値に色を付けます。 以下私が作成したコードです。callで呼び出す予定です。 Sub 欠番判定数式() Dim i As Integer For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row Cells(i, 3) = "=if(iserror(if(A" & i & "-A" & i - 1 & ">1,""○"","" "")),"""",if(A" & i & "-A" & i - 1 & ">1,""○"","" ""))" Next End Sub Sub 行挿入() Dim c As Range, Target As Range For Each c In Range("C2:C" & Cells(Rows.Count, 1).End(xlUp).Row) If c = "○" Then If Target Is Nothing Then ''(1) Set Target = c Else Set Target = Union(Target, c) ''(2) End If End If Next c If Not Target Is Nothing Then Target.Select Selection.EntireRow.Insert , copyorigin:=xlFormatFromLeftOrAbove End Sub Sub 空白連番入力() Dim i As Integer For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) = "" Then Cells(i, 1) = (Cells(i, 1).Offset(1, 0).Value) - 1 End If Next End Sub Sub 番号重複確認() Dim i As Integer For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If Application.WorksheetFunction.CountIf(Range("$A$2:$A$" & Cells(Rows.Count, 1).End(xlUp).Row), Range("A" & i)) <> 1 Then Cells(i, 1).Interior.ColorIndex = 3 End If Next End Sub このコードを順に全て実行した時、1回目の処理で3行目と5行目に行挿入、そして番号が3と7と入力され連番に色が設定されます。 再度「欠番判定数式」を行い、次は8行目に行挿入し8と連番を入力させ処理を繰り返しさせたいです。 欠番は例として最高2個にしてますが、これから2個以上の可能性もあります。 一度全処理終了後、再度最初の処理(欠番判定数式)に戻り、欠番がある場合は行挿入させという処理を行わせ、欠番がない場合は次の処理に進めるという分岐方法を教えてほしいです。 よろしくお願いいたします

  • VBA エラー処理

    Excelにて作業を行っているワークシートとは別のワークシートに作成されているデータを画像として貼り付ける作業を行っている時にエラーが発生します 内容としてはsheet2に作成されているセルの内容を参照して画像として貼り付ける作業です コードを下記のように作成しました Sheets(2).Range("A1:DO4").CopyPicture Appearance:=xlScreen, Format:=xlPicture これをsheet1から実行させると正常に行われたり、エラーになってコードが止まる事が起きたりします Excel2013で実行して失敗になった場合は RangeクラスのPasteSpecialメソッドが失敗しましたになります Excel2003で同じコードを実行して失敗になった場合には 実行時エラー'1004' クリップボードを空に出来ません となります どちらのExcelでもエラーになった際に、デバッグを選択しVisual Basic Editor画面にして上部の継続ボタンを押せば画像が正常に貼り付き、コードが最後まで動作します ネットで調べてみたんですがエラーになった場合、再度その部分を実行させるには On Error Resume [0] なるコードを実行すれば良いという物を見つけて Sheets(2).Range("A1:DO4").CopyPicture Appearance:=xlScreen, Format:=xlPicture の前に書き込もうとしたんですが、On Error Resume [0]の文字がエラーになってOn Error Resumeの後には[0]は指定できないようです このようにエラーが出た場合、再度同じコード文を実行させるにはどうしたら良いのでしょうか? また、このようなエラーが発生した場合 On Error GoToを使ってsleepで適度なタイムラグを発生させてからペーストを行わせれば良いのか?とも思いコードを書いてみたりしたのですが私では、うまく動作させる事が出来ません この画像をペーストする時のエラーを回避させて最後までコードを実行させるにはどのようにしたら良いのでしょうか よろしくお願い致します