• ベストアンサー

EXCELマクロで特定の行以下をコピーしたい

BookA.xlsファイルからBookB.cvsがあり、 bookB.csvには1から不特定に数字が昇順にならんでいます bookB.csv  A    B 1 1   文字列A 2 2   文字列B 3 54   文字列C 4 100  文字列D 5 101  文字列E BookA.xlsからbookB.csvを読出し、特定の数値(100番)を探し出し その行から下100行をコピー、BookA.xlsのSheetCに貼り付け という作業をするマクロを組みたいと思っています。 'CSVファイルを開く CSVname = Application.GetOpenFilename(Title:="CSVファイル指定", fileFilter:="CSV ファイル (*.CSV), *.csv") If CSVname = False Then MsgBox "ファイルを1個指定して下さい" Exit Sub End If 'ファイルをひらく Workbooks.Open CSVname '100番検索 Set Obj = Cells.Find("100", LookAt:=xlWhole) If Obj Is Nothing Then MsgBox "見つかりませんでした。" Else Tate = Cells.Find("100", LookAt:=xlWhole).Row End If 'A列100番のある行から199行を選択・コピー エラー→Range(Cells(1, Tate), Cells(2, Tate)).Select このように作ってみたのですが、どうしてもここでエラーになり 先に進めません。 どうか解決方法をお教え下さい。 宜しくお願いします。

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>Tate = Cells.Find("100", LookAt:=xlWhole).Row 検索結果が入るのは"Obj"なので、 Tate = Obj.Row ですね。 >Range(Cells(1, Tate), Cells(2, Tate)).Select Range(Cells(1, Tate), Cells(2, Tate)).Copy だとエラーにはならないようです。

tian_li
質問者

お礼

きちんと意図通りに動きました .Copyで動かなかった時があったので.selectにしたのですが .Copyでも動くようになりました。 ありがとうございます!

その他の回答 (1)

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.2

Workbooks.Openの行以降をコピーして動かしてみましたが、エラーは起きませんでした。XP SP2+OFFICE2003です。 With Activesheet  Range(.Cells(1, Tate), .Cells(2, Tate)).Select End With のようにシートを明示してみてはどうでしょう でも「A列100番のある行から199行を選択」なら  If Obj Is Nothing Then    MsgBox "見つかりませんでした。"  Else    Obj.Resize(199,2).Select    Selection.Copy  End If でよいかもしれません

tian_li
質問者

お礼

こちらの方がスマートにできそうですね Resizeプロパティの事も念頭に置きながら 完成まで頑張ってみたいと思います。 ありがとうございました!