Excel VBA ブック内のエラーチェック方法

このQ&Aのポイント
  • Excel VBA を使って特定のセルがエラーになっているかどうかを確認する方法
  • シート全体やブック全体の中でエラーになっているセルを簡単にチェックする方法
  • Windows7とExcel2010環境で利用可能なエラーチェックの手法
回答を見る
  • ベストアンサー

Excel VBA ブック内にエラーがあるかないか

Excel VBA で、ある特定のセルが#REFなどのエラーになっているかどうかは If IsError(ThisWorkbook.Worksheets("Sheet1").Range("AB1256")) Then  MsgBox ("ファイルのデータが壊れています") End If というように、IsError()関数を使えば確認できます。 また、あるセル範囲の中にエラーになっているセルがあるのかどうかも、For文やFor Each文で順番にチェックしていけばできると思いますが、 シート全体、さらにはブック全体の中で、エラーになっているセルがあるのかないのかを簡単にチェックする方法はないでしょうか。エラーになっているセルは特定できなくてもいいです。 よろしくお願いします。(Windows7 , Excel2010)

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

たとえば sub macro1()  dim res as range  on error resume next  set res = ThisWorkbook.Worksheets("Sheet1").cells.specialcells(xlcelltypeformulas, xlerrors)  if not res is nothing then   msgbox "FOUND ERROR"  ’msgbox "FOUND " & application.counta(res) & " ERROR(s)"  else   msgbox "NO ERROR"  end if end sub みたいな。

yam2012
質問者

お礼

keithinさん。 すばやい回答ありがとうございます。 教えていただきました方法でエラーを検出することができました。 最初On Error Resume Nextを付け忘れていたため変なエラーが出ていました。 理由はよく分かりませんがOn Error Resume Nextで このエラーを無視しておくのがポイントのようですね。 ありがとうございました。

その他の回答 (1)

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.2

VBAでない方法であれば Ctrl+Gでジャンプウィンドウを表示し、「セルの選択」から「数式」を選び 「エラー値」をチェックし「OK」でエラー箇所が選択されます。 (ブック全体ではなく、シートごとになりますが) 他の方法ですと、Ctrl+Fの検索で普通に「#REF!」で検索するとか。 (検索場所をブックにすれば全体検索もできます)

yam2012
質問者

お礼

eden3616さん。 回答ありがとうございます。 keithinさんに教えていただきました方法で ブックに問題があることが分かった時に、 エラーの箇所が簡単に探せて便利です。 ありがとうございました。

