Excel VBA質問箱 IV

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

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


2433 / 13645 ツリー ←次へ | 前へ→

【68049】変数を別シートでも使いたい すいか 11/1/27(木) 14:39 質問[未読]
【68050】Re:変数を別シートでも使いたい neptune 11/1/27(木) 15:22 発言[未読]
【68059】Re:変数を別シートでも使いたい すいか 11/1/28(金) 10:11 質問[未読]
【68062】Re:変数を別シートでも使いたい UO3 11/1/28(金) 11:01 発言[未読]
【68063】Re:変数を別シートでも使いたい めいぶる 11/1/28(金) 11:15 発言[未読]
【68068】Re:変数を別シートでも使いたい UO3 11/1/28(金) 12:42 発言[未読]
【68066】Re:変数を別シートでも使いたい neptune 11/1/28(金) 12:10 回答[未読]
【68067】Re:変数を別シートでも使いたい ichinose@食事中 11/1/28(金) 12:37 発言[未読]
【68069】Re:変数を別シートでも使いたい すいか 11/1/28(金) 14:21 お礼[未読]
【68070】Re:変数を別シートでも使いたい neptune 11/1/28(金) 16:49 発言[未読]

【68049】変数を別シートでも使いたい
質問  すいか  - 11/1/27(木) 14:39 -

引用なし
パスワード
   超基本的質問ですみません。
なぜかうまくいかないので、お力を貸して下さい。

エクセル中に複数シートがあって、
あるシートで値設定したその値を
別のシートでも参照したいです。

そういう変数は、どこで、なんと言って
宣言すればよいのでしょうか?

宜しくお願い致します。

【68050】Re:変数を別シートでも使いたい
発言  neptune  - 11/1/27(木) 15:22 -

引用なし
パスワード
   ▼すいか さん:
>超基本的質問ですみません。
「VBA 変数の宣言」でググると最初に
変数の宣言と初期化、有効(適用)範囲
ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html
がヒットしました。

変数の事だけなら、↑を読むと基本的なことは解決します。

【68059】Re:変数を別シートでも使いたい
質問  すいか  - 11/1/28(金) 10:11 -

引用なし
パスワード
   ▼neptune さん:
>ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html
を読んでみました。
自分では言われた通りにやってるつもりなんですが。。。
うまくいきません。
たぶん、わかる方にはあり得ないミスなんでしょうが、
わかりません。。。

宜しくお願い致します。

【シート1.のコード】

Option Explicit
Public J As String

Private Sub CommandButton1_Click()
  J = "aaa"
  Sheets("シート2.").Select
End Sub


【シート2.のコード】

Option Explicit
Public Jochu As String

Private Sub CommandButton1_Click()
  If J = "aaa" Then
    Sheets("シート3.").Select
  Else
    Sheets("シート4.").Select
  End If
End Sub

【68062】Re:変数を別シートでも使いたい
発言  UO3  - 11/1/28(金) 11:01 -

引用なし
パスワード
   ▼すいか さん:

よこから失礼します。

検索ワードを VBA シートモジュールのPublic変数 あたりにして
ググると、参考情報がたくさん出てくると思います。
標準モジュール【以外】でPublic宣言された変数を他で使う場合は
変数名の前にシート修飾が必要です。

カプセル化という観点ではシートモジュールでのPublic宣言も意味がありますが
複数のシートモジュール等で共通に使う変数は標準モジュールでPublic宣言する
ことも検討されてはいかがでしょうか。

【68063】Re:変数を別シートでも使いたい
発言  めいぶる  - 11/1/28(金) 11:15 -

引用なし
パスワード
   ▼すいか さん:
>▼neptune さん:
>>ht tp://www.asahi-net.or.jp/~ef2o-inue/vba_k/sub04_050_04.html
>を読んでみました。
>自分では言われた通りにやってるつもりなんですが。。。
>うまくいきません。
>たぶん、わかる方にはあり得ないミスなんでしょうが、
>わかりません。。。
>
>宜しくお願い致します。

