VBAの初心者です。
各コマンドの意味もよく理解してないため、原因が判りません・・・。
■特定情報を抽出するVBAの結果が合致しません。
・Record数が「5000件」あるExcelFileから、Field:3に「1」が入力されているRecordを抽出するVBAを作りました。
・ExcelsheetでFilterにより抽出するとField:3には「1」が「839件」入力されています。
しかし、実際に作成したVBAを走らせてみると「800件」しか抽出できません。
■下記が作成したVBAです。
--------------------------------------------
1)Private Sub task_Select2()
Range("F1").Select
Selection.AutoFilter Field:=6, Criteria1:="=1", Operator:=xlAnd
Rows("3:5503").Select
Range("B3").Activate
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:=6
ActiveWindow.LargeScroll Down:=-13
Range("B1").Select
End Sub
2)Private Sub backup_task2()
'バックアップ用コピー処理
Dim Model As String, fName As String
Model = ActiveSheet.Name
fName = Model & "_wo"
Worksheets(Model).Copy After:=Worksheets(Model)
ActiveSheet.Name = fName
Worksheets(Model).Activate
End Sub
3)Private Sub task_Select3()
Selection.AutoFilter Field:=3, Criteria1:=">1", Operator:=xlAnd
Rows("3:10000").Select
Range("B3").Activate
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:=3
ActiveWindow.LargeScroll Down:=-25
Range("B1").Select
End Sub
4)Sub A_Main_task()
'動作用メイン処理
Application.Run "backup_task"
Application.Run "task_Loop"
Application.Run "CommentMix"
End Sub
5)Private Sub backup_task()
'バックアップ用コピー処理
Dim model As String, fName As String
Model = ActiveSheet.Name
fName = Model & "_copy"
Worksheets(Model).Copy After:=Worksheets(Model)
ActiveSheet.Name = fName
Worksheets(Model).Activate
End Sub
--------------------------------------------
1)でField:6に情報が入力されてないRecordを削除。
3)でField:3に「1」以外が入力されているRecordを削除。
●1)の「Rows("3:5503").Select」でRecord「5000件」なら問題ないと思いましたが、
1)の結果は「4770件」でした。(5000件になると思ったのですが・・・)
・5000件以上のRecordを処理させようと思い、「Rows("3:5503").Select」の範囲を単純に増やしても1)の結果が減ってしまいます。
◎Record数が「2700件」程度の情報は問題なく目的数の情報を抽出できました。
●来週18日の月曜日中になんとか作成したい資料なのです。
お手数ですが宜しくお願いします。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
> 1)でField:6に情報が入力されてないRecordを削除。
Field:=6, Criteria1:="=1"
ですのでField:6が1と等しい行を削除していますが、それでいいのでしょうか。
> 3)でField:3に「1」以外が入力されているRecordを削除。
1以外だと通常
Criteria1:="<>1"
と指定されると思われます。
ですので
> ●1)の「Rows("3:5503").Select」でRecord「5000件」なら問題ないと思いましたが、
> 1)の結果は「4770件」でした。(5000件になると思ったのですが・・・)
1)の前提が違うのではないでしょうか。
この回答への補足
お世話になります。
早速のご指摘、ありがとうございました。
この部分は、退職者が作成したため確認を取れませんが、「Field:=6」には
「1」が入力されることが無いため、「=1」で入力されていないRecord(空欄)
を削除する意図だと思います。
「Field:=3」には「1~4」の数値のみが入力されるため、「>1」で「2~4」を削除し、
「1」を抽出することが意図だと思います。
【修正内容】
A.「Field:=6」は、年月「yyyymm」が入力されています。
・これを「Field:=3」(1~4の数値入力Field」に修正し、「=0」に変更して入力
の無いRecord削除を意図しました。
B. 3)の削除記述を「<>1」に修正しました。
これにより、5000件以下のデータ集計は、正常に抽出できました。
(Field:3に入力された「1」のデータ739件を正常に抽出)
C. 1)のRows("3:5503")を("3:5503")に変更し、「7974件」のデータを集計した
ところ、3)の抽出結果は「1件」でした・・・。
※本来、Field:3には「1」の入力されたデータが1232件存在します。
A及びBの修正では、根本的な解決になっていない様子です。
No.2
- 回答日時:
フィルターの▼が付いているセルの先頭がA列としたら
Field:3はC列になります(B列が先頭ならD列)がそこが対象として結果はあっていますか?
この回答への補足
迅速な返答、ありがとうございます。
■補足記載の内容が間違ってした。
----------------------------------------------------------------
C. 1)のRows("3:5503")を("3:5503")に変更し、「7974件」のデータを集計した
ところ、3)の抽出結果は「1件」でした・・・。
↓
「1)のRows("3:5503")を("3:10000")に変更」
----------------------------------------------------------------
●Cellの先頭は「A列=Field:1」、「C列=Field:3」で合ってます。
・抽出Dataの参照列は、「C列」です。
修正したVBAによる集計結果は、下記の通りです。
【3,804件でRecord空欄無し】 ※正常抽出Data
************************
下記に修正
1)Selection.AutoFilter Field:=3, Criteria1:="=0", Operator:=xlAnd
Rows("3:5503").Select
Range("B3").Activate
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:=3
3)Private Sub task_Select3()
Selection.AutoFilter Field:=3, Criteria1:="<>1", Operator:=xlAnd
Rows("3:10000").Select
Range("B3").Activate
Selection.Delete Shift:=xlUp
Selection.AutoFilter Field:=3
ActiveWindow.LargeScroll Down:=-25
Range("B1").Select
************************
A. DataRecord総数= 3,804件
B. 1)でのRecord削除結果= 3.804件
C. 3)でのRecord削除結果= 678件 ・・・・・ 「1」の入力数
D. 元Dataの「Field:3(C列)」でのFilter結果= 678件
⇒目的Dataの抽出に成功!
【7,974件でRecord空欄無し】 ※1件しか抽出せず
*************************
1)のRows("3:5503")を("3:10000")に変更
*************************
A. DataRecord総数= 7,974件
B. 1)でのRecord削除結果= 7,974件
C. 3)でのRecord削除結果= 1件 ・・・・・ 最初のRecordのみ
D. 元Dataの「Field:3(C列)」でのFilter結果= 1,232件
※「1」の入力数=1,232件
・Rows("3:10000")で項目Recordの1行目と必ずDataの入っている
2行目のRecord以下の3列目から集計対象にしているため、2行目
の集計範囲外Recordのみ抽出しています。
⇒目的Dataの抽出に失敗
●とりあえず、5000件を超えるデータは、5000件以下に分けて集計を
行えば、目的のDataを抽出できました。
・初心者には難しいですね・・・。
新期や月末/月初の処理が多忙になり、お礼の入力が遅れてしまい申し訳ありません。
当該作業に注力できない状況になってしまったため、集計可能なレコード数を複数回に分けて集計することで処理しました。
参考となる情報、ありがとうございました。
No.3
- 回答日時:
ステップ実行して
デバッグのステップイン F8
で実際に思うようなフィルターになっているのか確認してみてはいかがですか。
こちらではC列0から4までのデータで10000行でもちゃんと1のデータだけが残りましたよ。
ところで
1)Selection.AutoFilter Field:=3, Criteria1:="=0", Operator:=xlAnd
2)Selection.AutoFilter Field:=3, Criteria1:="<>1", Operator:=xlAnd
2回同じフィールドにフィルターをかけていますが
"=0"は"<>1"に含まれますから2)のコードだけでいいのではないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【至急】Excel 同一人物の情報を一行にまとめる(複数行) 6 2022/05/24 17:58
- Visual Basic(VBA) エクセル VBA 処理スピードを上げたいのですが。 6 2023/03/31 20:52
- Visual Basic(VBA) データのある範囲を選択するVBAについて 2 2022/09/03 00:20
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) Sheet2の日付をキーにオートフィルターで2023年1月のデータを抽出し、Sheet3へ書き出すた 2 2023/03/06 23:57
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでオートフィルタのボ...
-
エクセルで時刻(8:00~20:00)...
-
access マクロでのフィルタの...
-
オートフィルタで選択した項目...
-
エクセルの偶数行(奇数行)の抽出
-
今日の日付のデータをすばやく...
-
エクセルで、条件に一致した行...
-
Excelで文字を入力と自動的にフ...
-
スプレッドシートのチェックボ...
-
エクセルのフィルター機能の下...
-
エクセルのオートフィルタで最...
-
結合したセルのオートフィルタ...
-
【Excel/関数/条件付き書式】月...
-
Excelで西暦の日付から「和暦の...
-
エクセル オートフィルタ中の...
-
エクセルVBA オートフィル...
-
エクセル2003 重複削除方法
-
Excelについて Excelで何日かに...
-
複数の特定列で、条件を同時に...
-
関数で小数点以下を抽出したい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでオートフィルタのボ...
-
エクセルのオートフィルタで最...
-
エクセルで時刻(8:00~20:00)...
-
Excelのオートフィルタで非表示...
-
エクセルの偶数行(奇数行)の抽出
-
エクセル関数で、数字の入った...
-
エクセルで、条件に一致した行...
-
オートフィルタで3つ以上の条...
-
access マクロでのフィルタの...
-
Excel共有ブックのオートフィル...
-
なぜShowAllDataだとうまく行か...
-
エクセル・条件付で行を削除す...
-
オートフィルタで選択したデー...
-
【EXCEL】条件に一致した最新デ...
-
今日の日付のデータをすばやく...
-
エクセル、オートフィルタで最...
-
Excelオートフィルターで絞り込...
-
可視セルを対象としたcountifが...
-
【Excel/関数/条件付き書式】月...
-
データの抽出を教えてください
おすすめ情報