アプリ版:「スタンプのみでお礼する」機能のリリースについて

下記マクロは、1行~Rows.Countの間で条件に合う1行を抽出し、別シートにコピーするものです。3種類の方法で所要時間を比較してます。
①セルを1行目~Rows.Countまで調べて抽出
②セルを一旦変数vrに収納してから調べて抽出
③autofilterで抽出
ところがautofilterでエラーとなります。どこがおかしいのでしょう?

場所:
.Range("A1").CurrentRegion.AutoFilter _
Field:=1, _
Criteria1:=100000, Operator:=xlFilterValues
メッセージ:
「実行時エラー
 オートメーションエラーです。
 起動されたオブジェクトはクライアントから切断されました」


Sub test()

Dim vr As Variant

Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Cells(1, 3) = Timer
For i = 1 To Rows.Count
Cells(i, 1) = i
Next i
Cells(2, 3) = Timer
Application.ScreenUpdating = True

′①
j = 1
For i = 1 To Rows.Count
If Cells(i, 1).Value = 100000 Then
Rows(i).Copy Destination:=Worksheets("Sheet2").Rows(j)
j = j + 1
End If
Next i
Cells(3, 3) = Timer

′②
vr = Range("A1:A" & Rows.Count)
For i = 1 To Rows.Count
If vr(i, 1) = 100000 Then
Rows(i).Copy Destination:=Worksheets("Sheet2").Rows(j)
j = j + 1
End If
Next i
Cells(4, 3) = Timer
 
'③
With ActiveSheet
.AutoFilterMode = False
.Range("A1").CurrentRegion.AutoFilter _
Field:=1, _
Criteria1:=100000, Operator:=xlFilterValues
.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _
Worksheets("Sheet2").Range("A1")
.AutoFilterMode = False 'AutoFilter を解除
End With
Cells(5, 3) = Timer
Application.Calculation = xlCalculationAutomatic

End Sub

A 回答 (1件)

こんにちは。



>autofilterでエラーとなります。どこがおかしいのでしょう?
AutoFilter では、
 Criteria1:=100000
このような書き方はしなかったはずです。

Criteria1:="=100000"
  か
Criteria1:="100000"
のいずれかを書けばよいと思います。

ちなみに、
Criteria の部分のヘルプを見ますと、
「抽出条件となる文字列 ("101" など) を指定します。」
と、文字列指定になっています。

'//
 With ActiveSheet
  .AutoFilterMode = False
  With .Range("A1").CurrentRegion
   .AutoFilter Field:=1, Criteria1:="100000" _
   , Operator:=xlFilterValues
  End With
   .AutoFilter.Range.SpecialCells(xlCellTypeVisible).Copy _
   Worksheets("Sheet2").Range("A1")
  .AutoFilterMode = False 'AutoFilter を解除
 End With

'///
.AutoFilter.Range.
これは、AutoFilterとして認識されている範囲だという意味です。
    • good
    • 0
この回答へのお礼

ありがとうございます。
MSDNを確認すると、確かに文字列指定でした。正常動作しました。また、別シートへのコピー法も使わせて頂きました。時間を比べてみると、全体のデータ数や抽出するデータ数で大小関係がコロコロ変わるのが面白いです。全体データ数が10点程度ならcellsを直接触る方が速いようです。

お礼日時:2015/06/05 10:12

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています