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

締切り済みの質問

ExcelのVBAでシートを直接Selectする方法

次のようなVBAがあります。

For intAge = 6 To 11
 Range(strBase & intAge).Select
 Selection.Copy
 Windows(strMasterName).Activate
 Sheets(strBase).Select
 Range(strBase & intAge & "_" & strNo).Select
 Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, Blanks:= _
  False, Transpose:=False
 Windows(strFileName).Activate
 Sheets(strBase).Select
Next intAge

2つのファイルを開いていて、1つのファイルから別のファイルにデータを連続してコピーしています。
WindowsをActivateして、SheetsをSelectしてからRangeをSelectしているのですが、
直接、WindowsのSheetsのRangeをSelectする方法はないのでしょうか?
Windows(strFileName).Sheets(strBase).Range(strBase & intAge).Select
としたらエラーが発生してダメでした。
わかる方いらっしゃいましたら、よろしくお願いいたします。
(これで十分動いているのですが、もう少し、簡潔な文にしたいのです)

投稿日時 - 2003-03-29 18:24:50

QNo.510161

暇なときに回答ください

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

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

回答(5)

ANo.5

No.1で回答した者です。
値を入れたい場合、Valueプロパティを指定しますが
RangeオブジェクトはデフォルトがValueですので無指定でよかったはずです。
気になったのは "_"& srtNo の部分ですが、これは必要でしょうか

For intAge = 6 To 11
Workbooks(strMasterName).Worksheets(strBase).Range(strBase & intAge) = _
Workbooks(strFileName).Worksheets(strBase).Range(strBase & intAge)
Next intAge

これではダメでしょうか

投稿日時 - 2003-03-31 03:40:45

お礼

ありがとうございます。
「"_"& srtNo 」の部分は、学校番号が入ります。
このVBAはFDで各学校からもらったデータをまとめるものです。
したがって、「"_"& srtNo 」の部分がないとどの学校の場所にコピーするのかわからなくなります。
また、私が作ったVBA(キーボードマクロの編集)でも、うまく動いていたので「"_"& srtNo 」が問題とは思えないのですが。
WorkbooksとWorksheetsをHelpで見たのですが、オブジェクトとプロパティがあり私には理解できませんでした。
ebisさんのを参考にいろいろ試してみようと思います。
ありがとうございます。

投稿日時 - 2003-03-31 06:04:04

ANo.4

簡略し過すぎたでしょうか・・・・


Windows(strFileName).Sheets(strBase).Range(strBase & intAge) = Workbooks(strMasterName).Sheets(strBase).Range(strBase & intAge & "_" & strNo).Text

という意味だったのですが。。。

投稿日時 - 2003-03-30 01:26:46

お礼

ありがとうございます。
しかし、「438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」というメッセージが出ました。
Windowsオブジェクト(プロパティ?)には入力時にでるプロパティ等のリストにSheetsの候補が出てきませんでした。
Windowsに関係ありそうなプロパティにActiveSheetというやつがありました。
2つのWindow上でアクティブなシート同士のコピーができそうです。
いろいろ試してみようと思います。
重ね重ねありがとうございます。

投稿日時 - 2003-03-31 05:43:03

ANo.3

値のコピーだけをしたいのであれば、
Range("A1") = Range("A2").Text
でも可能なのですが、、、

投稿日時 - 2003-03-29 21:41:27

お礼

ありがとうございます。
しかし、試してはいないのですが、上記の方法ですと、同じシート内でないとうまくいかない気がします。
私がやりたいのは、別のファイル(ブック)のデータをコピーするので、少なくとも、ファイル名とかを指定してやらなければならないと思います。
イメージは
Hogehoge("ファイルA.xls").Range("A1")=Hogehoge("ファイルB.xls").Range("A2").Text
という感じですが、(もちろん、Hogehogeには何かオブジェクトが入るのですが)
うまく表現できなくてすみません。

投稿日時 - 2003-03-29 22:31:33

ANo.2

よくわかっておりませんが、、、間違っていたら失礼。。。
Selectionを使用しないで、そのまま対象を指定したらどうでしょうか?

For intAge = 6 To 11
Windows(strFileName).Sheets(strBase).Range(strBase & intAge).Copy
Workbooks(strMasterName).Sheets(strBase).Range(strBase & intAge & "_" & strNo).PasteSpecial xlValues, xlNone, False, False
Next intAge

投稿日時 - 2003-03-29 21:09:26

お礼

ありがとうございます。
ただ、「438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」というメッセージが出ました。

実は、いろいろ試した結果、
Application.Goto Reference:=strBase & intAge
Selection.copy
Windows(strMasterName).Activate
Application.Goto Reference:=strBase & intAge & "_" & strNo
Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _
 False, Transpose:=False
としても動きました。(キーボードマクロからの編集です)
この方が、前のより少し、文章が簡潔になりました。
(でも、もし、TAGOSAKU7さんのような方法ができたらもっと簡潔なのですが)

投稿日時 - 2003-03-29 21:28:50

ANo.1

自信はないのですが、これではだめでしょうか。
For intAge = 6 To 11
Workbooks(strMasterName).Worksheets(strBase).Range(strBase & intAge & "_" & srtNo) = _
Workbooks(strFileName).Worksheets(strBase).Range(strBase & intAge)
Next intAge

投稿日時 - 2003-03-29 19:13:33

お礼

ありがとうございます。
でも、「1004 アプリケーション定義またはオブジェクト定義のエラーです」というメッセージが出ました。(私が適当に設定した時のエラーと同じです)
また、もし、このエラーが出なかったとしても、この方法では、そのままコピーされてしまうのではないのでしょうか?
実は、コピー元は計算式が入っていて、その結果だけをコピーするため、「値のコピー」を行っています。
私も、あまりよくわかっていないので、間違っているかもしれませんが。
とにかく、お答えいただいたことには感謝しています。

投稿日時 - 2003-03-29 19:54:59

あなたにオススメの質問