OKWave質問2回目です。
Excel VBAを最近始めたばかりのカケダシからの質問で申し訳ないのですが、
質問させていただきます。(アホみたいな質問かもしれませんがすみません。)
Excel2000を使っております。
理由があって下のVBAのコードをSheet1に書いています。
数値データがSheet2のA3からE50まで入っています。
Sheet1に書いたコードは
WorksheetFunction.Max(Worksheets("Sheet2").Range("A3:A50"))
は問題なく出来るのに
WorksheetFunction.Max(Worksheets("Sheet2").Range(Cells(3, 1), Cells(50,1)))
はSheet1からはエラーで実行できません・・・
Sheet1からシートをまたいでSheet2のデータをWorksheetFunction.とCells使って
どうこうすることは出来ないのでしょうか?
良くないやり方かもしれませんがCells使う理由は、列をずらしてループで回して最大値を
A~Eまで取得していこうかと考えているのでわざわざCells使ってます・・・
Sheet2にコードを移してコードのWorksheets("Sheet2").を削ればとりあえずエラーは回避
できるという話なんでしょうけれども・・・仕様だと言われてしまえばそれまでですが^^;
訳があってSheet1からやりたいので・・・。
すみませんが、(1)上記の方法は何故駄目なのか?、(2)SheetまたいでMaxを簡単に次々取得
する方法、などありましたら宜しくお願いいたします。
No.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
mu2011様、丁寧な説明有難う御座います。質問(1)に関してANo.1~3で教えていただき、単に私の知識不足だったみたいで申し訳ないです。面倒くさい質問(2)までこたえていただけたのはmu2011様だけだったので、非常に感謝しております!結局質問(2)の方は自己解決してしまいまして、mu2011様の配列を使う方法の方がかなりシンプルでスリムなので、参考にさせていただきます!有難う御座いました!
No.3
- 回答日時:
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様の説明が、説明文としては一番わかりやすかったので、他の方々の文章を読んだ後でさらに納得できました。有難う御座いました!
No.2
- 回答日時:
私も同じ書き方をして、同じ指摘をされた事があります。
こんな書き方でいいかと。
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様の説明もわかりやすくて本当に有難う御座いました。
No.1
- 回答日時:
「CellsがSheet1を基準に考えてしまっているから」です。
つまり、
MsgBox (WorksheetFunction.Max(Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(1, 1), Worksheets("Sheet2").Cells(3, 1))))
とかなら、大丈夫です。
有難うございます。出来るんですね!というか、ただ単にCellsの前にもWorksheet指定しなければ駄目なんですね。Rangeの前にしておけばOKだと思っていました・・・勉強不足ですみませんでした。どうりでsheet1のセルに入ってるものが出てきたのでおかしいとは思っていましたが。なるべく1行で行ける書き方を探していたので凄く助かりました!有難う御座いました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JavaScriptの定数名が取り消し...
-
フィルターかけた後、重複を除...
-
ASCIIコードを文字に変換したい
-
JANコードとPOSコードは同じ?
-
IF文、条件分岐の整理方法
-
欠番の抽出について
-
COBOLの文法
-
VBAの覚え方・勉強の仕方
-
vb6.0の実行時エラー'3075'につ...
-
UWSCでMOUSEORG関数が上手く処...
-
文字コード変換(Unicode To KS...
-
Office Webコンポーネントでの...
-
pythonでの spiking neural net...
-
アクセスで教えて下さい。 下記...
-
PictureBox内の画像をマウスド...
-
ruby バイナリ入出力について
-
ホワイトノイズの生成コードに...
-
access2003 クエリSQL文に...
-
外部参照してるキーを主キーに...
-
エクセルで最後の文字だけ置き...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フィルターかけた後、重複を除...
-
JANコードとPOSコードは同じ?
-
1日に1人がこなせるプログラム...
-
Nullの使い方が不正です。
-
access2003 クエリSQL文に...
-
JavaScriptの定数名が取り消し...
-
COBOLの文法
-
ACCESSユニオンクエリでORDER B...
-
VBAでファイルオープン後にコー...
-
ペンダントライトのコードの色...
-
Exel VBA 別ブックから該当デ...
-
変数名「cur」について
-
特定行の背景色を変えたいのですが
-
PreviewKeyDownイベントが2回...
-
access2021 VBA メソッドまたは...
-
Accessでの抽出で完全一致。
-
VBA リストボックス(複数条件...
-
オートフィルタで抽出結果に 罫...
-
access でエラーを回避するには?
-
1、Rstudioで回帰直線を求める...
おすすめ情報