• ベストアンサー

エクセルの行を削除したい。

VBAを使用して以下の処理をしたいと思ってます。 セルの中が小計ならば、小計行を含めて5行削除するっと言う処理を最終行まで繰り返したいんですが、上手く行きません。 よろしくお願いします。

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

  • ベストアンサー
回答No.5

訂正です (誤)' 1行ごっそりとデータがないとか、1列ごっそりデータがないと仮定しています (正)' 1行ごっそりとデータがないとか、1列ごっそりデータがないとそこで対象から外れると仮定しています

noname#143014
質問者

お礼

ありがとうございます。 削除できました。 回答が遅くなってすみません。 諸事情ありまして、閲覧は出来るのですが書き込みが出来ないパソコンを使ってまして、携帯からなので言葉少なく、お礼が短文ですみません。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (5)

回答No.6

解決できてよかったです。

全文を見る
すると、全ての回答が全文表示されます。
回答No.4

こんにちは。 基本的に「すぐに回答ほしいです」であるなら回答がつき次第、すぐにレスポンスするのが マナーだと思っています。 私の前回の考え方をコードにするとこうなります。 コピペでは動かないでしょう。条件を合わせてください。 行は下から消さず、一度に消し去っています。 行の削除はExcelにとって重い処理なので、(ループで)何度もやらない方がいいからです。 「アクティブセル領域」とかわからない言葉はネットで調べたり、Excelのヘルプで調べられると思います。 「CurrentRegion」が使えるようになるととっても便利です。 「Cells(Rows.Count).End(xlUp)」などというくだらない表現を使わないで済みます。 逆に「CurrentRegion」が使えるようにシートのデータ配置構造を考えて作れるようになります。 Option Explicit Sub test() Dim WS As Worksheet Dim MyR As Range Dim DelRng As Range Dim MyC As Range Set WS = ActiveSheet ' アクティブなシートを対象としています ' データ領域はA1から、ところどころ虫食い状態は許せても ' 1行ごっそりとデータがないとか、1列ごっそりデータがないと仮定しています Set MyR = WS.Range("A1").CurrentRegion WS.AutoFilterMode = False ' たとえオートフィルタがかかっていても解除します MyR.AutoFilter Field:=1, Criteria1:="小計" ' 1列目に「小計」が入っているとしています ' 1列目は項目行だとして1列目を対象からはずします。可視セルを取り出します Set DelRng = MyR.Resize(MyR.Rows.Count - 1, 1).Offset(1).SpecialCells(xlCellTypeVisible) WS.AutoFilterMode = False ' オートフィルタを解除します For Each MyC In DelRng ' 対象範囲のすぐ右の列を使って「小計」のある行を含めて下に5行「1」を書き込みます MyC.Resize(5).Offset(, MyR.Columns.Count).Value = 1 Next Set MyR = WS.Range("A1").CurrentRegion ' 再度A1セルのアクティブセル領域を対象とします MyR.AutoFilter Field:=MyR.Columns.Count, Criteria1:=1 ' 「1」を書き込んだ行を取り出します ' 1列目は項目行だとして1列目を対象からはずし、可視セルを含む行を取り出します Set DelRng = MyR.Resize(MyR.Rows.Count - 1, 1).Offset(1).SpecialCells(xlCellTypeVisible).EntireRow WS.AutoFilterMode = False ' オートフィルタを解除します DelRng.Select ' 実際はここを「DelRng.Delete」に変えてください End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • hotosys
  • ベストアンサー率67% (97/143)
回答No.3

Sub sample() Dim target As Range Dim rng As Range Set target = Cells '"小計"を探す範囲(カレントシート全て) Do Set rng = target.Find("小計", LookIn:=xlValues, LookAt:=xlWhole) If rng Is Nothing Then Exit Do rng.Resize(5, 1).EntireRow.Delete '削除 Loop End Sub "小計"を探す範囲を必要に応じて >Set target = Cells '"小計"を探す範囲(カレントシート全て) を Set target = Columns("B") 'B列 Set target = Sheets("Sheet2").Columns("C") 'Sheet2のC列 とかに変えてください。 削除でなくデータを消すだけなら >rng.Resize(5, 1).EntireRow.Delete '削除 を target.Resize(5, 0).EntireRow.ClearContents '削除でなくクリアの場合(書式を残す場合) target.Resize(5, 0).EntireRow.Clears '削除でなくクリアの場合(全部消す場合) に変えてください。

