アプリ版:「スタンプのみでお礼する」機能のリリースについて

あるフィールド(例えばA列)にレコード長6桁で次のようなデータがあるとします。

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

A 回答 (3件)

一番速度は期待できない方法ですが


とりあえず、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
    • good
    • 0

> 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
    • good
    • 0

こんばんは。


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!