• ベストアンサー

エクセルVBA!(COPY) Win2000,offce2000

単純な質問かもしれませんが、 WorkBooks("test")から 別のWorkBooks("Data").WorkSheets("Sheet1")のデータの数を判定して全てをコピーして、 WorkBooks("test")のWorkSheets("Sheet2")へペーストしたいのですが、うまくいきません ↓のような感じです。 Dim wstest As Worksheet Dim wsData As Worksheet Dim wsNM As String Dim Drow As Long Sub copy() 'DataSheetのSheet名がその都度違うので、取得しました。 wsNM = wsData.Sheets(1).Name Set wsData = Workbooks("Data.xls").Worksheets(wsNM) Set wsTest = Workbooks("Test.xls").WorkSheets("Sheet2") 'データの範囲判定 Drow = wsData.Range("H65536").End(xlUp).Row '/////// ここからが???です /////// wsDataのA1からBAのDrowを範囲を指定して、Copy → wsTestのA1に貼り付けたいのですが、どうしたらよいのでしょうか? コピーしたり、直接書くようにしたりといろいろなコードを書いてみましたがダメでした。 Cellsで範囲をとる方法がわかりません。Rangeなら(A1:BA300)のように取れる範囲もCellsの時はどうしたらよいのでしょうか?(そのまま書けば、Cells(1,1):Cells(Drow,53)みたいな・・・・・) と、悩んでいるより一気にコピーするのもどうかと思いFor~Nextで1行ずつ書いていったらどうかとも考えましたが、うまくいきませんでした。 End Sub ※ Drowは、6000~20000 よろしくお願いします。

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

まず、最初の wsNM =・・・ がおかしいですね。 範囲の使い方はRangeとCellsを書いてみました。 マクロの作り方としては、まずはマクロの記録を行ってみること。 それ以上に、記録したマクロをどのように書き換えるか、だと思っています。がんばって下さい。 Sub SheetCopy()   wsNM = Workbooks("Data.xls").Sheets(1).Name   Set wsData = Workbooks("Data.xls").Worksheets(wsNM)   Set wstest = Workbooks("Test.xls").Worksheets("Sheet2")   Windows("data.xls").Activate   Dim Drow As Long   Drow = wsData.Range("H65536").End(xlUp).Row   'Rangeに直接書いてみました   Range("A1:BA" & Drow).Copy Destination:=wstest.Range("A1")   'Cells()を使えば下のようになります。53がBAです。   '表示→オブジェクトブラウザでRangeを入力してHelpを見れば沢山載っています   'Range(Cells(1, 1), Cells(Drow, 53)).Copy Destination:=wstest.Range("A1")   Windows("test.xls").Activate End Sub

rurucom
質問者

お礼

nishi6さん!ありがとうございました。 勉強になりました。 まだまだ、いろいろと効率を求めたいことがあるので、しばらくVBAにはまって、勉強していきます。 >マクロの作り方としては、まずはマクロの記録を行ってみること。 >それ以上に、記録したマクロをどのように書き換えるか、だと思っています。 ↑実践していきます。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

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

こんにちは。 こんな感じで範囲を取得することも出来ます。 Addressの後の(1,1)は絶対、(0,0)は相対です。 Sub Test() Set wsData = Workbooks("Data.xls").Worksheets(1)  MsgBox wsData.Range("A1").CurrentRegion.Address(1, 1)  MsgBox wsData.UsedRange.Address(0, 0) End Sub

rurucom
質問者

お礼

papayukaさん!いつもありがとうございます。 今回は、#1で組んでしまったのですみません。 でも、すっごく単純で分かりやすい回答をありがとうございます。 一つずつ調べて、勉強していきます。まだまだ実践できる課題がたくさんあるので頑張ります。

すると、全ての回答が全文表示されます。

関連するQ&A