EXCEL VBAで空白削除のマクロを作成しても削除されない問題

このQ&Aのポイント
  • EXCEL VBAで空白削除のマクロを作成しましたが、削除が正常に行われない問題が発生しています。
  • セルの選択範囲や削除方法に問題がある可能性があります。
  • 初心者ですので、どなたか修正方法を教えていただけないでしょうか。
回答を見る
  • ベストアンサー

EXCEL VBAで空白削除のマクロを作りましたが

削除されません。 下記のとおりですが、どう考えても動きません、どなたか修正をお願いします。 初心者です。宜しくお願いします。 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 "キャンセルされました。" End If If Selection.Count = 1 Then Exit Sub On Error Resume Next Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp Exit Sub End Sub

質問者が選んだベストアンサー

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.4

こんなカンジですかね? 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

kyon0512
質問者

お礼

ありがとうございます。 こうやるんですね。 さすがですね、でも自分ではまだまだ出来ないですが。 ありがとうございました。

その他の回答 (4)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.5

NO2です。 >キャンセルしたときにデバッグでオブジェクトが必要ですと、出ますが?  ⇒最初の「On Error Resume Next」があれば以下の定義は不要です。   因みに「End Sub」の直前の「Exit Sub」はMsgbox直後に置いた方がよいのでは   ないでしょうか。

kyon0512
質問者

お礼

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

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.3

ANo.1です。 > つまりIf Selection.Count = 1 Then Exit Sub > のExit Subは入らないってことですね。 違います。 削らないで下さい、必要な箇所です。 私が回答したのは、ただ単に If Selection.Count = 1 Then Exit Sub の前に ObjRange.Select を一行追加して、InputBoxで指定した範囲を選択しなさいと言う意味です。

kyon0512
質問者

お礼

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

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.2

取り敢えず、「On Error GoTo 0」と2個目の「On Error Resume Next」は不要です。 SelectionはObjRangeではないでしょうか。

kyon0512
質問者

お礼

解答ありがとうございます。 しかし、これがないとキャンセルしたときにデバッグでオブジェクトが必要ですと、出ますが?

  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.1

[F8]でステップ実行して見ましたか? If Selection.Count = 1 Then Exit Sub の行でExitしていると思います。 Application.InputBoxで削除範囲を指定していますが、その範囲が「Select」された訳では無いからです。 この時点でSelectされているのはマクロ起動前にアクティブなセルです。 If Selection.Count = 1 Then Exit Sub の前に ObjRange.Select を一行追加して指定した削除範囲を「Select」しましょう。

kyon0512
質問者

お礼

解答ありがとうございます。 つまり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 となりましたが、これでも削除が実行されません。 ???うーーん、わからない。 宜しくお願いします。

kyon0512
質問者

補足

あー、成る程、 Application.InputBoxで削除範囲を指定していますが、その範囲が「Select」された訳では無いからです。 この時点でSelectされているのはマクロ起動前にアクティブなセルです。 一つのセルでなく、3つ位セルを選択した状態でマクロを実行すると良くわかりますね。 そういうことだったんですね。 しかし、[F8]でステップ実行して見ると Selection.SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp に黄色の帯がかからず次のEnd Ifまで飛び越えます。 実行されてないってことですよね? でここからどうすればよいでしょうか? 宜しくお願いします。

