重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

【質問】
以下コードは 1行目から最終行までのE列の値、あ、い、う、その他に
よって、各動作をする、マクロです

しかし、E列に エラーが発生した時に #DIV/0! 以下で止まります
当該事象を、止まらないように、進めたいです

なお、#DIV/0! 発生時は、以下の処理でOKです
逆に、なぜ、#DIV/0!発生時に、Case Elseに分類されないのでしょうか?

ご存じの方、宜しくお願いします

Case Else
Cells(i, "i") = Cells(i, "c")

【エラー】
実行時エラー13。型が一致しません
Case "あ"


【コード】
Sub sample()


i = 1

lastrow = Cells(Rows.Count, "a").End(xlUp).Row
Do While i <= lastrow

Select Case Cells(i, "e")

Case "あ"

Cells(i, "i") = Cells(i, "c")

Case "い"

Cells(i, "i") = Cells(i, "c") & "-1"

Case "う"
Cells(i, "i") = Cells(i, "c") & "-2"

Case Else
Cells(i, "i") = Cells(i, "c")

End Select

' 行番号変数の値に1を加え、次の行に進む
i = i + 1

Loop

End Sub

  • 画像を添付する (ファイルサイズ:10MB以内、ファイル形式:JPG/GIF/PNG)
  • 今の自分の気分スタンプを選ぼう!
あと4000文字

A 回答 (3件)

セルの値がエラーの時は、それと文字列は比較できないというエラーなので、IsError関数でセルがエラーかどうかを事前に判断します。


エラー時のcell_eへの代入はelseに行く値なら何でも良いです。

(前略)
Do While i <= lastrow

If IsError(Cells(i, "e")) Then
cell_e = "エラー"
Else
cell_e = Cells(i, "e")
End If

Select Case cell_e
Case "あ"
(後略)
    • good
    • 1

こんにちは



>止まらないように、進めたいです
実際に行おうとしている処理内容が不明ですが、ご提示のコードに関して言うならば、セル値をテキストで取得しておけば、セル値がエラー値の場合はご希望のように「Case Else」として処理されるようになります。
具体的には、
 i = 1
 lastrow = Cells(Rows.Count, "a").End(xlUp).Row
 Do While i <= lastrow
  Select Case Cells(i, "e").Text '←ここを変更

 ---- 以下省略 -----

のようにしておけば処理できると思います。


>なぜ、#DIV/0!発生時に、Case Elseに分類されないのでしょうか?
発生しているのは、「13 型が一致しません」のエラーですよね?
原因は、処理振り分けのための比較時にエラーが発生しているので、振り分け先を判断できないためです。
処理を振り分ける前にエラーが発生しているので、その後の処理は中断されます。

VBAはとりあえず型宣言などなくても実行できますし、型変換も行ってくれるようなファジーな言語なので、そのあたりに起因すると言えるかもしれません。
(そのあたりを把握していれば、エラーを起こさなくてもすみます。)
例えば、
 a = 100
 b = "string"
 If a = b Then MsgBox "○" Else MsgBox "×"
のようなコードでも、そのままエラーなく実行できますが、型宣言を入れて

 Dim a As Long
 Dim b As String
 a = 100
 b = "string"
 If a = b Then MsgBox "○" Else MsgBox "×"
として実行すると、ご質問と同じエラーが発生します。
    • good
    • 1

On Error Resume Next


を先頭に追加してください。エラーがあっても、無視して実行するようになります。

Sub sample()

On Error Resume Next
i = 1

lastrow = Cells(Rows.Count, "a").End(xlUp).Row
・・以下省略・・・
    • good
    • 1

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!