- ベストアンサー
エクセルVBA 不要行の削除について
皆さんこんにちは。 お忙しいところ恐れ入ります。 以下の内容をVBAで実行したく色々やってみたのですが、思うように動きません。 もしお分かりになる方がおられましたらご教示の程ねがえませんでしょうか? 1.A列に”無作為な数値(例えば1から100)”と”空セル”がランダムに並んでいる。 2.このA列に、指定した数値(例えば3,7,15,23,50,88など色々)があった場合、 その指定した数値が書かれている行のみを行ごと削除したい。 以上です。 お忙しいところ恐れ入りますが、どうぞよろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
A列にアタマから対象データが並んでいるなんて事は無くて,常識的に1行目はタイトル行で,2行目からデータが入っているとします。 「色々ある」数字をどういう風にエクセルに指示したいのか考えが無さそうなので,次のようにします。 sub macro2() dim aa,a aa = inputbox("削除したい数字(例:1,4,10)") if aa = "" then exit sub application.screenupdating = false for each a in split(strconv(aa,vbnarrow),",") range("A:A").autofilter field:=1, criteria1:=a activesheet.autofilter.range.offset(1).entirerow.delete shift:=xlshiftup next activesheet.autofiltermode = false application.screenupdating = true end sub
その他の回答 (1)
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 一例です。 Sheet2のA列・A1セルから削除したい数値を入力しておきます。 そうした上で下のマクロを実行してみてください。 Sheet1のVBE画面にコードを貼り付けます。 Sub test() Dim i, j As Long Dim ws As Worksheet Set ws = Worksheets("sheet2") For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 ' ↑ データが2行目からあれば「to 1」の「1」の部分を「2」に変更 For j = 1 To ws.Cells(Rows.Count, 1).End(xlUp).Row If Cells(i, 1) = ws.Cells(j, 1) Then Rows(i).Delete End If Next j Next i End Sub こんな感じではどうでしょうか?m(__)m
お礼
お世話になります。 sheet2からデーターを呼び出して・・と言う回答ありがとうございます。 こうすると、マクロが使えない人でも「sheet2に書くこと」さえ教えておけば、 ずっと使ってもらえそうですね。 皆さん流石です。 今回は最初に回答をくれた方の「inputbox」利用をベストアンサーにしましたが、 tom04さんの回答も別の帳票で役立ちそうです。 本当にありがとうございました。
お礼
お世話になります。 タイトル行の件、配慮が足りませんでした。 申し訳ありません。 教えていただいたやり方で目的が果たせました。 また、inputboxでその都度指定できると言うところは 全く考えておらず(マクロに記述していたので)、この点はとても使い易かったです。 お忙しい中本当にありがとうございました。