Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


2799 / 13644 ツリー ←次へ | 前へ→

【65895】SpecialCellsのエラー処理 けい 10/7/6(火) 11:11 質問[未読]
【65896】Re:SpecialCellsのエラー処理 メタ 10/7/6(火) 11:20 回答[未読]
【65902】Re:SpecialCellsのエラー処理 けい 10/7/6(火) 13:18 お礼[未読]
【65897】Re:SpecialCellsのエラー処理 Jaka 10/7/6(火) 12:23 発言[未読]
【65901】Re:SpecialCellsのエラー処理 けい 10/7/6(火) 13:17 お礼[未読]
【65903】Re:SpecialCellsのエラー処理 Jaka 10/7/6(火) 13:36 発言[未読]
【65911】Re:SpecialCellsのエラー処理 けい 10/7/6(火) 17:10 質問[未読]
【65912】Re:SpecialCellsのエラー処理 Jaka 10/7/6(火) 17:25 発言[未読]
【65913】Re:SpecialCellsのエラー処理 けい 10/7/6(火) 17:50 質問[未読]
【65918】Re:SpecialCellsのエラー処理 Jaka 10/7/7(水) 11:05 発言[未読]
【65920】Re:SpecialCellsのエラー処理 けい 10/7/7(水) 13:02 お礼[未読]

【65895】SpecialCellsのエラー処理
質問  けい  - 10/7/6(火) 11:11 -

引用なし
パスワード
   いつもお世話になります。
エラー処理についてよい方法がありましたら教えていただきたいのですが、
以下のように、指定範囲内に空白があった場合に"空白"とういう文字を入れるコードを書きました。ない場合はエラーになるので以下のようなエラー処理をしたのですが、空白がないパターンの方が多く、同じマクロを複数シートに実行するためMsgBoxで毎回”はい”と押しながら進める意外の方法はないか探しています。
IsEmptyを使うなど、でもかまいません。
条件にあうセルがあってもなくても、マクロを一気にすすめて画面上で”はい”を押さなくてもよい方法はないでしょうか。


Sub test()
  Dim Deg空白 As Range

     Set Deg空白 = Range(Cells(i, "A"), Cells(i + x , "B")).SpecialCells(xlCellTypeBlanks)
     On Error GoTo 0

     If Deg空白 Is Nothing Then
     MsgBox "Deg空白セルはありません。"

     Else
     Deg空白.Value = "(空白)"
     End If
End Sub

【65896】Re:SpecialCellsのエラー処理
回答  メタ  - 10/7/6(火) 11:20 -

引用なし
パスワード
   msgbox 〜
のコードを削るだけでは駄目ですか?

【65897】Re:SpecialCellsのエラー処理
発言  Jaka  - 10/7/6(火) 12:23 -

引用なし
パスワード
   >  Dim Deg空白 As Range
  on error resume next
>     Set Deg空白 = Range(Cells(i, "A"), Cells(i + x , "B")).SpecialCells(xlCellTypeBlanks)
>     On Error GoTo 0

SpecialCellsのエラー回避は、
on error resume next
で対応。

【65901】Re:SpecialCellsのエラー処理
お礼  けい  - 10/7/6(火) 13:17 -

引用なし
パスワード
   ▼Jaka さん:

If を外したらメッセージを出さずに進められました。
これでスピーディーにできそうです。
ありがとうございました。


>>  Dim Deg空白 As Range
>  on error resume next
>>     Set Deg空白 = Range(Cells(i, "A"), Cells(i + x , "B")).SpecialCells(xlCellTypeBlanks)
>>     On Error GoTo 0
>
>SpecialCellsのエラー回避は、
>on error resume next
>で対応。

【65902】Re:SpecialCellsのエラー処理
お礼  けい  - 10/7/6(火) 13:18 -

引用なし
パスワード
   ▼メタ さん:

ifにこだわらずに
On Error Resume Next
だけでエラーが防げるとわかりました。
どうもありがとうございました。


>msgbox 〜
>のコードを削るだけでは駄目ですか?

【65903】Re:SpecialCellsのエラー処理
発言  Jaka  - 10/7/6(火) 13:36 -

引用なし
パスワード
   ▼けい さん:
>If を外したらメッセージを出さずに進められました。
外したらだめです。
Deg空白の判定は必要。
    If Deg空白 Is Nothing Then

【65911】Re:SpecialCellsのエラー処理
質問  けい  - 10/7/6(火) 17:10 -

引用なし
パスワード
   ▼Jaka さん:

Ifを外してはだめですか?

On Error Resume Next
Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).SpecialCells(xlCellTypeBlanks)

Deg空白.Value = "(空白)"

としたらエラーは出ずに、進み、空白があったところには(空白)と入ってました。

If Deg空白 Is Nothing Then
は、 Deg空白.Value = "(空白)"の上に入れればよいのですか?


>▼けい さん:
>>If を外したらメッセージを出さずに進められました。
>外したらだめです。
>Deg空白の判定は必要。
>    If Deg空白 Is Nothing Then

【65912】Re:SpecialCellsのエラー処理
発言  Jaka  - 10/7/6(火) 17:25 -

引用なし
パスワード
   SpecialCellsは、該当するセルが無いと実行エラーになります。
それをスキップするために on error resume next を使ったとします。

Dim aaa as range
set aaa = SpecialCellsのコード
をエラートラップすると、aaaには何もセットされていません。
つまり、nothing

何もセットされていなかった場合の処理は????
知らずに何も無い変数を使ったりするとここでもエラーになります。

