プロが教えるわが家の防犯対策術!

初心者です。
Sub Ksakujyo()
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
End Sub
これでは対象セルが空白だったら該当するセルが見つかりませんと出ます。
それで
If Range Is Nothing Then
"対象がありません"
End If
を間に入れますが多分rangeのところが違うのでしょうね?
それとこれは選択範囲を選択してないと全ての行で削除されるみたいです。
かなり調べましたがお手上げです。

どなたかご教授よろしくお願いします。

A 回答 (3件)

考えてくださいとは言いましたが,追加の質問をしてくださいと言ったつもりはなかったのですけどね。

余計なことを書いてしまったようです。

作成例:
sub macro3()
 if selection.count = 1 then exit sub
 on error resume next
 selection.specialcells(xlcelltypeblanks).delete shift:=xlshiftup
exit sub



追加ご質問に書かれた新しいマクロについてのご相談は,ダメな状況についての具体的なご説明をもう一度キチンと添えて,別のご相談として投稿し解決してください。
    • good
    • 1
この回答へのお礼

ありがとうございます。
成る程、こうすれば良いのですね。
よけいなことではないですよ、勉強になりました。
お世話になりました。

お礼日時:2011/10/26 09:51

specialcellsでselectionの範囲に指定の条件のセルが無いと,必ずエラーになります。



回避策1:別の方法で検査する
sub macro1()
 if application.counta(selection) = selection.count then
  msgbox "全て埋まっています"
  exit sub
 end if

 selection.specialcells(xlcelltypeblanks).delete shift:=xlshiftup
end sub


回避策2:変数を使うことを憶える
sub macro2()
 dim h as range
 on error resume next
 set h = selection.specialcells(xlcelltypeblanks)
 if h is nothing then
  msgbox "空のセルはありません"
  exit sub
 end if

 h.delete shift:=xlshiftup
end sub




#別の注意
ご質問の本題ではありませんが,specialcellsは「範囲ではなく一個のセルを選んでいる」時に,動作があなたの意図しているのとは違います。
練習用に
sub macro3()
selection.specialcells(xlcelltypeblanks).select
end sub
とだけ書いたマクロを用意してよく実験して動作を確かめ,必要に応じてまた工夫を考えてみてください。
    • good
    • 0
この回答へのお礼

解答ありがとうございます。
specialcellsでselectionの範囲に指定の条件のセルが無いと,必ずエラーになります。
よくわかりました。
それで気が付いたのですが、これでは範囲指定していなくても全ての空白が削除になります。
それで見よう見まねでやってみました
Sub Ksakujyo()
Dim ObjRange As Range
On Error Resume Next
Set ObjRange = Application.InputBox("削除範囲を選択して下さい。", "印刷範囲", Type:=8)
On Error GoTo 0

If ObjRange Is Nothing Then
MsgBox "キャンセルされました。"
Exit Sub
End If
With ActiveSheet
If Application.CountA(Selection) = Selection.Count Then
MsgBox "全て埋まっています"
Exit Sub
End If
Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp
End With
End Sub

が、駄目です、これでも範囲指定していないところまで削除になります。
ご教授よろしくおねがいします。

お礼日時:2011/10/25 12:28

どういう状態のワークシートをどのような結果に持っていきたいのか質問内容からうまく読み取れません。


もう少し詳しく説明をしてもらえますか。
また、If Range is Nothing Then~End Ifをどこに挟みこんだのかも明示してください。
出来ればコード実行前とコード実行後のワークシートの状態を手作業で再現してハードコピー取って貼り付けて頂けると分かりやすいです。
    • good
    • 0
この回答へのお礼

解答ありがとうございます。
単純に空白セルを削除したいです。

まずマクロの記録です
Sub Ksakujyo()
Selection.SpecialCells(xlCellTypeBlanks).Select
Selection.Delete Shift:=xlUp
End Sub

Sub Ksakujyo()
Selection.SpecialCells(xlCellTypeBlanks).Select
If Selection.Areas Is nothig Then
MsgBox "対象が空白です"
End If
  Selection.Delete Shift:=xlUp
End Sub
としますがRangeをSelection.Areas とかにしてもだめみたいですが
宜しくお願いします。

お礼日時:2011/10/25 11:33

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