- ベストアンサー
EXCEL VBAで空白削除のマクロを作成しても削除されない問題
- EXCEL VBAで空白削除のマクロを作成しましたが、削除が正常に行われない問題が発生しています。
- セルの選択範囲や削除方法に問題がある可能性があります。
- 初心者ですので、どなたか修正方法を教えていただけないでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
こんなカンジですかね? sub macro3() dim Target as range on error resume next set target = application.inputbox("目的のセル範囲を選んでください", type:=8) if target is nothing then msgbox "キャンセルされました" exit sub end if if target.count = 1 then msgbox "複数個のセルを選んでください" exit sub end if target.specialcells(xlcelltypeblanks).delete shift:=xlshiftup end sub
その他の回答 (4)
- mu2011
- ベストアンサー率38% (1910/4994)
NO2です。 >キャンセルしたときにデバッグでオブジェクトが必要ですと、出ますが? ⇒最初の「On Error Resume Next」があれば以下の定義は不要です。 因みに「End Sub」の直前の「Exit Sub」はMsgbox直後に置いた方がよいのでは ないでしょうか。
お礼
わかりました。 ありがとうございました。
- mt2008
- ベストアンサー率52% (885/1701)
ANo.1です。 > つまりIf Selection.Count = 1 Then Exit Sub > のExit Subは入らないってことですね。 違います。 削らないで下さい、必要な箇所です。 私が回答したのは、ただ単に If Selection.Count = 1 Then Exit Sub の前に ObjRange.Select を一行追加して、InputBoxで指定した範囲を選択しなさいと言う意味です。
お礼
わかりました。 ありがとうございます。
- mu2011
- ベストアンサー率38% (1910/4994)
取り敢えず、「On Error GoTo 0」と2個目の「On Error Resume Next」は不要です。 SelectionはObjRangeではないでしょうか。
お礼
解答ありがとうございます。 しかし、これがないとキャンセルしたときにデバッグでオブジェクトが必要ですと、出ますが?
- mt2008
- ベストアンサー率52% (885/1701)
[F8]でステップ実行して見ましたか? If Selection.Count = 1 Then Exit Sub の行でExitしていると思います。 Application.InputBoxで削除範囲を指定していますが、その範囲が「Select」された訳では無いからです。 この時点でSelectされているのはマクロ起動前にアクティブなセルです。 If Selection.Count = 1 Then Exit Sub の前に ObjRange.Select を一行追加して指定した削除範囲を「Select」しましょう。
お礼
解答ありがとうございます。 つまりIf Selection.Count = 1 Then Exit Sub のExit Subは入らないってことですね。 それでObjRange.Selectを追加して Sub Ksakujyo() Dim ObjRange As Range Set ObjRange = Application.InputBox("削除範囲を選択して下さい。", "印刷範囲", Type:=8) If ObjRange Is Nothing Then MsgBox "キャンセルされました。" End If ObjRange.Select If Selection.Count = 1 Then On Error Resume Next Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp End If End Sub となりましたが、これでも削除が実行されません。 ???うーーん、わからない。 宜しくお願いします。
補足
あー、成る程、 Application.InputBoxで削除範囲を指定していますが、その範囲が「Select」された訳では無いからです。 この時点でSelectされているのはマクロ起動前にアクティブなセルです。 一つのセルでなく、3つ位セルを選択した状態でマクロを実行すると良くわかりますね。 そういうことだったんですね。 しかし、[F8]でステップ実行して見ると Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp に黄色の帯がかからず次のEnd Ifまで飛び越えます。 実行されてないってことですよね? でここからどうすればよいでしょうか? 宜しくお願いします。
お礼
ありがとうございます。 こうやるんですね。 さすがですね、でも自分ではまだまだ出来ないですが。 ありがとうございました。