みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

エクセル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

よろしくお願いします。

投稿日時 - 2002-06-24 21:34:25

QNo.299313

すぐに回答ほしいです

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

まず、最初の 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

投稿日時 - 2002-06-24 22:38:33

お礼

nishi6さん!ありがとうございました。
勉強になりました。
まだまだ、いろいろと効率を求めたいことがあるので、しばらくVBAにはまって、勉強していきます。

>マクロの作り方としては、まずはマクロの記録を行ってみること。
>それ以上に、記録したマクロをどのように書き換えるか、だと思っています。

↑実践していきます。

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

投稿日時 - 2002-06-25 22:38:54

ANo.1

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.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

投稿日時 - 2002-06-24 23:27:49

お礼

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

投稿日時 - 2002-06-25 22:42:53

あなたにオススメの質問