|
ハチさん
Msgbox WorksheetFunction.CountA(Range("A2:A65536") _
.SpecialCells(xlCellTypeVisible))
を記述してみると、可視セルのデータ件数は表示されないのにやはりタイトル行が転記されてしまいました。
IFの前後のコードは
Sub テスト()
Dim WS1 As Worksheet
Dim wb1 As Worksheet
Set WS1 = Sheet(1)
Set wb1 = Sheet(2)
ar = WS1.Range("A65536").End(xlUp).Row
With WS1
.AutoFilterMode = 0
.Range("A2:A" & ar).CurrentRegion.AutoFilter 5, Criteria1:=">=2006/1/1", Operator:=xlAnd, Criteria2:="<=2007/12/31"
End With
※Ifはここに入っています。
If WorksheetFunction.CountA(Range("A2:A65536") _
.SpecialCells(xlCellTypeVisible)) = 0 Then
GoTo 処理
End If
With WS1.Range("A2", WS1.Range("A65536").End(xlUp)) _
.SpecialCells(xlCellTypeVisible)
WS1.AutoFilter.Range.SpecialCells (xlCellTypeVisible)
.Offset(,1).Copy
wb1.Range("A2").Offset(, -3).PasteSpecial Paste:=xlValues
End With
・
・
・
以下3つのシートでコピーペーストのコードを記載
Keinさん
>>3つのシートにオートフィルタをかけて、2行目以降が空白なら次の処理に進む
>
>Dim WB As Workbook
>Dim WS As Worksheet
>
>Set WB = Workbooks("Book1.xls")
>Application.ScreenUpdating = False
>For Each WS In WB.Sheets(Array("Sheet1", "Sheet2", "Sheet3"))
> WS.Range("A1").CurrentRegion.AutoFilter 1, "Test"
> If WS.AutoFilter.Range.Columns(1).SpecialCells(12).Count > 1 Then
> フィルターの結果は抽出件数 1 以上なので、何かの処理をここへ書く
> End If
> WS.AutoFilterMode = False
>Next
>Application.ScreenUpdating = True: Set WB = Nothing
>
For Nextを使わずに処理を実行したい場合はどうしたらいいのでしょうか?
次の処理に進むというのを3回程繰り返すので、For Nextを使わない方法をとりたいのですが・・。
ちなみに
> If WS.AutoFilter.Range.Columns(1).SpecialCells(12).Count > 1 Then
を実行したところ、データがあるシートの転記がされなくなりました。
データが空白というよりは、データが無い場合の条件振り分けなので、
試しにIF文を削除して実行してみたところ、エラーにならず、IF文を削除しても1行目のデータが転記されてしまいました。
|
|