- 締切済み
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 としたらエラーが発生してダメでした。 わかる方いらっしゃいましたら、よろしくお願いいたします。 (これで十分動いているのですが、もう少し、簡潔な文にしたいのです)
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- ebis
- ベストアンサー率27% (17/61)
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 これではダメでしょうか
- TAGOSAKU7
- ベストアンサー率65% (276/422)
簡略し過すぎたでしょうか・・・・ Windows(strFileName).Sheets(strBase).Range(strBase & intAge) = Workbooks(strMasterName).Sheets(strBase).Range(strBase & intAge & "_" & strNo).Text という意味だったのですが。。。
お礼
ありがとうございます。 しかし、「438 オブジェクトは、このプロパティまたはメソッドをサポートしていません」というメッセージが出ました。 Windowsオブジェクト(プロパティ?)には入力時にでるプロパティ等のリストにSheetsの候補が出てきませんでした。 Windowsに関係ありそうなプロパティにActiveSheetというやつがありました。 2つのWindow上でアクティブなシート同士のコピーができそうです。 いろいろ試してみようと思います。 重ね重ねありがとうございます。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
値のコピーだけをしたいのであれば、 Range("A1") = Range("A2").Text でも可能なのですが、、、
お礼
ありがとうございます。 しかし、試してはいないのですが、上記の方法ですと、同じシート内でないとうまくいかない気がします。 私がやりたいのは、別のファイル(ブック)のデータをコピーするので、少なくとも、ファイル名とかを指定してやらなければならないと思います。 イメージは Hogehoge("ファイルA.xls").Range("A1")=Hogehoge("ファイルB.xls").Range("A2").Text という感じですが、(もちろん、Hogehogeには何かオブジェクトが入るのですが) うまく表現できなくてすみません。
- TAGOSAKU7
- ベストアンサー率65% (276/422)
よくわかっておりませんが、、、間違っていたら失礼。。。 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
お礼
ありがとうございます。 ただ、「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)
自信はないのですが、これではだめでしょうか。 For intAge = 6 To 11 Workbooks(strMasterName).Worksheets(strBase).Range(strBase & intAge & "_" & srtNo) = _ Workbooks(strFileName).Worksheets(strBase).Range(strBase & intAge) Next intAge
お礼
ありがとうございます。 でも、「1004 アプリケーション定義またはオブジェクト定義のエラーです」というメッセージが出ました。(私が適当に設定した時のエラーと同じです) また、もし、このエラーが出なかったとしても、この方法では、そのままコピーされてしまうのではないのでしょうか? 実は、コピー元は計算式が入っていて、その結果だけをコピーするため、「値のコピー」を行っています。 私も、あまりよくわかっていないので、間違っているかもしれませんが。 とにかく、お答えいただいたことには感謝しています。
お礼
ありがとうございます。 「"_"& srtNo 」の部分は、学校番号が入ります。 このVBAはFDで各学校からもらったデータをまとめるものです。 したがって、「"_"& srtNo 」の部分がないとどの学校の場所にコピーするのかわからなくなります。 また、私が作ったVBA(キーボードマクロの編集)でも、うまく動いていたので「"_"& srtNo 」が問題とは思えないのですが。 WorkbooksとWorksheetsをHelpで見たのですが、オブジェクトとプロパティがあり私には理解できませんでした。 ebisさんのを参考にいろいろ試してみようと思います。 ありがとうございます。