関連するQ&A

  • EXCEL VBAで

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

  • エクセル マクロ(VBA) 空白&重複の削除

    データの空白と重複を削除(上詰め)し、10行目から並べる というマクロを書きたいです。 下記のマクロを実行すると、添付の緑色のセルのように、 なぜか空白の部分ができてしまいます。 緑色の空白を詰めるには、どのように書けばよいでしょうか。 さらに、Sheet2のデータを元にマクロを実行した時に、そのデータは 変更せずに、結果をSheet3に表示したいのですが、その方法を教えて下さい。 (現在のマクロだと、実行元のデータがある同じシート内で整列されます。) - Sub macro1() Dim i As Long On Error Resume Next For i = 1 To 10 With Columns(i) .SpecialCells(xlCellTypeBlanks).Delete shift:=xlShiftUp .RemoveDuplicates Columns:=1, Header:=xlNo End With Next i Range("1:9").Insert shift:=xlShiftDown End Sub -

  • VBAの空白行削除について教えて下さい。

    以下のサイトにでてくるA列で空白セルを探し出し、その行全体を削除する方法を利用したいです。 書いてあるコードなのですが、 http://veaba.keemoosoft.com/2012/12/376/ Sub DeleteRowsWithBlankCells(ByRef argRange As Range) On Error Resume Next argRange.SpecialCells(xlCellTypeBlanks).EntireRow.Delete On Error GoTo 0 End Sub と Call DeleteRowsWithBlankCells(Range("A1:A10")) はそれぞれどのように書けばいいのですか? End Subの前にCall DeleteRowsWithBlankCells(Range("A1:A10"))を書けばいいのですか? Callで呼び出してからSub以降ですか? Sub以降はそのままですか?どこか書き換えるのですか? Sub以降の書き方が今まで知っている書き方と違うのでよくわからなくなってしまいました。 宜しくお願い致します。

  • 指定した範囲内が空白なら行削除するマクロ

    エクセルで指定した範囲内(A列からC列まで)で何も文字が入っていなければ(空白)、行を削除する、というマクロを教えてください。 いくつか調べて、以下を試しましたが、何も動作しませんでした。 どなたかアドバイスをいただければ助かります。 よろしくお願いします。 Sub DeleteBlankRows2() Application.ScreenUpdating = False On Error Resume Next With Columns("A:C") .SpecialCells(xlCellTypeConstants).EntireRow.Hidden = True .SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True .SpecialCells(xlCellTypeComments).EntireRow.Hidden = True .SpecialCells(xlCellTypeVisible).EntireRow.Delete .EntireRow.Hidden = False End With Application.ScreenUpdating = True End Sub

  • エクセル2010 VBA 行削除

    特定列が空白であれば行削除をしたいのですが、下記コードでうまく削除は出来るのですが、応答なしになったり、とても遅いのですが、もう少し早く処理出来る方法はありますか? E列が空白であれば行削除をしたいのですが・・ With Range("E13", Cells(Rows.Count, 5).End(xlUp)) .AutoFilter Field:=1, Criteria1:="" On Error Resume Next Set rng = .Offset(1).Resize(.Rows.Count - 1).SpecialCells(xlCellTypeVisible) If Err.Number = 0 Then rng.EntireRow.Delete On Error GoTo 0 .AutoFilter End With

  • エクセル VBAについて。

    Private Sub ComboBox2_Change() On Error Resume Next With Me.ComboBox2 If .ListCount < 0 Then Exit Sub If .Value = "" Then Exit Sub Me.Range("K45").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 2).Value Me.Range("K48").Value = _ Worksheets("マスタ").Range(.List(.ListIndex, 1)).Offset(0, 4).Value End With End Sub これをマスタのU列とW列を表示したい場合、どこを変えれば良いのでしょうか? 今はD列とF列が表示されております。

  • 選択範囲内の空白セルだけ抜き出すマクロでエラー(OfficeXP)

    OfficeXPのExcelを使用しています。 選択した範囲に空白のセルがあったらそこにスペースを入力するというマクロで、下記の一行だけ書きました。 Sub Test() Selection.SpecialCells(xlCellTypeBlanks).Value = " " End Sub 空白のセルが有った場合は問題ないのですが、無いときにエラーになります。 どのようなエラー処理をすればこれを回避出来るのでしょうか?教えて下さい。

  • ExcelのVBAでエラーになるのですが

     最近、VBAを始めたので、よくわかっていないのですが、以下のようなマクロを書いています。(長いので、かなり省略していますが)一応、動くようになったのですが、なぜか、一旦、最初(sheet 1)に戻ってしまうことがあります。(何度か繰り返して、進みますが) なぜなのかと考えると、該当シートが見つからないからのようなのですが、どのように対策したら良いのでしょうか? Dim s_A As String Sub Spec() s_A = "1" Call Spec3 Call Spec4 s_A = "2" Call Spec3 Call Spec4   'このあと s_A = "100" まで続く ActiveWorkbook.Close End Sub Sub Spec3() On Error Resume Next Do Until Selection.Value = ""   If ~ then Else ~ Else if ~ End If Loop 'ここで、動作を繰り返させている End Sub  そこで、エラー対策として、specの先頭にOn Error Resume Nextを入れるとエラーになりますよね?  該当シートがない場合は、次のシート(3行下)にジャンプさせたいのですが。  よろしくお願いします。

  • エクセルのマクロ

    セルの値が変わったら動くマクロですが、2つ書くとエラーが出ます。 どのように直したらいいでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Select Case Target.Address If Intersect(Target, Range("EK22")) Is Nothing Then Exit Sub Else Range("EK24:EM28").Select Selection.ClearContents End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Intersect(Target, Range("EK24")) Is Nothing Then Exit Sub Else Range("EK27:EM28").Select Selection.ClearContents End If End Sub

  • エクセルVBAで空白セルを削除する方法

    みなさん教えてください。 今エクセルVBAで、下記のようにのA列に空白セルがある場合にそのセルを削除し、 空白セルが無い場合何もしないと言うマクロを作っています(下記のように自動記録し ました)。 しかし、作成したマクロは、下記のようにA列に空白セルがない場合はエラーが出てし まいます。 空白セルが無い場合エラーが出ない方法を教えて頂けないでしょうか。 よろしくお願いします。 <マクロ> Sub Macro1() Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.SpecialCells(xlCellTypeBlanks).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp End Sub <データ> A --------- 1 2 1 1 1 3 4 ・ ・ ・ (以降約300行続きます)

専門家に質問してみよう