Excel VBA質問箱 IV

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

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


6022 / 13646 ツリー ←次へ | 前へ→

【47609】配列変数のPublic宣言 hiyo 07/3/16(金) 0:06 質問[未読]
【47610】Re:配列変数のPublic宣言 ウッシ 07/3/16(金) 0:46 発言[未読]
【47624】Re:配列変数のPublic宣言 hiyo 07/3/16(金) 19:10 質問[未読]
【47626】Re:配列変数のPublic宣言 ウッシ 07/3/16(金) 20:07 発言[未読]
【47630】Re:配列変数のPublic宣言 hiyo 07/3/16(金) 21:12 質問[未読]
【47631】Re:配列変数のPublic宣言 りん 07/3/16(金) 21:25 発言[未読]
【47632】Re:配列変数のPublic宣言 ウッシ 07/3/16(金) 21:30 発言[未読]
【47633】Re:配列変数のPublic宣言 hiyo 07/3/16(金) 21:49 お礼[未読]
【47634】Re:配列変数のPublic宣言 ウッシ 07/3/16(金) 22:09 発言[未読]
【47635】Re:配列変数のPublic宣言 hiyo 07/3/16(金) 23:04 お礼[未読]

【47609】配列変数のPublic宣言
質問  hiyo  - 07/3/16(金) 0:06 -

引用なし
パスワード
   配列でPublicの宣言は出来ないのでしょうか。
同じモジュール内のプロシージャ外でのDim宣言でもだめでした。

【47610】Re:配列変数のPublic宣言
発言  ウッシ  - 07/3/16(金) 0:46 -

引用なし
パスワード
   こんばんは

意味が良く分からないんです。

>配列でPublicの宣言は出来ないのでしょうか。
>同じモジュール内のプロシージャ外でのDim宣言でもだめでした。
「Dim宣言」?
「Public宣言」ではないのですか?

Public v()
Sub test()
  ReDim v(1 To 2, 1 To 2)
  v(1, 1) = "A1"
  v(1, 2) = "B1"
  v(2, 1) = "A2"
  v(2, 2) = "B2"
  Call test1
End Sub
Sub test1()
  Range("A1:B2").Value = v
End Sub

意味違ってますか?

列挙型Enumの事かな?

【47624】Re:配列変数のPublic宣言
質問  hiyo  - 07/3/16(金) 19:10 -

引用なし
パスワード
   回答ありがとうございます。ですがまだ解決しておりません。


..................................................
Sub uno()
Dim din()
din() = Range(Cells(1, 1), Cells(10000, 100))
End Sub
.................................................

上だと問題は起こりませんが、下だとエラーになってしまいます。
なぜでしょうか。

..................................................
Public din()
Sub uno()
din() = Range(Cells(1, 1), Cells(10000, 100))
End Sub
..................................................

【47626】Re:配列変数のPublic宣言
発言  ウッシ  - 07/3/16(金) 20:07 -

引用なし
パスワード
   こんばんは

分からないです。

Public din
Sub uno()
  din = Range(Cells(1, 1), Cells(10000, 100))
End Sub

としてもダメですか?

【47630】Re:配列変数のPublic宣言
質問  hiyo  - 07/3/16(金) 21:12 -

引用なし
パスワード
   ▼ウッシ さん:
>こんばんは
>
>分からないです。
>
>Public din
>Sub uno()
>  din = Range(Cells(1, 1), Cells(10000, 100))
>End Sub
>
>としてもダメですか?
エラーで型が一致しませんとでてきます。


RiDimを入れてやるとエラーにはなりませんが。
この配列を別のプロシージャで呼び出すと配列の中の値が消えています。
また、別のプロシージャで呼び出すときもRiDimが必要です。
別プロシージャでRiDimで要素数を設定するとき、値が消えないように
RiDimの後にPreserveを加えたらエラーになります。
コードは下記になります。
Public din()

Sub A()
ReDim din(1000, 100)
din = Range(Cells(1, 1), Cells(10000, 100))
MsgBox din(1, 3)
End Sub

Sub B()
Call A
ReDim Preserve din(1000, 100)
MsgBox din(1, 3)
End Sub

【47631】Re:配列変数のPublic宣言
発言  りん E-MAIL  - 07/3/16(金) 21:25 -

引用なし
パスワード
   hiyo さん、こんばんわ

>エラーで型が一致しませんとでてきます。

標準モジュールに全部記述
'ここから==================================
Dim din
Sub A()
  ReDim din(1000, 100)
  din = Range(Cells(1, 1), Cells(10000, 100))
End Sub

Sub B()
  Call A
  MsgBox din(1, 3)
End Sub
'ここまで==================================
Bを実行すると表示されました(WinXP & XL2003)

【47632】Re:配列変数のPublic宣言
発言  ウッシ  - 07/3/16(金) 21:30 -

引用なし
パスワード
   こんばんは

キーワード Preserve を指定した場合、変更できるのは、動的配列の最後の次元の
上限インデックス番号に限られます。

セルのデータを配列にするだけなら、Variant変数にValueを入れるだけです。

Public din
Sub A()
  din = Range(Cells(1, 1), Cells(10000, 100)).Value
  MsgBox din(1, 3)
End Sub
Sub B()
  MsgBox din(1, 3)
End Sub

このようにしてAを実行してから、Bを実行すればdin(1, 3)の内容が表示されるはず
ですけど?

【47633】Re:配列変数のPublic宣言
お礼  hiyo  - 07/3/16(金) 21:49 -

引用なし
パスワード
   ▼ウッシ さん:
>こんばんは
>
>キーワード Preserve を指定した場合、変更できるのは、動的配列の最後の次元の
>上限インデックス番号に限られます。
>
>セルのデータを配列にするだけなら、Variant変数にValueを入れるだけです。
>
>Public din
>Sub A()
>  din = Range(Cells(1, 1), Cells(10000, 100)).Value
>  MsgBox din(1, 3)
>End Sub
>Sub B()
>  MsgBox din(1, 3)
>End Sub
>
>このようにしてAを実行してから、Bを実行すればdin(1, 3)の内容が表示されるはず
>ですけど?

ウッシさん、りんさん、ありがとうございます。どうゆうわけか、まだよくわかっていないんですが、出来るようになりました。
Public din としてプロシージャ内でセル範囲を格納していますが、こうすると
自動で配列にされるのでしょうか?
また、私の使っている本には動的配列の要素数がわかった時点でReDimを入れる
と書いてあるんですが、これは必要無いものなのでしょうか?

【47634】Re:配列変数のPublic宣言
発言  ウッシ  - 07/3/16(金) 22:09 -

引用なし
パスワード
   こんばんは

セルのデータを配列にするだけなら、Variant変数にValueを入れるだけで自動で配列
にされます。

Public din
Sub A()
  With Worksheets("Sheet1")
    din = .Range("A1:C10").Value
  End With
End Sub
Sub B()
  With Worksheets("Sheet2").Range("A1").Resize(UBound(din, 1), UBound(din, 2))
    .ClearContents
    .Value = din
  End With
End Sub

と取得した配列を一気にシート上に戻す事も出来ますので、便利です。
配列変数のPublic宣言とは関係ないですけど・・・。

プロシージャ間でなら引数として渡す事も出来ますし。

【47635】Re:配列変数のPublic宣言
お礼  hiyo  - 07/3/16(金) 23:04 -

引用なし
パスワード
   ありがとうございました。

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