【65913】Re:SpecialCellsのエラー処理
質問  けい  - 10/7/6(火) 17:50 -

引用なし
パスワード
   ▼Jaka さん:

ご回答ありがとうございます。

Dim Deg空白 As Range
On Error Resume Next
Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).SpecialCells(xlCellTypeBlanks)
Deg空白.Value = "(空白)"

この1番下で空白をに"(空白)"を入れていますが、マクロを実行した後に
エラーじゃなかったところに"(空白)"が入っていました。。。

なのでエラーじゃない時も無視をされた訳ではないように思えました。
複数シートをチェックしましたがみなそうなっていました。
でももしこのままで危険な状態ならば

上の3行にIf Deg空白 nothing then
を入れる場合の場所と、そのIfに対してのEndの書き方を教えていただけますでしょうか。
よろしくお願いいたします。


>SpecialCellsは、該当するセルが無いと実行エラーになります。
>それをスキップするために on error resume next を使ったとします。
>
>Dim aaa as range
>set aaa = SpecialCellsのコード
>をエラートラップすると、aaaには何もセットされていません。
>つまり、nothing
>
>何もセットされていなかった場合の処理は????
>知らずに何も無い変数を使ったりするとここでもエラーになります。

【65918】Re:SpecialCellsのエラー処理
発言  Jaka  - 10/7/7(水) 11:05 -

引用なし
パスワード
   下記コードの場合、空白セルが無いのにエラーにならないのは、
On Error Resume Next が、効いているから。

>Dim Deg空白 As Range
>On Error Resume Next
>Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).SpecialCells(xlCellTypeBlanks)
>Deg空白.Value = "(空白)"

通常の考え方なら、エラートラップをするのは、この行だけでですから、
これを過ぎたら、トラップを解除しておきます。
>Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).SpecialCells(xlCellTypeBlanks)

このように解除。
>On Error Resume Next
>Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).SpecialCells(xlCellTypeBlanks)
On Error Goto 0
>Deg空白.Value = "(空白)"

もし、空白セルが無い場合は、「Deg空白」に何もセットされていないわけですから。
エラートラップが解除された状態で、
>Deg空白.Value = "(空白)"
などとやると、エラーになるはずです。

>この1番下で空白をに"(空白)"を入れていますが、マクロを実行した後に
>エラーじゃなかったところに"(空白)"が入っていました。。。
これは、何かの間違いか、勘違いと思います。


Dim Deg空白 As Range
On Error Resume Next
Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).
(xlCellTypeBlanks)
On Error Goto 0
If Not Rng Is Nothing Then
  Deg空白.Value = "(空白)"
Else
  空白セルが見つからなかった場合にさせたい処理。
End If


おまけ。
覚えておくとためになるだろう事。

【253】良く解らないSpecialCells
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=253;id=FAQ

SpecialCellsは、使った形跡の無い(UsedRangeの範囲以外)セルを無視します。
【42687】範囲指定について
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=42687;id=excel

【43413】SpecialCellsの限界って・・・。
ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=43413;id=excel

【65920】Re:SpecialCellsのエラー処理
お礼  けい  - 10/7/7(水) 13:02 -

引用なし
パスワード
   ▼Jaka さん:

色々と回答いただき、本当にありがとうございました。
困った時のサイトなども教えていただきありがとうございます。

今回の処理で、空白が見つからないときは何もしないで
そのまま進めたいということでした。

色々な案をいただきましたのを
勉強していきたいと思います。

ありがとうございました。


>下記コードの場合、空白セルが無いのにエラーにならないのは、
>On Error Resume Next が、効いているから。
>
>>Dim Deg空白 As Range
>>On Error Resume Next
>>Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).SpecialCells(xlCellTypeBlanks)
>>Deg空白.Value = "(空白)"
>
>通常の考え方なら、エラートラップをするのは、この行だけでですから、
>これを過ぎたら、トラップを解除しておきます。
>>Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).SpecialCells(xlCellTypeBlanks)
>
>このように解除。
>>On Error Resume Next
>>Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).SpecialCells(xlCellTypeBlanks)
> On Error Goto 0
>>Deg空白.Value = "(空白)"
>
>もし、空白セルが無い場合は、「Deg空白」に何もセットされていないわけですから。
>エラートラップが解除された状態で、
>>Deg空白.Value = "(空白)"
>などとやると、エラーになるはずです。
>
>>この1番下で空白をに"(空白)"を入れていますが、マクロを実行した後に
>>エラーじゃなかったところに"(空白)"が入っていました。。。
>これは、何かの間違いか、勘違いと思います。
>
>
>Dim Deg空白 As Range
>On Error Resume Next
>Set Deg空白 = Range(Cells(i, "A"), Cells(i + x - 1, "B")).
>(xlCellTypeBlanks)
>On Error Goto 0
>If Not Rng Is Nothing Then
>  Deg空白.Value = "(空白)"
>Else
>  空白セルが見つからなかった場合にさせたい処理。
>End If
>
>
>おまけ。
>覚えておくとためになるだろう事。
>
>【253】良く解らないSpecialCells
>ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=253;id=FAQ
>
>SpecialCellsは、使った形跡の無い(UsedRangeの範囲以外)セルを無視します。
>【42687】範囲指定について
>ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=42687;id=excel
>
>【43413】SpecialCellsの限界って・・・。
>ht tp://www.vbalab.net/vbaqa/c-board.cgi?cmd=ntr;tree=43413;id=excel

2799 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free