- ベストアンサー
なぜ出来ないのか?
- Excel VBAでSheet1からSheet2のデータを参照する方法について質問です。
- WorksheetFunction.Max(Worksheets("Sheet2").Range("A3:A50"))は問題なく実行できますが、WorksheetFunction.Max(Worksheets("Sheet2").Range(Cells(3, 1), Cells(50,1)))はエラーになります。
- Sheet1からSheet2のデータを参照する方法について教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>(1)上記の方法は何故駄目なのか? ⇒Range内のCellsがSheet1配下になっているからです。Rangeと同様にSheet2配下に すれば解決です。 セル範囲ならば他の方法もある(例えば、Resize等)が如何でしょうか。 >(2)SheetまたいでMaxを簡単に次々取得する方法 ⇒一例です。 Dim wk(1 To 5) For i = 1 To 5 wk(i) = WorksheetFunction.Max(Sheets("Sheet2").Cells(3, i).Resize(48)) Next
その他の回答 (3)
- D-Matsu
- ベストアンサー率45% (1080/2394)
Sheet1のVBAコードにWorksheetオブジェクトを省略して書いたRange(Cells)は「Sheet1の」範囲になります。 つまり、 > WorksheetFunction.Max(Worksheets("Sheet2").Range(Cells(3, 1), Cells(50,1))) このCellsはSheet1のセル範囲を見ている訳ですが、そうすると「Sheet2の中のSheet1のセル範囲」という矛盾した表記であるという事になる訳です。 コード例については既に回答があるので省略します。
お礼
D-Matsu様、詳しい説明有難う御座いました。噛んで含むように良くわかりました!結果的には単純な自分のミスで、ひとえに私の勉強不足でしたね^^;すみません。どうりでSheetの方のデータが出てくるなぁとはおもっていたのですが。 1行で書けるANo.1を参考にさせていただきましたが、D-Matsu様の説明が、説明文としては一番わかりやすかったので、他の方々の文章を読んだ後でさらに納得できました。有難う御座いました!
私も同じ書き方をして、同じ指摘をされた事があります。 こんな書き方でいいかと。 With ThisWorkbook.Worksheets("Sheet2") MsgBox Application.WorksheetFunction.Max(.Range(.Cells(3, 1), .Cells(50, 1))) End With Cellsプロパティも、Rangeと同じように扱ってやらないと。 何処にくっついてるプロパティか書かないと駄目なんです。 乱暴に省略しても動くんですけど、省略しない方がいいです。
お礼
有難う御座います!乱暴に(はしょって)書いても今まで動いてしまっていたんですね^^;はしょってたというより実はRangeの前辺りに書いておけばRange以下まで有効だと思っていたので・・・省略というより知らずに思い込みでrangeでいくのだからRangeの中身に宣言付けずにcells書いてもいくだろうという感じで^^; 良くわかりました!勉強不足で申し訳なかったです。結果的にたいしたことではなかったかもしれませんが、逆に凄く勉強になしました!小さな抜けが大きなミスにつながったみたいで、 基礎をおろそかにしてはいけないなぁ・・・と思っています! 1行で書けるANo.1を参考にさせて頂きましたが、mapphi様の説明もわかりやすくて本当に有難う御座いました。
- himajin100000
- ベストアンサー率54% (1660/3060)
「CellsがSheet1を基準に考えてしまっているから」です。 つまり、 MsgBox (WorksheetFunction.Max(Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(1, 1), Worksheets("Sheet2").Cells(3, 1)))) とかなら、大丈夫です。
お礼
有難うございます。出来るんですね!というか、ただ単にCellsの前にもWorksheet指定しなければ駄目なんですね。Rangeの前にしておけばOKだと思っていました・・・勉強不足ですみませんでした。どうりでsheet1のセルに入ってるものが出てきたのでおかしいとは思っていましたが。なるべく1行で行ける書き方を探していたので凄く助かりました!有難う御座いました!!
お礼
mu2011様、丁寧な説明有難う御座います。質問(1)に関してANo.1~3で教えていただき、単に私の知識不足だったみたいで申し訳ないです。面倒くさい質問(2)までこたえていただけたのはmu2011様だけだったので、非常に感謝しております!結局質問(2)の方は自己解決してしまいまして、mu2011様の配列を使う方法の方がかなりシンプルでスリムなので、参考にさせていただきます!有難う御座いました!