解決済み

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

  • すぐに回答を!
  • 質問No.299313
  • 閲覧数87
  • ありがとう数6
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 59% (116/195)

単純な質問かもしれませんが、

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

よろしくお願いします。

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

  • 回答No.1

ベストアンサー率 68% (791/1163)

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

お礼率 59% (116/195)

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

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

↑実践していきます。

ありがとうございました。
投稿日時 - 2002-06-25 22:38:54
感謝経済、優待交換9月20日スタート

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 45% (1388/3066)

こんにちは。

こんな感じで範囲を取得することも出来ます。
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

お礼率 59% (116/195)

papayukaさん!いつもありがとうございます。
今回は、#1で組んでしまったのですみません。
でも、すっごく単純で分かりやすい回答をありがとうございます。
一つずつ調べて、勉強していきます。まだまだ実践できる課題がたくさんあるので頑張ります。
投稿日時 - 2002-06-25 22:42:53
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