Excel VBA質問箱 IV

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

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


12909 / 13644 ツリー ←次へ | 前へ→

【8003】特定の値の行以外を削除するには miya 03/9/26(金) 11:42 質問
【8005】Re:特定の値の行以外を削除するには パピー(PAPIー) 03/9/26(金) 12:14 回答
【8008】Re:特定の値の行以外を削除するには Asaki 03/9/26(金) 13:51 回答
【8024】Re:特定の値の行以外を削除するには Kein 03/9/26(金) 17:23 回答
【8034】Re:特定の値の行以外を削除するには いしかわ 03/9/27(土) 0:37 回答

【8003】特定の値の行以外を削除するには
質問  miya  - 03/9/26(金) 11:42 -

引用なし
パスワード
   こんにちは。
下記のような表で、A列には不特定の値が
たくさん入力されています。
そのうち、「CJ10」「CJ20」「CJ30」と
入力されている行だけを残して、
他の行を削除するにはどうしたら
よいか教えて下さい。
よろしくお願いします。

------------------------
  A   B  C
1 CJ10 2000
2 CJ10 2000
3 CJ20 5000
4 CJ20 5000
5 CJ30 4000
6 CJ50 4000
7 CJ60 3000
  ↓
 つづく
--------------------------

【8005】Re:特定の値の行以外を削除するには
回答  パピー(PAPIー)  - 03/9/26(金) 12:14 -

引用なし
パスワード
   こんにちは。
サンプルを作成してみました。
参考にして下さい。
質問の意を外していたらごめんなさい。

Sub test()
Dim L As Long
Dim i As Long
  L = Range("A65536").End(xlUp).Row
  For i = L To 1 Step -1
    If Cells(i, 1) <> "CJ10" And _
      Cells(i, 1) <> "CJ20" And _
        Cells(i, 1) <> "CJ30" Then
      Rows(i).Delete Shift:=xlUp
    End If
  Next
End Sub

【8008】Re:特定の値の行以外を削除するには
回答  Asaki  - 03/9/26(金) 13:51 -

引用なし
パスワード
   みなさま、こんにちは。

フィルタオプション使ってみました。
エラー処理はしてません。

Sub test()

  Dim rngTarget      As Range    '処理対象レンジオブジェクト
  Dim rngCriteria     As Range    '条件設定レンジオブジェクト
  Dim lngLoop       As Long     'ループカウンタ
  
  Application.ScreenUpdating = False   '画面更新処理停止
  
  'フィルタ仕様のための準備
  Rows(1).Insert Shift:=xlDown
  Columns(3).Insert Shift:=xlToRight
  Range(Cells(1, 1), Cells(1, 3)).Value = "col1"
  
  '抽出条件設定
  Cells(2, 3).Value = "CJ10"
  Cells(3, 3).Value = "CJ20"
  Cells(4, 3).Value = "CJ30"
  Set rngCriteria = Range(Cells(1, 3), Cells(4, 3))

  '処理対象レンジ設定
  Set rngTarget = Range("A1", Cells(Rows.Count, 1).End(xlUp).Offset(, 1))

  'フィルタリング
  rngTarget.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=rngCriteria, Unique:=False
  
  '非表示行削除
  For lngLoop = rngTarget.Rows.Count To 2 Step -1
    If Cells(lngLoop, 1).EntireRow.Hidden Then Cells(lngLoop, 1).EntireRow.Delete Shift:=xlUp
  Next lngLoop

  'オブジェクト開放
  Set rngTarget = Nothing
  Set rngCriteria = Nothing

  '全データ表示
  ActiveSheet.ShowAllData

  '作業行/列削除
  Rows(1).Delete Shift:=xlUp
  Columns(3).Delete Shift:=xlToLeft

  Application.ScreenUpdating = True    '画面更新処理再開

End Sub

【8024】Re:特定の値の行以外を削除するには
回答  Kein  - 03/9/26(金) 17:23 -

引用なし
パスワード
   並べ替えをしても良いのなら・・

Sub Test3()
  Dim FR As Range

  Range("A1").CurrentRegion.Sort Key1:=Columns(1), _
  Order1:=xlAscending, Header:=xlNo, Orientation:=xlSortColumns
  Set FR = Columns(1).Find("CJ30", , xlValues, xlWhole, , xlPrevious)
  Range("A1", FR).EntireRow.Delete xlShiftUp
  Set FR = Nothing
End Sub

【8034】Re:特定の値の行以外を削除するには
回答  いしかわ  - 03/9/27(土) 0:37 -

引用なし
パスワード
   簡単に作ってみました。試してみてください。

Private Sub CommandButton1_Click()
a = "CJ10"
b = "CJ20"
c = "CJ30"

For tate = 1 To 5000
  If Sheet1.Cells(tate, 1).Value = "" Then
    Exit For
  End If
  
  If Sheet1.Cells(tate, 1).Value = a Or _
    Sheet1.Cells(tate, 1).Value = b Or _
    Sheet1.Cells(tate, 1).Value = c Then
   
    Sheet1.Rows(tate).Delete
  End If
Next
End Sub

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