• ベストアンサー

エクセルBVA範囲

VBAの超初心者です、A1からZ95の範囲内でA1の列に文字が有る行をZ列まで選択コピーして 別のシートへ貼り付ける命令文を教えて下さい。ちなみにエクセル2003です。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

>BVA範ーー>VBAのミスタイプ。お門が知られるので注意。 >A1からZ95の範囲内 A列からZまでで、の意味ではないのか? >A1の列に文字が有る行をZ列まで選択コピーして A列にデータがある行は、必ずB-Z列にもその同じ行分だけデータがあるのではないのか?長方形形。 質問の表現だと難しく考えてしまう。 ーー A-Z列までデータ最終行までをコピーして、他シートへ貼り付けたい、でわかる。 こういう類には (1)End(xlup) (2)Currentregion (3)UsedRange など有り (2)(3)はデータ内容のあり方によっては不適当な結果になるが、本件はどうかな。 ーー (1) Sub test01() Dim sh1, sh2 Set sh1 = Worksheets("Sheet1") Set sh2 = Worksheets("Sheet2") d = sh1.Range("A65536").End(xlUp).Row sh1.Range("A1:Z" & d).Copy sh2.Range("A1") End Sub ーーー データ最終行のとらえ方は Googleででも「VBA データ最終行」で照会すれば、すぐわかること。 VBAで毎行処理をする場合には、「いの1番」に学ぶ必要になること。 Range("A5").End(xlDown).Row や Sub test02() Range("A1").Select MsgBox Selection.SpecialCells(xlCellTypeLastCell).Row End Sub などでも良いが、後者はデータの在り様と使い道によっては、結果が適当でないことがある。

momo34649
質問者

お礼

回答ありがとうございます。初歩的な質問で申し訳ありませんでした。

その他の回答 (1)

  • DOUGLAS_
  • ベストアンサー率74% (397/534)
回答No.1

 下記の操作を [新しいマクロの記録(R)...] で記録してみましょう。 1)シート に オートフィルタ をかけます。 2)A1 を アクティブ にした状態で、プルダウン から、A列 の [オートフィルタ オプション] を開き、[A1] の欄は空にして、その右の欄を「と等しくない」にして、[OK] します。 3)A1:Z95 に相当する範囲を選択して、コピー([Ctrl] + [C])します。 4)「別のシートへ貼り付け」ます。 5)元の シート の オートフィルタ を解除します。  すると、 Sub Macro1()  Selection.AutoFilter  Selection.AutoFilter Field:=1, Criteria1:="<>", Operator:=xlAnd  Application.Goto Reference:="R95C26"  Range(Selection, Cells(1)).Select  Selection.Copy  ActiveSheet.Previous.Select  ActiveSheet.Paste  ActiveSheet.Next.Select  Application.CutCopyMode = False  Selection.AutoFilter  Range("A1").Select End Sub というような コード が得られますので、アクティブ な シート、アクティブ な セル を意識して、これを書き直します。 Sub Macro1()  Sheets("コピー元のシート").Select  Range("A1").Select  Selection.AutoFilter  Selection.AutoFilter Field:=1, Criteria1:="<>", Operator:=xlAnd  Range("A1:Z95").Copy Sheets("別のシート").Range("A1")  Application.CutCopyMode = False  Selection.AutoFilter End Sub Sub Macro2()  Sheets("コピー元のシート").Columns("A:A").SpecialCells(xlCellTypeConstants, 23).EntireRow.Copy _   Sheets("別のシート").Range("A1") End Sub というような簡単な コード でも似たようなことができますが、AA列以右も入ってしまいますので、用途(ニーズ)に応じて コーディング しなければなりません。  何か、問題が発生したら、その都度、エラー の原因を突き止めて、コーディング を改善されればよいかと存じます。

momo34649
質問者

お礼

早速回答していただき大変ありがとうございました。助かりました。

関連するQ&A