- ベストアンサー
Excel VBA初心者のためのセル削除の問題
- Excel VBAを使ってセルの削除を行う際に問題が発生しています。特定の条件を満たすセルを削除するために、特殊なセルを選択し、削除操作を行っていますが、空白のセルを条件として指定した場合にエラーが発生します。これはrangeの指定方法が間違っている可能性があります。
- また、選択範囲を指定しない場合、すべての行が削除されてしまうため、注意が必要です。これについても問題解決には至っていません。
- Excel VBAの初心者であるため、この問題については調査を行いましたが解決策が見つかっていません。解決方法やご教授いただける方がいらっしゃいましたら、お願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
考えてくださいとは言いましたが,追加の質問をしてくださいと言ったつもりはなかったのですけどね。余計なことを書いてしまったようです。 作成例: sub macro3() if selection.count = 1 then exit sub on error resume next selection.specialcells(xlcelltypeblanks).delete shift:=xlshiftup exit sub 追加ご質問に書かれた新しいマクロについてのご相談は,ダメな状況についての具体的なご説明をもう一度キチンと添えて,別のご相談として投稿し解決してください。
その他の回答 (2)
- keithin
- ベストアンサー率66% (5278/7941)
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 とだけ書いたマクロを用意してよく実験して動作を確かめ,必要に応じてまた工夫を考えてみてください。
お礼
解答ありがとうございます。 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 が、駄目です、これでも範囲指定していないところまで削除になります。 ご教授よろしくおねがいします。
- nobu_suzuki1
- ベストアンサー率35% (25/70)
どういう状態のワークシートをどのような結果に持っていきたいのか質問内容からうまく読み取れません。 もう少し詳しく説明をしてもらえますか。 また、If Range is Nothing Then~End Ifをどこに挟みこんだのかも明示してください。 出来ればコード実行前とコード実行後のワークシートの状態を手作業で再現してハードコピー取って貼り付けて頂けると分かりやすいです。
お礼
解答ありがとうございます。 単純に空白セルを削除したいです。 まずマクロの記録です 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 とかにしてもだめみたいですが 宜しくお願いします。
お礼
ありがとうございます。 成る程、こうすれば良いのですね。 よけいなことではないですよ、勉強になりました。 お世話になりました。