
ある一覧表があり、その中の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も見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
VBマクロ 色の付いたセルを含む行をコピーしたい。
Visual Basic(VBA)
-
複数シートの色付きセルがある行を別シートに抽出
Excel(エクセル)
-
excelのデータで色つき行の抽出方について教えてください
Excel(エクセル)
-
4
VBAで色の付いているセルの行削除
Excel(エクセル)
-
5
エクセルで色の変更を他のシートに反映させるには
Access(アクセス)
-
6
エクセルの色も=イコールできますか?
Windows Me・NT・2000
-
7
エクセルでマクロにてセル色と文字を他シートのセルへコピーしたい
その他(コンピューター・テクノロジー)
-
8
エクセル:色の付いたデータをまとめて抽出したい。
Excel(エクセル)
-
9
別シートのセルの色も同じ色に変更する方法を 教えてください
Excel(エクセル)
-
10
複数シートに色付きセル(条件つき書式で設定済み)の行を別シートに抽出
Visual Basic(VBA)
-
11
VBA別シートの最終行の次行へ転記したい。
Visual Basic(VBA)
-
12
エクセルVBAで、ある文字を含んでいたら別シートに抽出したい
Excel(エクセル)
-
13
色のリンクは出来ますか?【エクセル】
Access(アクセス)
-
14
エクセルでデータがある部分だけ罫線で囲いたいです。
Excel(エクセル)
-
15
別シートのデータを参照してセルの色を塗り替えたい
Excel(エクセル)
-
16
vba 2つの条件が一致したらコピーして別シートに値のみ貼り付け
Visual Basic(VBA)
-
17
【Excel VBA】指定行以降をクリアするには?
Visual Basic(VBA)
-
18
【VBA】特定の文字が入っている行の一部を抽出して別シートコピーするには
Visual Basic(VBA)
-
19
【VBA】指定した検索条件に一致したら別シートに転記したい
Visual Basic(VBA)
-
20
エクセル 別シートへのコピーを,セルの色や太字斜体までやりたい。
Excel(エクセル)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
excelで勝手にテキストボックス...
-
5
エクセル、ワークシートの名前...
-
6
EXCELでコピーしたグラフのデー...
-
7
エクセルでセルの書式設定がで...
-
8
ワークシートの行が途中から表...
-
9
シート全体を他のブックのシー...
-
10
worksheetクラスのcopyメソッド...
-
11
Excelで保護のかかったシートの...
-
12
EXCELのマクロについて
-
13
【OpenOffice】 改ページプレビ...
-
14
エクセルで多数のシートをまと...
-
15
エクセルで選択した行以外を削...
-
16
Excelのシート間で数式のコピー...
-
17
【エクセル】表から条件に合っ...
-
18
コピー&ペーストすると、VLOOK...
-
19
シート保護したExcelへの画像貼...
-
20
セルに背景色がある行を別シー...
おすすめ情報
公式facebook
公式twitter