Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4011 / 13644 ツリー ←次へ | 前へ→

【58872】変数を使用したワークシート関数の使い方 まさと 08/11/15(土) 11:05 質問[未読]
【58873】Re:変数を使用したワークシート関数の使い方 マクロマン 08/11/15(土) 11:18 発言[未読]
【58875】Re:変数を使用したワークシート関数の使い方 まさと 08/11/15(土) 13:57 質問[未読]
【58878】Re:変数を使用したワークシート関数の使い方 マクロマン 08/11/15(土) 19:37 発言[未読]
【58879】Re:変数を使用したワークシート関数の使い方 neptune 08/11/15(土) 20:41 発言[未読]
【58885】Re:変数を使用したワークシート関数の使い方 まさと 08/11/16(日) 13:09 お礼[未読]
【58874】Re:変数を使用したワークシート関数の使い方 マクロマン 08/11/15(土) 11:20 発言[未読]

【58872】変数を使用したワークシート関数の使い方
質問  まさと  - 08/11/15(土) 11:05 -

引用なし
パスワード
   お世話になります。
プログラムの抜粋で申し訳ないのですが、以下のコードのDEBUG.PRINT AMD6の箇所まで、動作いたしません。エラーは出ませんがAMD6が1になりません。私の考えでは”※”の部分の書き方がミスしているせいで悪さをしていると思うのですが、一読して、原因に気づかれる方がいましたらどうかアドバイスお願いします。
mymaxrow2 = Worksheets("作").Range("A65536").End(xlUp).row

vntData3 = Sheets("作").Range(Cells(1, 4), Cells(mymaxrow2, 4)).Value

AMD4 = 1
Debug.Print "AMD4=" & 1

mymaxrow2 = Worksheets("D2").Range("A65536").End(xlUp).row

AMD5 = 1
Debug.Print "AMD5=" & 1

Sheets("D2").Cells(mymaxrow2 + 1, 200) = WorksheetFunction.max(vntData3.Range(Cells(1 + 26, 1), Cells(9 + 26, 1)))←※

AMD6 = 1
Debug.Print "AMD6=" & 1

【58873】Re:変数を使用したワークシート関数の使...
発言  マクロマン  - 08/11/15(土) 11:18 -

引用なし
パスワード
   ぱっと見ですが。

>vntData3 = Sheets("作").Range(Cells(1, 4), Cells(mymaxrow2, 4)).Value
↓のようにしないとまずいと思うのですが。Range()の中でシートが明示されてないので
アクティブシートの値が取得されている可能性があります。

vntData3 = Sheets("作").Range(Sheets("作").Cells(1, 4), Sheets("作").Cells(mymaxrow2, 4)).Value

他にも同じような箇所があります。

【58874】Re:変数を使用したワークシート関数の使...
発言  マクロマン  - 08/11/15(土) 11:20 -

引用なし
パスワード
   あと、抜粋するなら、せめて提示部分コードに関係する
変数の宣言箇所も貼り付けないと原因究明を遅らせること
になると思いますよ。

【58875】Re:変数を使用したワークシート関数の使...
質問  まさと  - 08/11/15(土) 13:57 -

引用なし
パスワード
   ご指摘ありがとうございます。
確かに以下の書き方の方が正しいようですが、現状vntData3のデータは正常に読み込まれているようです。

vntData3 = Sheets("作").Range(Sheets("作").Cells(1, 4), Sheets("作").Cells(mymaxrow2, 4)).Value

なんとかこちらでエラー回避できましたが、原因は不明なままです。

Dim vnt(3) range
Set vnt(3) = Sheets("作").Range(Cells(1, 4), Cells(mymaxrow2, 4))
にして、vntdata3 と vnt(3)に置き換えたらうまく動きました。
ちなみにvntdata3 は variant の型です。他の変数もvariantにしてます。
原因はよくわからないままですが、使い方が間違っていそうな気がします。

【58878】Re:変数を使用したワークシート関数の使...
発言  マクロマン  - 08/11/15(土) 19:37 -

引用なし
パスワード
   >Sheets("D2").Cells(mymaxrow2 + 1, 200) = WorksheetFunction.max(vntData3.Range(Cells(1 + 26, 1), Cells(9 + 26, 1)))←※

この中では、
>vntData3
はシートオブジェクトとなっていますが、
それ以前の段階では
>vntData3 = Sheets("作").Range(Sheets("作").Cells(1, 4), Sheets("作").Cells(mymaxrow2, 4)).Value

ですのでシートオブジェクトにはなっていないようです。
Dim ws As worksheet
中略
Set ws = Workshets(vntData3)

のようにしないといけないと思うのですが。

【58879】Re:変数を使用したワークシート関数の使...
発言  neptune  - 08/11/15(土) 20:41 -

引用なし
パスワード
   ▼まさと さん:
こんにちは

横から失礼。

>vntData3 = Sheets("作").Range(Sheets("作").Cells(1, 4), Sheets("作").Cells(mymaxrow2, 4)).Value
>
>なんとかこちらでエラー回避できましたが、原因は不明なままです。
>
>Dim vnt(3) range
>Set vnt(3) = Sheets("作").Range(Cells(1, 4), Cells(mymaxrow2, 4))

>使い方が間違っていそうな気がします。
ですが、変数の使い方云々でなく、上記のステートメントで何を行って
いるかの理解、オブジェクト変数の扱い、等の基礎をすっ飛ばして
いるのが原因と思いますよ。
ht tp://www6.plala.or.jp/MilkHouse/menu.html
ht tp://www6.plala.or.jp/MilkHouse/begin/contents204/contents20403.html
等の基本部分を読む事をお勧めします。

【58885】Re:変数を使用したワークシート関数の使...
お礼  まさと  - 08/11/16(日) 13:09 -

引用なし
パスワード
   neptuneさん、マクロマンさんご指摘ありがとうございます。

宣言部分をちょっと甘く見ていました・・。お陰様で、なんとか原因はわかりました。参考リンク先などで、もう少し勉強してみたと思います。

貴重な時間を割いていただきありがとうございました。

4011 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free