- ベストアンサー
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 このように作ってみたのですが、どうしてもここでエラーになり 先に進めません。 どうか解決方法をお教え下さい。 宜しくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>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 だとエラーにはならないようです。
その他の回答 (1)
- zap35
- ベストアンサー率44% (1383/3079)
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 でよいかもしれません
お礼
こちらの方がスマートにできそうですね Resizeプロパティの事も念頭に置きながら 完成まで頑張ってみたいと思います。 ありがとうございました!
お礼
きちんと意図通りに動きました .Copyで動かなかった時があったので.selectにしたのですが .Copyでも動くようになりました。 ありがとうございます!