超初心者です。どうか教えてください・・・m(_ _)m
A列 B列 ・・・・・
1234567 2345678
9876543 8765432
・ ・
・ ・
といった、表(数千行規模)があります。
A列とB列には7桁の数字があります。
A列とB列には途中ブランクのセルもあります。
A列またはB列のどちらかにも、
複数の範囲条件(数字)に合致しない行を削除したいです。
A列またはB列のどちらかに合致すればその行を残します。
複数の範囲条件(数字)
(例)
1000000~1000009
2000100~2000199
・
・
十数個あります。
何卒、宜しくお願い致します。・・・m(_ _)m
No.4ベストアンサー
- 回答日時:
#2です。
条件の後出しをしないで、ご自分でアレンジする才覚を持っていただかないと、後々メンテナンス出来ないで困りますよ。
コード中のコメントを読んでから、バックアップを取った上で実行して下さい。
Sub test()
Dim ref(9999999) As Boolean
Dim criteriaRange As Range
Dim targetRange As Range
Dim myRow As Range
Dim buf As Variant
Dim i As Long
With Sheets(1)
'最初のシートのA3からの処理に変更
Set targetRange = Range(.Range("A3"), .Range("B" & .Rows.Count).End(xlUp))
End With
buf = targetRange
With Sheets(2)
Set criteriaRange = Range(.Range("A1"), .Range("B" & .Rows.Count).End(xlUp))
End With
For Each myRow In criteriaRange.Rows
For i = myRow.Cells(1) To myRow.Cells(2)
ref(i) = True
Next i
Next myRow
For i = 1 To UBound(buf, 1)
If ref(CLng(buf(i, 1))) Or ref(CLng(buf(i, 2))) Then
Else
buf(i, 1) = Empty
buf(i, 2) = Empty
End If
Next i
'最初のシートの行削除に変更(必ずバックアップを取ってから試行の事)
targetRange = buf
targetRange.SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
mitarashiさま
この度は度々お力を頂き、本当にありがとうございました。
条件不足等、何度もお手を煩わせてしまい、大変恐縮でございます。
頂きましたアドバイスで欲しいデータの抽出ができまして、感動しました。
大変感謝しております。
躓きつつも、自分なりに掘り下げ、目的に達することが、プログラミングの面白さでしょうか・・・
今回、このことを体験できた気がします。
本当にいろいろとありがとうございました。
No.3
- 回答日時:
#2です。
A,B列に入っている「数字」のデータ型の問題でしょうか、
If ref(buf(i, 1)) Or ref(buf(i, 2)) Then
のところを
If ref(CLng(buf(i, 1))) Or ref(CLng(buf(i, 2))) Then
にしてみて下さい。
それでもダメなら、コードが中断したところで、buf(i,1)の値がマウスポインタを持って行くと表示されると思いますので、どんな値が入っているかお知らせ下さい。
mitarashiさま
御回答いただきまして本当にありがとうございますm(_ _)m
ご指示のとおり変更し試しましたところ、同様の結果となりました。
マウスポインタによるbuf(i,1)の値は、
buf(i,1)=”文字列”(文字列=チェック対象データシートのA1セルに記載の表の題名)
でした。
ちなみに、チェック対象データシートの構成は、
・A1セルに表の題名
・2行目に表の項目名(A2~X2)
・3行目以降にデータ領域
となっております。
度々申し訳ありません。
何卒、お力を・・・m(_ _)m
No.2
- 回答日時:
興味本位でやってみましたので、自称超初心者さん向けではないと思います。
メモリー大盤振る舞いの案です。スピード命のつもりですので、親切な方から分かり易い回答があったら、処理速度を比べてみて下さい。'Sheets(1)にチェック対象のデータがある
'Sheets(2)のA列に範囲の最初、B列に範囲の最後の値が入っている
'A1が1000000、B1が1000009という様に。以下下方に続く
'Sheets(3)に削除されなかったデータを貼り付ける(Sheets(1)はいじりません)
'Sheets(1)のブランクの行も削除対象になります。
配列ref()のref(1000000),ref(1000001),...ref(100009)をtrueにしておき、
1234567がこの範囲に含まれるかどうかチェックするには、ref(1234567)がtrueかどうかを見ればよいという案です。
Sub test()
Dim ref(9999999) As Boolean
Dim criteriaRange As Range
Dim targetRange As Range
Dim myRow As Range
Dim buf As Variant
Dim i As Long
With Sheets(1)
Set targetRange = Range(.Range("A1"), .Range("B" & .Rows.Count).End(xlUp))
End With
buf = targetRange
With Sheets(2)
Set criteriaRange = Range(.Range("A1"), .Range("B" & .Rows.Count).End(xlUp))
End With
For Each myRow In criteriaRange.Rows
For i = myRow.Cells(1) To myRow.Cells(2)
ref(i) = True
Next i
Next myRow
For i = 1 To UBound(buf, 1)
If ref(buf(i, 1)) Or ref(buf(i, 2)) Then
Else
buf(i, 1) = Empty
buf(i, 2) = Empty
End If
Next i
Sheets(3).Range(targetRange.Address) = buf
Sheets(3).Range(targetRange.Address).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
End Sub
この回答への補足
mitarashiさま
お世話になります。
組んでいただきましたプログラムのシート名などを書換え試させていただきました。
実行時エラー'13':型が一致しません。
と出てしまい、デバックすると、
If ref(buf(i, 1)) Or ref(buf(i, 2)) Then
のところで止まってしましました。
本などで解明を試みましたが、
恥ずかしながらマクロのマの字も満足でない私にはなすすべがない状況でございます。
大変お手数をお掛けし恐縮ですが、対処方法をご教授頂けましたら幸いです。
何卒宜しくお願い致します。
mitarashiさま
早速の御回答ありがとうございました。
お時間を割いていただき、プログラムまで組んでいただきまして・・・m(_ _)m
急いでおりましたので、大変ありがたく存じます。
勉強させていただきたいと思います。
ありがとうございました。
No.1
- 回答日時:
「教えてください」と、言われても何が判らないのかが書いて無いと答えようが無いです。
とりあえず、やり方が判らないのだと判断してアドバイス。
表を一行づつ見て行って、A列の値、B列の値がどちらも複数の範囲行件に合致しない場合はその行を削除する……と、言う事を地道に繰り返すのが一番簡単。
・「複数の範囲条件」をどこか別のシートに持つ事をお勧めします。
例えば、Sheet2のA1に1000000、B1に1000009、A2に2000100、B2に2000199、……。
・表を見て行く時は下から上に。上から下に見て行くと、行を削除した時アクティブな行がどこかが判りにくい。
・何千行もあると、画面更新するだけで時間が掛かるので、Application.ScreenUpdating = Falseで画面の更新を止め、最後にApplication.ScreenUpdating = Trueとして戻すと早い。
・複数の範囲条件に合致するか否かは、functionで作ってサブルーチン化した方が判りやすい。
#例:引数で数値を渡すと範囲条件のどれかに合致するならTrueを返す
mt2008さま
早速の御回答ありがとうございましたm(_ _)m。
まだまだ何がわからないかもわからないほどの初心者でして、
質問がわかりづらく恐縮でした。。
頂きましたアドバイスでいろいろ試して行きたいと思います。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) googleスプレッドシートでカッコ内の文字数をカウントしたい 1 2023/01/17 15:52
- Visual Basic(VBA) 3つの条件を指定してVBAで行を削除したい 条件1:分類1が重複 条件2:分類2が重複 条件3:個数 6 2022/06/24 11:07
- Excel(エクセル) <スプレッドシート>IF関数の複数条件について 5 2022/10/27 14:38
- Excel(エクセル) Excel2019 列と列(2列)の数値の重複を調べたい 1 2023/05/11 13:35
- Visual Basic(VBA) VBA 「,」・空白・カタカナ等の複数条件のマクロ 2 2023/08/23 11:57
- Excel(エクセル) 条件付き書式の色付きセルのカウント方法について 2 2022/10/21 14:51
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Visual Basic(VBA) VBAで、特定の文字より後を削除して残った数値を文字列に変換と特定の文字より前も削除したい 3 2022/04/15 19:21
- Visual Basic(VBA) A列にある値をB列・C列にVBAで切り出し 3 2022/04/09 19:20
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
【VBA】条件に一致しない行を削除したい 複数条件
Visual Basic(VBA)
-
【VBA】条件に一致しない行を削除したい
Visual Basic(VBA)
-
Excel VBA A列が特定の値以外の場合、その行を削除
Excel(エクセル)
-
-
4
特定の文字がある行以外を削除するマクロ
その他(Microsoft Office)
-
5
特定のセルが空白だったら、その行を非表示にしたい。。。
Visual Basic(VBA)
-
6
VBAの比較削除マクロ
その他(Microsoft Office)
-
7
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
VBA 何かしら文字が入っていたら
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
空白セルをとばして転記
-
B列の最終行までA列をオート...
-
Excelで、あるセルの値に応じて...
-
VBAのFind関数で結合セルを検索...
-
VBAを使って検索したセルをコピ...
-
マクロについて。S列の途中から...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA シートモジュール...
-
文字列の結合を空白行まで実行
-
エクセルについて
-
VBAコンボボックスで選択した値...
-
Excel(VBA) 特定の条件に該当...
-
マクロ 最終列をコピーして最終...
-
エクセルVBAにて =A1=B1とすれ...
-
Excel VBA:エクセルのマクロで...
-
エクセルVBA intersect colu...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
文字列の結合を空白行まで実行
-
VBAのFind関数で結合セルを検索...
-
IIF関数の使い方
-
【VBA】2つのシートの値を比較...
-
マクロ 最終列をコピーして最終...
-
VBA 何かしら文字が入っていたら
-
Changeイベントでの複数セルの...
-
URLのリンク切れをマクロを使っ...
-
エクセルVBAにて =A1=B1とすれ...
-
VBAでのリスト不一致抽出について
-
データグリッドビューの一番最...
-
マクロについて。S列の途中から...
-
VBA UserFormからの転記で
-
targetをA列のセルに限定するに...
おすすめ情報