noname#143014
質問者

お礼

きちんと処理は進むけど行が削除されません。 コピペしたので間違いないと思うんですが。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。
  • kazne
  • ベストアンサー率66% (8/12)
回答No.2

差し支えなければ、コードの開示をお願いします。 無理だった事を想定して、参考コードを書いておきます。 Sub RowDelete() Dim TargetSheet As Worksheet '処理対象シートオブジェクト Dim FindRange As Range '小計セル検索用セル範囲 Dim HitCell As Range '検索で見つかったセル範囲 Set TargetSheet = Worksheets("Sheet1") '←ここに対象シート名を入れてください ReFind: Set FindRange = TargetSheet.Range("A1:A100") '←ここに小計セルが含まれる範囲を指定して下さい。 With FindRange Set HitCell = .Find(What:="小計", LookIn:=xlValues, LookAt:=xlWhole) '検索開始 If Not HitCell Is Nothing Then '小計セルが見つかったら TargetSheet.Rows(HitCell.Row & ":" & HitCell.Row + 4).Delete '小計を含む5行を削除 GoTo ReFind End If End With End Sub

noname#143014
質問者

お礼

回答ありがとうございました。 処理は進むけど行が削除されません。 もう少し頑張ってみます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

こんばんは。 どううまくいかないかを書かないと答えにくいですよ。 「小計行を含めた5行」って、たとえば ・ ・ 小計 ←削除 ・  ←削除 ・  ←削除 ・  ←削除 ・  ←削除 ・ って理解でいいんでしょうか? 「行削除は下から」 っていう大原則はご存知? まぁ、でもそれは削除をループで行う場合であって 「小計」の入っている行をフィルタかなんかで取り出し、 作業列でも作ってそこから5行に「1」でも書き込み、 フィルタで「1」を取り出して「可視セル」を含む行をいっぺんに 削除すれば下からやる必要はないです。

noname#143014
質問者

お礼

