- ベストアンサー
VBAの質問です
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つめの質問。 ある行に何もデータがないときに限りその行を削除するというようなマクロはどうやればいいのでしょうか。出来たとしてもシートの下の方が全部消えてしまうので,適用する範囲を指定する必要がありそうですが。 よろしくお願い致します。
- みんなの回答 (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
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
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
お礼
ありがとうございました。