• ベストアンサー

excel マクロ 特定の文字列を含まない行を削除したい

あるフィールド(例えばA列)にレコード長6桁で次のようなデータがあるとします。 10000 151692 621500 10000 999999 131700   ・   ・   ・ で、 10000を含むレコードのみ残してあとのレコードは削除したいです。 レコード数が多いのでAutoFilterしてCopy&PasteですとPC悲鳴あげました。 できれば順序は保持したいですが、ソートをつかっても構いません。 また今回は6桁の固定長ですので、5桁以外の行を選択削除してもいいかも知れません(本来は010000の6桁)。 が、そうでない場合も含めて、ご教授下さい。 ソートして手動で消せばいいんですが、全体のマクロの中の一部として組み込みたいので。 自分以外の人も使うので、Pen200くらいのPCでも悲鳴あげない方法を最終的には優先したいです。 accessなら単に10000のクエリで吐き出せばすむ話なんでしょうけど…。

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

  • ベストアンサー
  • newleaf
  • ベストアンサー率14% (1/7)
回答No.3

こんばんは。 MSクエリはエクセルのシートがデータベースのテーブルのように構成されていればクエリをかけることが出来ます。VBAではODBCドライバとしてエクセルドライバを使ってアクセスするようになります。具体的なコードまでは記述しませんがクエリをかけるのも一つの手と思われます。

その他の回答 (2)

  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.2

> 10000を含むレコードのみ残してあとのレコードは削除したいです。 この条件から「含むレコード」ということですので、 010000、10000、910000、100009 は、全て残るとすれば 次のコードで、如何でしょうか。 Sub DelRows() Dim Rwe As Long Dim R As Long Const Col = "A" ' ←----- 検索対象列名を指定 Application.ScreenUpdating = False Rwe = Range(Col & 65536).End(xlUp).Row For R = Rwe To 1 Step -1   If InStr(CStr(Range(Col & R).Value), "10000") = 0 Then     Rows(R).Delete   End If Next Application.ScreenUpdating = True Beep End Sub

  • eipu
  • ベストアンサー率39% (25/64)
回答No.1

一番速度は期待できない方法ですが とりあえず、Do~Loopを使う方法を。 データはA列に抜けなく存在するものと仮定して作ってます。 Sub 行削除() Dim i As Long Application.ScreenUpdating = False i = 1 '検索開始行 Do Until Cells(i, 1).Value = "" If Cells(i, 1).Value <> "10000" Then Cells(i, 1).EntireRow.Delete i = i - 1 End If i = i + 1 Loop Application.ScreenUpdating = True End Sub

関連するQ&A