まさにイメージ通りです。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Excelで空白行を削除したい

    2500行位使用しているシートのなかに、どのセルも空白になっている不要な行が300行くらい混ざっています。 この行を自動的に削除するにはどうすれば良いでしょうか。 ただ、その行のA~Eセルは空白でもFセルに値が入っているなど完全に空白でない行は削除できません。 メニュー、関数、VBAなど有れば教えてください。

  • Excelの行削除について

    A1のセルに「小計」という文字が入力してあり、A5にも「小計」という文字が入力してあるとします。 マクロを使いA2~A4を削除したときに「小計」が並びます 。   A       A 1 小計    1 小計 2       2 小計 3     → 3 4       4 5 小計    5 このときに下の行にある小計を自動で削除する方法があれば教えてください。   A       A 1 小計    1 小計 2 小計    2   3     → 3 4       4 5       5 よろしくお願いします

  • VBA 21行目~表の最終行まで行削除

    WinXPでExcel2003を使用しています。 VBAで、21行目から表の最終行までの行削除するマクロを作りたいのですが、上手くいきません。 Sub 行削除() Range("A21").CurrentRegion.Select Selection.Delete End Sub だとその上下に文字が入ったセルがあると一緒に削除されてしまうので、 どの様にすればいいのか分からないでいます。 最終行を何行目と特定せずに表の最終行を取得して、 削除範囲を設定出来るものが希望です。 どなたか教えて下さると助かります。 よろしくお願い致します。

  • アクティブになっている行をマクロで削除したい

    特定の文字の入っている行とそれ以下の行全部を削除したいのですが どうしたらよいでしょうか 例えば"小計"の入っている行から下の行を削除したいのですが 行の位置はいつも違っています セルの位置は検索で分かりますし行の削除はShift+スペースで消し それより下はShift+ctrl+方向キー+delで出来るのですが それだとマクロで実行するときいつも同じ行を消してしまいます どの位置にも関係なくアクティブセルの含まれている行とそれ以下の行を マクロで削除するにはどのように記述すればいいですか

  • Excel VBAでの行の削除について

    Excel VBAを使用して2行ずつ行の削除をし、1行残して(3行目を残す)また2行ずつ行の削除、1行残しす(6行目を残す)をループして行う方法が知りたいです。 イメージとしては以下のような感じです。 ━━【A】━━━━ 【1】あいうえお 【2】かきくけこ 【3】さしすせそ 【4】たちつてと 【5】なにぬねの 【6】はひふへほ 【7】まみむめも 【8】やゆよ 【9】らりるれろ ━━━━━━━━━ ↓マクロ実行後↓ ━━【A】━━━━ 【1】さしすせそ 【2】はひふへほ 【3】らりるれろ ━━━━━━━━━ 当方VBA初心者ですので、できるだけわかりやすくご教授頂けると助かります。 よろしくお願いいたします。

  • エクセルマクロ行削除

    エクセル2013です。 以下の行削除マクロを作りました。 取得した 最終行が20行目として 最終列がZ列として セル Z20 の値が 1以上なら問題なく動作するのですが セル Z20 の値が 0 だとループして終了しません。 どこを修正しても、思うように動作しません。 どこを修正すれば、いいのでしょうか? よろしくお願いします。 Sub 行削除() Dim 最終行 Dim 最終列 Dim 対象行 最終列 = Cells(8, Columns.Count).End(xlToLeft).Column '8行目の最終列を取得 最終行 = Cells(Rows.Count, 1).End(xlUp).Row 'A列の最終行を取得 Application.ScreenUpdating = False '画面切替停止 For 対象行 = 10 To 最終行 If Cells(対象行, 最終列) = 0 Then Rows(対象行).Delete 最終行 = 最終行 - 1 '削除により最終行が1行減ったので最終行の値を1行減らす 対象行 = 対象行 - 1 '削除により対象行が1行繰り上がったので対象行の値を1行減らす Else End If Next 対象行 Application.ScreenUpdating = True '画面切替停止解除 End Sub

  • エクセル2000  規則に従った行の削除

    エクセルの行削除について、次の規則で行いたいと思います。 規則 35  削除する行 36  削除する行 37  削除する行 38  削除する行 39~71 残す行(33行) 72~75 削除する行(4行) 以下、33行残し、4行削除を繰り返します。 この操作をVBAを使って行いたいのですが、ご存知の方がいらっしゃいましたらよろしくお願いします。

  • エクセルVBA 不要行の削除について

    皆さんこんにちは。 お忙しいところ恐れ入ります。 以下の内容をVBAで実行したく色々やってみたのですが、思うように動きません。 もしお分かりになる方がおられましたらご教示の程ねがえませんでしょうか? 1.A列に”無作為な数値(例えば1から100)”と”空セル”がランダムに並んでいる。 2.このA列に、指定した数値(例えば3,7,15,23,50,88など色々)があった場合、  その指定した数値が書かれている行のみを行ごと削除したい。 以上です。 お忙しいところ恐れ入りますが、どうぞよろしくお願いいたします。

  • EXCEL VBA マクロ 特定の行削除

    Excelで特定の文字例が含まれるセルが存在する行のみを自動で削除したいのですが、VBAで自動で処理する事は可能でしょうか? 1万行程度あるので、自動で実行したいと思っております。 プログラムの知識がないので、どなたかご教授下さい。

  • VBAの行削除について

    VBAで行を削除したいです。 データが何百行かあって、その下から空白行が最終行までできています。 その空白行部分を削除したいのですが。 どのようにコーディングすればいいのですか?