ht tp://home.att.ne.jp/zeta/gen/excel/c04p10.htm
こちらの方がわかりやすいかな?

【68066】Re:変数を別シートでも使いたい
回答  neptune  - 11/1/28(金) 12:10 -

引用なし
パスワード
   ▼すいか さん:
最初から今回書かれている再現するサンプルソースを書けば話が早かったのに。。。

シートモジュールで使った事ないのでわかりませんでした。
恐らくExcelの仕様でしょう。

ちなみに、VBAの本家の開発言語VB6は同じエンジンを使っているのですが、
vb6ではpubulic宣言は標準モジュールとクラスモジュールのみでしか
使用できなかったです。

昔のXLはシートモジュールでも使えたような気がするんですが???
仕様変更になったか、昔から使えなかったかですね。

なので、対応としてはUO3さんご指導の通り、標準モジュールでの宣言に変更
することになると思います。

問題としてはpublic変数を方々で宣言すると訳が分からなくなりますし、
今どの変数がどういうデータが入っているかも訳が分からなくなる。
半年もすると自分が作っていてもなんだこの変数???ってことになる事
請け合いです。

良い方向としては出来る限りpublic変数を使わないで考え直す事です。
都度取得するとか、計算するとか、引数を使うとか、classに保持しておくとか・・・etc
です。

【68067】Re:変数を別シートでも使いたい
発言  ichinose@食事中  - 11/1/28(金) 12:37 -

引用なし
パスワード
   こんにちは。
>
>宜しくお願い致します。
>
>【シート1.のコード】
>
>Option Explicit
>Public J As String
>
>Private Sub CommandButton1_Click()
>  J = "aaa"
>  Sheets("シート2.").Select
>End Sub
>
>
>【シート2.のコード】
>
>Option Explicit
>Public Jochu As String
>
>Private Sub CommandButton1_Click()
  If Sheets("シート1.").J = "aaa" Then
>    Sheets("シート3.").Select
>  Else
>    Sheets("シート4.").Select
>  End If
>End Sub

これでは?

【68068】Re:変数を別シートでも使いたい
発言  UO3  - 11/1/28(金) 12:42 -

引用なし
パスワード
   めいぷるさんからご紹介の

ht tp://home.att.ne.jp/zeta/gen/excel/c04p10.htm

ここの、シートモジュールのPublic変数の説明では

>宣言したシート・ブックモジュール内でのみ有効、
>同一モジュールの他プロシージャからは参照できるが、
>別モジュールからの参照はできない
>プロシージャ終了後も値を保持 

と記載されていますが、たとえば新規ブックのSheet1、Sheet2のシートモジュールに
【SHeet1のシートモジュール】
Option Explicit

Public sh1の変数 As String

Private Sub Worksheet_Change(ByVal Target As Range)
  sh1の変数 = Target.Value
End Sub
【Sheet2のシートモジュール】
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  Cancel = True
  MsgBox Worksheets("Sheet1").sh1の変数
End Sub

こうしておいて、Sheet1で、任意のセルに値を入れた後、Sheet2の任意のセルを
ダブルクリックすると、Sheet2でSheet1のPublic変数を参照することはできます。

【68069】Re:変数を別シートでも使いたい
お礼  すいか  - 11/1/28(金) 14:21 -

引用なし
パスワード
   ▼皆々さま

いろんなとこに書けるんですね!
シートの中しか書いたことなくて、びっくりです。
おかげさまで解決しました。
ありがとうございました。<m(__)m>

【68070】Re:変数を別シートでも使いたい
発言  neptune  - 11/1/28(金) 16:49 -

引用なし
パスワード
   ▼ALL

>  If Sheets("シート1.").J = "aaa" Then
こんな方法がありましたね。最近頭が固いなぁ。。

でも、こうなるとシートのメンバなので外部に公開はしてますけど、
既にいわゆる広域変数ではなくなりますね。

という事は知っておいた方が良いですよ。→質問者さん

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