Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1745 / 13646 ツリー ←次へ | 前へ→

【72214】特定の値の行を削除したい 本山中 12/6/21(木) 6:40 質問[未読]
【72215】Re:特定の値の行を削除したい UO3 12/6/21(木) 11:02 発言[未読]
【72218】Re:特定の値の行を削除したい 本山中 12/6/21(木) 11:38 お礼[未読]
【72219】Re:特定の値の行を削除したい UO3 12/6/21(木) 12:05 回答[未読]
【72221】Re:特定の値の行を削除したい 本山中 12/6/21(木) 13:50 お礼[未読]
【72222】Re:特定の値の行を削除したい UO3 12/6/21(木) 14:11 回答[未読]
【72223】Re:特定の値の行を削除したい 本山中 12/6/21(木) 14:19 お礼[未読]
【72220】Re:特定の値の行を削除したい UO3 12/6/21(木) 12:34 発言[未読]

【72214】特定の値の行を削除したい
質問  本山中  - 12/6/21(木) 6:40 -

引用なし
パスワード
   B列には4桁の数値が入力されています。
その数値が 
1234
2345
3456
4567
なら、
If Cells(i,2) = 1234,2345,3456,4567 Then
のように、一度に指定できて、
Cells(i,2).EntireRow.Delete
のように一度に削除できる方法がありますか。
宜しくお願いいたします。

【72215】Re:特定の値の行を削除したい
発言  UO3  - 12/6/21(木) 11:02 -

引用なし
パスワード
   ▼本山中 さん:

ループ処理を行わず、一挙に該当行を取得し、それを一挙に削除したいということですね。
マクロ処理ですから、裏でループをさせても、何ら問題はないと思いますが?
でも、一挙にやる方法がないかな?ということなんでしょうね?

もし、エクセルバージョンが2007以降であれば、1行目をタイトル行にしてオートフィルターを使えば
それに近いイメージにはなります。
2003までであれば、フィルターオプションを利用して対応は可能だと思います。

【72218】Re:特定の値の行を削除したい
お礼  本山中  - 12/6/21(木) 11:38 -

引用なし
パスワード
   ▼UO3 さん:回答をありがとうございます。
Excel2007です。
ステートメントを利用して、自動的に一挙に削除したいと希望します。
データ数が結構な数ありますので、毎日オートフィルターを使って、
削除しては結構時間がかかります。

>▼本山中 さん:
>
>ループ処理を行わず、一挙に該当行を取得し、それを一挙に削除したいということですね。
>マクロ処理ですから、裏でループをさせても、何ら問題はないと思いますが?
>でも、一挙にやる方法がないかな?ということなんでしょうね?
>
>もし、エクセルバージョンが2007以降であれば、1行目をタイトル行にしてオートフィルターを使えば
>それに近いイメージにはなります。
>2003までであれば、フィルターオプションを利用して対応は可能だと思います。

【72219】Re:特定の値の行を削除したい
回答  UO3  - 12/6/21(木) 12:05 -

引用なし
パスワード
   ▼本山中 さん:

2007ということなのでオートフィルターで。
Sample1は、1行目からデータの場合。
Sample2は、1行目がタイトル行の場合。

Sub Sample1()
  With Sheets("Sheet1")
    .Rows(1).Insert Shift:=xlDown
    .Range("B1").Value = "タイトル"     'Dummy
    .Range("B1", .Range("B" & .Rows.Count).End(xlUp)).AutoFilter
    With .AutoFilter.Range
      .AutoFilter Field:=1, Criteria1:=Array("1234", "2345", "3456", "4567"), _
                 Operator:=xlFilterValues
      .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
      .AutoFilter
    End With
    .Rows(1).Delete

  End With
End Sub


Sub Sample2()
  With Sheets("Sheet2")
    If .AutoFilterMode Then .AutoFilter.Range.AutoFilter
    .Range("B1", .Range("B" & .Rows.Count).End(xlUp)).AutoFilter
    With .AutoFilter.Range
      .AutoFilter Field:=1, Criteria1:=Array("1234", "2345", "3456", "4567"), _
                 Operator:=xlFilterValues
      .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
      .AutoFilter
    End With

  End With
End Sub

【72220】Re:特定の値の行を削除したい
発言  UO3  - 12/6/21(木) 12:34 -

引用なし
パスワード
   ▼本山中 さん:

こんにちは