関連するQ&A

  • Excel VBAで結合セルの扱いが失敗します。

    KenKen_SPさんの素晴らしいコードを参考に、特定の色のセルにおいてのみ、テキストを削除するマクロが以下です。このままでは結合セルのあるエクセルシートでエラーになってしまいます。 これを解決できませんでしょうか。よろしくお願いします。 For i = 1 To ThisWorkbook.Worksheets.Count ThisWorkbook.Worksheets(i).Select Dim C As Range For Each C In ActiveSheet.Range("A1:M55") If C.Interior.ColorIndex = 6 Then '6 - YELLOW C.ClearContents End If Next Next

  • エクセルVBAでのエラーの対処方法

    よろしくお願いします。 A1:1 B1:あ A2:2 B2:い A3:3 B3:う と書いてあるまとめシートと、1、2、3というシートがあるとします。 シート1のA1セルに「あ」、シート2のA1セルに「い」、シート3のA1セルに「う」と書き込まれるように、まとめA列の文字列からシート名を呼び出して書き込むようにVBAを組んでいます。 Dim sht_n As Variant Dim sht_c As Integer i = 7 sht_n = Worksheets("まとめ").Index sht_c = ThisWorkbook.Sheets.Count For sht_n = sht_n + 1 To sht_c Step 1 If Cells(i, 1).Value = "" Then i = i + 1 Else wb = Cells(i, 1).Value Worksheets("まとめ").Cells(i,2).Select Selection.Copy ThisWorkbook.Worksheets(wb).Activate Range("A1").Select Selection.PasteSpecial Paste:=xlValues こんな感じ。 下手なのは分かってます。あと、現在使っているものから書き出しているので間違えてる部分もあるかもしれません。 この状態だと、シート1がない場合にはエラーが出てしまって、そこで終わってしまいます。 まとめシートが空欄の場合はエラーを回避しているのですが、シートがない場合の回避方法が分かりません。 On Error Resume Nextは使わずに、シートがない場合にエラーを回避する方法はありますでしょうか。 分かるかた、よろしくお願いします。

  • Excel VBAで検索する

    Excel VBAで、Sheet1に貼り付けたテキスト内から Sheet2に記載した(1列ごとの)キーワードを検索し キーワードが含まれている行をSheet3に貼り付ける処理をしているのですが、始めたばかりなので上手くいきません。 下記がソースです。 Dim moji As String Dim word As String Dim result As Integer For i = 3 To 103 For j = 2 To 21 moji = ThisWorkbook.Worksheets("Sheet1").Cells (i, 1).Value word = ThisWorkbook.Worksheets("Sheet2").Cells (j, 2).Value result = InStr(moji, word) If doResult <> 0 Then For k = 1 To 100 ThisWorkbook.Worksheets("Sheet3").Cells (k, 1).Value= moji Next k End If Next j Next i このソースでは上手くいかないのですが、どこがダメなのか分からないので、解決の糸口がつかめません。 アドバイスなどお願いします。

  • 《エクセル2000VBA》これで実行時エラー '1004'が出るのはなぜでしょう?

    こんにちは。VBAの実行時エラーで困っています。 内容を抜粋したものが、下記のものになります。 If Worksheets(sname1).Range("M6") <> Empty Then MsgBox (sname1) MsgBox (Worksheets(sname1).Range("M6")) '該当入力シートの一番下の行を探す Worksheets(sname1).Range("M65536").End(xlUp).Offset(1).Select sname1はシート名の変数です。 2つのMsgBoxが間違いなく表示されますので、sname1に存在するシート名は入っていると思います。 今の状態で、該当入力シートの一番下の行を探す時点で実行時エラーが出てしまうのですが、なぜでしょうか?

  • VBA セルの削除

    開いているブック全てに対して、セルを削除するマクロを組んだのですが、うまく動作しません。 1. ブックのsheet1にてセルB2~B100の中で、値があるセルを特定 値の入ったセルがあれば、その値と同じ名前のシートが存在する 例) B2:値 1-A、シート名: 1-A B3:値 2-A、シート名: 2-A ... 2. 特定した値と同じ名前のシートをアクティブにする 3. そのシートにて「セルA1がブランクでない かつ セルB1の値がゼロ」と条件をかける 4. trueであれば、sheet1にて特定したセルへ戻る 5. 特定したセルとその右隣のセルを削除(上シフト) 6. 1.~5.を、sheet1のセルB2以降、値がブランクになるまで繰り返す 次の通り構文を作成、エラーなく実行できるのですが、結果は5.までしか処理されず、他のブックに対しても処理が走っていません。 格納した変数に問題がありそうなのですが、解決できず困っています。 Sub test() Dim WBK As Workbook For Each WBK In Workbooks If WBK.Name <> ThisWorkbook.Name Then WBK.Activate For i = 2 To 100 touroku = WBK.Worksheets("sheet1").Cells(i, 2).Value If WBK.Worksheets("sheet1").Cells(i, 2).Value <> "" Then WBK.Worksheets(touroku).Activate If ActiveSheet.Cells(1, 1) <> "" And ActiveSheet.Cells(2, 1).Value = 0 Then WBK.Worksheets("sheet1").Cells(i, 2).Resize(1, 2).Delete End If End If Next i WBK.Save End If Next WBK End Sub まだVBA初めて1ヶ月ほどで、基礎が理解できてきた程度なのですが、急ぎ完成させたいマクロなのでお力を貸してください。 よろしくお願いいたします。

  • エクセルVBAでSheet1.ActivateとSheet(n).Activate

    エクセル2000です。 VBAでの疑問点を教えてください。 Sub test1() Sheet1.Activate MsgBox ActiveSheet.Name End Sub これは問題なく作動します。 Sub test2() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheet(n).Activate MsgBox ActiveSheet.Name Next End Sub これは「SubまたはFunctionがていぎされていません」というエラーになります。 もちろん、 Sub test3() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets(n).Activate MsgBox ActiveSheet.Name Next End Sub のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。 Sub test4() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets("Sheet" & n).Activate MsgBox ActiveSheet.Name Next End Sub のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう? しょうもない質問でごめんさない。

  • エクセル VBAで セルがエラーの場合の判別法は?

    ワークシート関数ならセルA1がエラーかどうかは =ISERROR(A1) でわかりますが、VBAで 「If A1がエラーだったら Then~」とういのはどのように書くのでしょうか?

  • エクセルVBAコピーしたセルを順番に張り付ける方法

    おはようございます。 for文の処理方法がわからないので質問します。 やりたいこと 例・sheet2・sheet2・sheet4・・・と A~B列のセルに文字が有る場合 B列のセルに文字が有れば その行全体をコピーして 【貼り付け】シートに張り付けたいのですが 私の考えたコードだと コピーまではうまくできるのですが 【貼り付け】シートに行全体を張り付ける際 行を上書きされてしまいます。 (sheet2の行を張り付けたら 次にsheet3の行を貼り付けシートに上書きしてしまう) このような上書きをされずに すでに【貼り付け】シートにコピーされたものが有る場合 一つ下の行に貼り付けって出来ないでしょうか? コードを下記に記載します。 すいませんがコードを書いて頂けると助かります。 宜しくお願い致します。 追記:【貼り付け】シートは一番左端にあります。 Sub test() Dim b As Variant Dim i As Long Dim io As Integer Const  AAA  As String = "" Set b = Worksheets("貼り付け") For i = 1 To 100 For io = 2 To ThisWorkbook.Worksheets.Count If WorksheetFunction.CountIf(Worksheets(io).Rows(i), "") > 0 Then  Worksheets(io).Rows(i).Copy   b.Rows(i).Offset(1, 0).PasteSpecial (xlPasteAll)’ここの貼り付け方が間違ってますよね・・・ End If Next Next End Sub

  • VBAでワークシートのセルにIF文を入れる

    こんにちは。 VBAでワークシートのセルにIF文を入れ、実行するとエラーがでます。 記述間違いでしょうか? 記述 Worksheets(h.Value).Range("D14").Formula = "=IF(ISERROR(((D5+D6+D7)/D4) = TRUE,"",(D5+D6+D7)/D4)) どこがおかしいのか、どうか教えてください。

  • エクセル、ワークシートが保護されているかどうかを判断するVBAは?

    以下のように書いてもダメでした。 どう直せばよいでしょうか? Sub TEST2() Dim n As Integer n = ThisWorkbook.Worksheets.Count For i = 1 To n If Worksheets(i).Protect = False Then MsgBox Worksheets(i).Name End If Next End Sub

専門家に質問してみよう