1つめの質問。

Dim Sht2 As Worksheet
Dim Sht3 As Worksheet
Set Sht2 = Worksheets("sheet2")
Set Sht3 = Worksheets("sheet3")
Sht2.Range("A5").CurrentRegion.AdvancedFilter _
Action:=xlFilterCopy, _
criteriarange:=Sht2.Range("A132:A133"), _
copytorange:=Sht3.Range("A5"), _
Unique:=False

というプログラムで,AdvancedFilterのところを後で繰り返し処理したいと思っているので,まずcriteriarange:=Sht2.Range("A132:A133"), _のところをcriteriarange:=Sht2.Range(Cells(132,1),Cells(33,1)), _としてみたのですがエラーが出てしまいます。なぜでしょうか。また,繰り返し処理するためにはcriteriarange:=Sht2.Range("A132:A133"), _のままではダメなのでしょうか。

2つめの質問。
ある行に何もデータがないときに限りその行を削除するというようなマクロはどうやればいいのでしょうか。出来たとしてもシートの下の方が全部消えてしまうので,適用する範囲を指定する必要がありそうですが。

よろしくお願い致します。

A 回答 (2件)

1つめ



 Sht2.Range(Sht2.Cells(132,1),Sht2.Cells(33,1))

のようにするか、

 with Sht2
   .Range(.Cells(132,1),.Cells(33,1))
 end with

のように省略して With で括るとどうでしょう?

2つめ
A列が空白の場合に行を削除します。

Sub row_del()
 For i = Range("A65536").End(xlUp) To 2 Step -1
  If Range("A" & i) = "" Then Rows(i).Delete
 Next i
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。

お礼日時:2005/04/30 18:30

1.


CriteriaRange:=Sht2.Range(Cells(132,1),Cells(133,1)),
※ Cells(33,1)は修正しました。

このCells は、Sht2のレンジオブジェクトでありながら、Cellsは、ActiveSheet の配下になっているわけですから、そのままでは、矛盾していますから、エラーになりますね。Sht2.Range("A132:A133")を使いたくないのでしたら、イレギュラーですが、

CriteriaRange:=Range(Sht2.Cells(132,1),Sht2.Cells(133,1))
としてみてください。
この場合、Rangeは、Application の配下になりますので、あえて、Sht2.Range(.... とする必要はありません。

2.
>出来たとしてもシートの下の方が全部消えてしまうので,
おっしゃっていることが、良く分かりませんが、例えば、こういうことですか?
その行のどこにもデータが入っていない限りに、実行します。

Sub Del_Row()
If Application.CountA(ActiveCell.EntireRow) = 0 Then
     ActiveCell.EntireRow.Delete xlShiftUp
End If
End Sub
    • good
    • 0

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


人気Q&Aランキング

おすすめ情報