• 締切済み

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 としたらエラーが発生してダメでした。 わかる方いらっしゃいましたら、よろしくお願いいたします。 (これで十分動いているのですが、もう少し、簡潔な文にしたいのです)

みんなの回答

  • ebis
  • ベストアンサー率27% (17/61)
回答No.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 これではダメでしょうか

tiga-
質問者

お礼

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

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.4

簡略し過すぎたでしょうか・・・・ Windows(strFileName).Sheets(strBase).Range(strBase & intAge) = Workbooks(strMasterName).Sheets(strBase).Range(strBase & intAge & "_" & strNo).Text という意味だったのですが。。。

tiga-
質問者

お礼

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

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.3

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

tiga-
質問者

お礼

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

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.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

tiga-
質問者

お礼

ありがとうございます。 ただ、「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さんのような方法ができたらもっと簡潔なのですが)

  • ebis
  • ベストアンサー率27% (17/61)
回答No.1

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

tiga-
質問者

お礼

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

関連するQ&A