
ある一覧表があり、その中のC列のセルにある条件を満たしていれば背景色をつけています。
この色付セルがある行全体を別のシートに順次コピーして一覧表を作成させるマクロを以下のように作ってみました。
h = 6
For i = 7 To 最終行
If Worksheets("一覧表").Cells(i, "C").Interior.ColorIndex = 背景色番号 Then
Sheets(1).Select
Rows(i).Copy
Sheets(2).Select
h = h + 1
Rows(h).Select
ActiveSheet.Paste
End If
Next
データが少ないときはこれで問題がなかったのですが、件数が増えてきますと処理時間がかなり掛かります。4000件のデータで30分経っても終わりませんでした。
もっと処理時間が短くなるスマートな方法はありませんでしょうか?
No.1ベストアンサー
- 回答日時:
以下のようにSelectするのをやめ、Application.ScreenUpdating = Falseで画面の更新を一時停止するだけで飛躍的に早くなります。
h = 6
Application.ScreenUpdating = False
With Worksheets("一覧表")
For i = 7 To 最終行
If .Cells(i, "C").Interior.ColorIndex = 背景色番号 Then
h = h + 1
Sheets(1).Rows(i).Copy Sheets(2).Rows(h)
End If
Next i
End With
Sheets(2).Activate
Application.ScreenUpdating = True
もしSheets(1)とWorksheets("一覧表")が別物なら
ところでSheets(1)はWorksheets("一覧表")のことでしょうか?
そうであれば
Sheets(1).Rows(i).Copy Sheets(2).Rows(h) は
.Rows(i).Copy Sheets(2).Rows(h) だけでかまいません。
回答ありがとうごさいます。
教えていただいた記述で実行しますと、4000件のデータがものの1分で終了しました。
本当に助かりました。ありがとうございました。
No.4
- 回答日時:
毎回シートを切り替えずに処理すれば4000行程度なら即座に終わるかと思います。
これはmerlionXXさんが書かれているコードに変更すればよいですが、7行目から開始するのにh=6 とし i=7~~ となっているのは間違いの元になりやすそうでちょっと怖いしスマートじゃない気がします。細かいことですが、他の人や自分でも後からコードを参照する場合に理解しづらくなりますので。
なので下記のように修正されることをお勧めします。
Const StartRow As Integer = 7:'処理開始行
Const EndRow As Integer = 最終行:'処理終了行
h = StartRow
~中略~
For i = StartRow To EndRow
~中略~
'h=h+1を削除
Sheets(1).Rows(i).Copy Sheets(2).Rows(h)
h=h+1:'こちらに移動
~以下略~
ご指摘ありがとうございます。
できるだけ第3者が見ても理解できるものをと心がけていますが、他のところに気をとられて不親切な記述になっていました。
merlionXXさんの記述に変更を加え、無事解決しました。
ありがとうございました。
No.3
- 回答日時:
>C列のセルにある条件を満たしていれば背景色をつけています。
C列を「その条件」でオートフィルタを使って絞り込み,いちどにコピーしてしまいます。
with worksheets("一覧表")
.range("A6:Z" & .range("C65536").end(xlup).row).autofilter field:=3, criteria1:=">100"
.autofilter.range.copy destination:=worksheets("Sheet2").range("A6")
.autofiltermode = false
end with
この回答への補足
説明不足ですいません。ある条件というのは特定のセルで判断するのではなく、その行の複数セルを判断してということですので、目で見て地道に色を付けています。
merlionXXさんの回答で解決しました。
ありがとうございました。
No.2
- 回答日時:
シート1と同じ行に同じ色を付けるという操作のように見られますね。
それでしたらシート1の全体を選択してコピーし、シート2に書式のみを貼り付けることで良いように思いますね。お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
excelのデータで色つき行の抽出方について教えてください
Excel(エクセル)
-
VBマクロ 色の付いたセルを含む行をコピーしたい。
Visual Basic(VBA)
-
エクセルでマクロにてセル色と文字を他シートのセルへコピーしたい
その他(コンピューター・テクノロジー)
-
-
4
複数シートの色付きセルがある行を別シートに抽出
Excel(エクセル)
-
5
excel VBA 2つのシートの特定の列を比較して同じ値のセルがあったらその行を上書きしたい
Excel(エクセル)
-
6
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
7
列を1つずつ非表示にしたい
Excel(エクセル)
-
8
Excelのセルの色を変えた行(すべてのシート)を別シートに抽出したい
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの下部のシートタブの...
-
エクセルで別シートの同じ位置...
-
エクセルで数式は残したまま他...
-
EXCELでコピーしたグラフのデー...
-
ワークシートの行が途中から表...
-
VBA アクティブでないシートの...
-
Excelで保護のかかったシートの...
-
シート全体を他のブックのシー...
-
シート保護したExcelへの画像貼...
-
エクセルでセルの書式設定がで...
-
フィルタされたものを切り取り...
-
シート保護してても並び替えを...
-
【マクロ】【画像あり】4つの...
-
excelで勝手にテキストボックス...
-
エクセルのマクロでコピー後の...
-
エクセルVBA シートの保護につ...
-
エクセルファイルの容量が大き...
-
ロックしたセルのコピー&貼り付け
-
セルに背景色がある行を別シー...
-
行の挿入ができなくなった
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの下部のシートタブの...
-
エクセルで別シートの同じ位置...
-
シート全体を他のブックのシー...
-
Excelで保護のかかったシートの...
-
ワークシートの行が途中から表...
-
EXCELでコピーしたグラフのデー...
-
エクセルでセルの書式設定がで...
-
エクセルで数式は残したまま他...
-
ロックしたセルのコピー&貼り付け
-
【マクロ】【画像あり】4つの...
-
excelで勝手にテキストボックス...
-
VBA アクティブでないシートの...
-
Excelで大量の2000個のリストを...
-
スプレッドシートが真っ白にな...
-
シート保護してても並び替えを...
-
【エクセル】表から条件に合っ...
-
シート保護したExcelへの画像貼...
-
フィルタされたものを切り取り...
-
行の挿入ができなくなった
-
【Excel マクロ】貼り付け先の...
おすすめ情報