もし、抽出数字をその都度、指定したいということならSample1,Sample2ともに
一番最初に

  Dim s As String
  Dim v As Variant
  s = Application.InputBox("抽出する数字を , で区切って入力してください", Type:=2)
  If s = "False" Then Exit Sub
  s = StrConv(s, vbNarrow)
  v = Split(s, ",")

これを追加して

.AutoFilter Field:=1, Criteria1:=Array("1234", "2345", "3456", "4567"), _
                 Operator:=xlFilterValues

これを

.AutoFilter Field:=1, Criteria1:=v, Operator:=xlFilterValues

このように変更してください。

【72221】Re:特定の値の行を削除したい
お礼  本山中  - 12/6/21(木) 13:50 -

引用なし
パスワード
   ▼UO3 さん:
たびたび恐縮です。
Sample2でトライしてみましたところ、
「RangeクラスのAutFilterメソッドが失敗しました。」という
エラーメッセージが出ます。
デバッグしたところ、
.Range("B1", .Range("B" & .Rows.Count).End(xlUp)).AutoFilter の部分が
黄色に染まります。
どのように対処すれば宜しいのでしょうか。
尚、データはA列からH列まであります。

>▼本山中 さん:
>
>2007ということなのでオートフィルターで。
>Sample1は、1行目からデータの場合。
>Sample2は、1行目がタイトル行の場合。
>
>Sub Sample1()
>  With Sheets("Sheet1")
>    .Rows(1).Insert Shift:=xlDown
>    .Range("B1").Value = "タイトル"     'Dummy
>    .Range("B1", .Range("B" & .Rows.Count).End(xlUp)).AutoFilter
>    With .AutoFilter.Range
>      .AutoFilter Field:=1, Criteria1:=Array("1234", "2345", "3456", "4567"), _
>                 Operator:=xlFilterValues
>      .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
>      .AutoFilter
>    End With
>    .Rows(1).Delete
>
>  End With
>End Sub
>
>
>Sub Sample2()
>  With Sheets("Sheet2")
>    If .AutoFilterMode Then .AutoFilter.Range.AutoFilter
>    .Range("B1", .Range("B" & .Rows.Count).End(xlUp)).AutoFilter
>    With .AutoFilter.Range
>      .AutoFilter Field:=1, Criteria1:=Array("1234", "2345", "3456", "4567"), _
>                 Operator:=xlFilterValues
>      .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
>      .AutoFilter
>    End With
>
>  End With
>End Sub

【72222】Re:特定の値の行を削除したい
回答  UO3  - 12/6/21(木) 14:11 -

引用なし
パスワード
   ▼本山中 さん:

まず、アップしたSample2は、こちらのテストをSheet2でやりましたので
コードも Sheet2になっています。そこは、実際のシート名に直していただきましたか?

で、いずれにしてもA〜H列のリストだということですから、コードを直す必要があります。


Sub Sample2()
  With Sheets("Sheet1")
    If .AutoFilterMode Then .AutoFilter.Range.AutoFilter
    .Range("A1").CurrentRegion.AutoFilter
    With .AutoFilter.Range
      .AutoFilter Field:=2, Criteria1:=Array("1234", "2345", "3456", "4567"), _
                 Operator:=xlFilterValues
      If .Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then _
                .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
      .AutoFilter
    End With

  End With
End Sub

【72223】Re:特定の値の行を削除したい
お礼  本山中  - 12/6/21(木) 14:19 -

引用なし
パスワード
   ▼UO3 さん:
たびたびのお手数に感謝いたします。
うまくいきました。
ありがとうございます。
>▼本山中 さん:
>
>まず、アップしたSample2は、こちらのテストをSheet2でやりましたので
>コードも Sheet2になっています。そこは、実際のシート名に直していただきましたか?
>
>で、いずれにしてもA〜H列のリストだということですから、コードを直す必要があります。
>
>
>Sub Sample2()
>  With Sheets("Sheet1")
>    If .AutoFilterMode Then .AutoFilter.Range.AutoFilter
>    .Range("A1").CurrentRegion.AutoFilter
>    With .AutoFilter.Range
>      .AutoFilter Field:=2, Criteria1:=Array("1234", "2345", "3456", "4567"), _
>                 Operator:=xlFilterValues
>      If .Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then _
>                .Offset(1).Resize(.Rows.Count - 1).EntireRow.Delete
>      .AutoFilter
>    End With
>
>  End With
>End Sub

1745 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free