• ベストアンサー

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

質問者が選んだベストアンサー

  • ベストアンサー
  • papayuka
  • ベストアンサー率45% (1388/3066)
回答No.1

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

seven_triton
質問者

お礼

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

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

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

関連するQ&A