Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11178 / 13644 ツリー ←次へ | 前へ→

【17552】[無題] さっちゃん 04/9/2(木) 9:16 質問[未読]
【17555】Re:[無題] Asaki 04/9/2(木) 10:19 回答[未読]
【17556】Re:[無題] Jaka 04/9/2(木) 10:53 回答[未読]
【17572】変えてみました。 Jaka 04/9/2(木) 15:46 回答[未読]
【17578】また、間違えてました。 Jaka 04/9/2(木) 16:39 発言[未読]
【17589】Re:また、間違えてました。 うら 04/9/2(木) 22:22 発言[未読]
【17645】Re:また、間違えてました。 うら 04/9/3(金) 22:16 お礼[未読]

【17552】[無題]
質問  さっちゃん  - 04/9/2(木) 9:16 -

引用なし
パスワード
   よろしくお願いします。countifのマクロを作りました。
元データ、参照データとも200件程度のものなのですが、下のマクロですと2〜3分処理に掛かってしまい実用的ではありません。どうすれば処理が早くなるでしょうか?
ご指導よろしくお願いします。


Sub 重複チェック()

Application.ScreenUpdating = False
Cells(8, 12).Formula = "=COUNTIF('電気2'!$B$6:$B$157,電気!B8)"
Cells(8, 12).Copy
Cells(8, 12).Offset(1).PasteSpecial

Do Until ActiveCell.Offset(, 1).Value = ""
ActiveCell.Offset(1).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
  SkipBlanks:=False, Transpose:=False
Loop
 
 Range("L8", Range("L8").End(xlDown)).Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Application.ScreenUpdating = True

【17555】Re:[無題]
回答  Asaki  - 04/9/2(木) 10:19 -

引用なし
パスワード
   こんにちは。

処理速度を上げるには、
なるべくセルにアクセスする回数を減らす
というのが有効です。

Select/Activate しない
とか、
1度で設定できるものはセル範囲に対して、一気に設定してしまう
などです。

A.Select
Selection.B
などと言うコードは、大体、
A.B
とかけます。

よく見てませんが、数式を設定するのも、セル範囲に対して一気に出来そうです。
この辺を研究されてみては?

【17556】Re:[無題]
回答  Jaka  - 04/9/2(木) 10:53 -

引用なし
パスワード
   こんにちは。
速いかどうかは解りませんけど、これだけですみそうです。

With Range(Cells(8, 12), Cells(8, 12).Offset(1, 1).End(xlDown).Offset(1, -1))
  .Formula = "=COUNTIF('電気2'!$B$6:$B$157,電気!B8)"
  .Value = .Value
End With

【17572】変えてみました。
回答  Jaka  - 04/9/2(木) 15:46 -

引用なし
パスワード
   Dim OFR As Long
If Cells(8, 12).Offset(, 1) <> "" Then
  MsgBox "だめ"
  End
End If
If Cells(8, 12).Offset(1, 1) = "" Or Cells(8, 12).Offset(2, 1) = "" Then
  OFR = 0
Else
  OFR = 1
End If
With Range(Cells(8, 12), Cells(8, 12).Offset(OFR, 1).End(xlDown).Offset(1, -1))
  .Formula = "=COUNTIF('電気2'!$B$6:$B$157,電気!B8)"
  .Value = .Value
End With

【17578】また、間違えてました。
発言  Jaka  - 04/9/2(木) 16:39 -

引用なし
パスワード
   >If Cells(8, 12).Offset(, 1) <> "" Then
>  MsgBox "だめ"
>  End
>End If

 ↓

If Cells(8, 12).Offset(, 1) = "" And Cells(8, 12).Offset(1, 1) = "" Then
  MsgBox "だめ"
  End
End If

【17589】Re:また、間違えてました。
発言  うら  - 04/9/2(木) 22:22 -

引用なし
パスワード
   Jakaさん
親切のご指導頂いてありがとうございます。会社にデータがあるので、早速明日試してみます。また結果をご報告します。
よろしくお願いします。

▼Jaka さん:
>>If Cells(8, 12).Offset(, 1) <> "" Then
>>  MsgBox "だめ"
>>  End
>>End If
>
> ↓
>
>If Cells(8, 12).Offset(, 1) = "" And Cells(8, 12).Offset(1, 1) = "" Then
>  MsgBox "だめ"
>  End
>End If

【17645】Re:また、間違えてました。
お礼  うら  - 04/9/3(金) 22:16 -

引用なし
パスワード
   Jakaさん
教えて頂いたコードで処理が早くなりました。ほんとにありがとうござました。

11178 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free