プロが教えるわが家の防犯対策術!

ユーザーフォームの使い方で、テキストボックスやコンボボックスのControlSourceを,フォームを開いたのとは別のシートのセルにあてたいんですけど、できますか?
同様に、コンボボックスのRowSourceのリストも、別のシートの値を拾いたいんです。
具体的に言えば、ユーザーフォームを開くのは、常に「Sheet1」であって、入力した内容を表示するのは「Sheet2」なのです。
コンボボックスのリストは本当は、「Sheet3」の値を拾いたいのです。
今はよくわからないので、全部「Sheet1」にリンク(?)させて、値を取得させるようにしてます。
それと、セルの数式の中に別のセルの数値を代入できますか?
例えば、あるセルの数式が「=Sheet2!A4」だとしましょう。
この場合の「Sheet2」の「2」に、例えば、ある別のセルの値を代入して、
「=Sheet3!A4」とかにしたいのです。
つまり「=Sheet”A1”!A4」みたいにして、「A1」のセルの値が
「2」、「3」に変われば元の数式も変わる、みたいに。
同じように、セルの範囲につけた名前や、リンクするファイルの名前も数式の変数に入れられるのでしょうか?
とりあえず、セルの数式の中に、別のセルの値を”文字”や”数値”として入れたいのです。
ちょっと説明がわかりにくいかもしれないけど、教えて下さい。

A 回答 (3件)

●平成13年9月 加工実績表.xlsが開いていれば、A1に半角数値9があるとして、


=INDIRECT("'C:\My Documents\工場用\月間加工実績表\[平成13年"& JIS(A1) &"月 加工実績表.xls]入力用'!$B$129")
で可能です。

●参照するBookが開いていなければ上の式は値を返しません。
マクロ(ユーザー定義関数)もダメでしょう。(マクロで開けば別ですが)
悪あがきとしては、今、セルの算式が『[平成13年8月 加工実績表.xls]』となっていれば、[平成13年8月 加工実績表.xls]をコピーして置き換えのテキストボックスに貼り付けて、

  [平成13年8月 加工実績表.xls]
     ↓
  [平成13年9月 加工実績表.xls]

の置き換えを行えば値は変わります。


>欲張って『アクセス』にも手を出そうとしておりますが・・・。
是非やるべきです。この質問のような悩みはうそのようになくなるかもしれません。
前段はご勘弁を。SEさんには働いてもらっています。専門のHPには信じられないような方(ホントの専門家?尊敬できそう)がたくさんいらっしゃいますヨ。では。
    • good
    • 0
この回答へのお礼

ありがとうございました。
なるほど~。すごいですね。
また別の質問を欠きこみますので、お時間が有ったらよろしくお願いします。

お礼日時:2001/10/19 16:30

後半部分についての別方法を思いつきました。



>それと、セルの数式の中に別のセルの数値を代入できますか?
A1にシート番号を入力するとして、=INDIRECT("Sheet"&A1&"!A4") で指定したシートのA4の値を表示します。

>同じように、セルの範囲につけた名前
単一セルにDATA1、DATA2、DATA3・・・と名前が付いていれば、
A1に範囲名の番号を入力するとして、=INDIRECT("DATA"&A1) で指定した範囲名のセル値を表示します。

複数セル範囲(A1からZ100とか)にTBL1、TBL2、TBL3・・・と範囲名がついていれば、
 =INDEX(INDIRECT("TBL"&A1),1,1)
のように使えば、Index関数の参照する範囲を切り替えられます。

>リンクするファイルの名前
内容がよく分からないため何ともいえませんが、ファイルの名前なら文字列の連結で定義できます・・・
="myFileName"&A1&".txt" のような感じです。リンク先は困難かもしれません。

ご参考に。
    • good
    • 0
この回答へのお礼

御礼が遅くなってゴメンナサイ。
ユーザーフォームの件と、セルの数式にセルの値を代入する件、できました。
ありがとうございます!!!
ずうずうしいようですが、もうひとつ。
リンクするファイル名の件ですが、内容を説明しますと、
あるセルの数式が次のような内容だったとします。
='C:\My Documents\工場用\月間加工実績表\[平成13年9月 加工実績表.xls]入力用'!$B$129
この場合の『9月』の『9』部分に、指定したセルの数字を代入したいのです。
『加工実績表』は『月ごと』にブックを作っているので、どうしてもこのような形になってしまいます。
よろしくお願いします。
余談ですが、nishi6さんはナゼそんなにエクセルに詳しいのですか?
SEのようなお仕事をされてるのですか?
ワタクシはエクセルを始めて、約10ヶ月で、最近進歩が止まってしまったような気がします。欲張って『アクセス』にも手を出そうとしておりますが・・・。

お礼日時:2001/10/16 19:53

テキストボックスのControlSourceがSheet2のA1なら


 Sheet2!A1をセット。 
または、Sheet2のA1に範囲名を付けて、それをセット。

コンボボックスのRowSourceがSheet3のA1~A10なら
 Sheet3!A1:A10をセット。 
または、Sheet3のA1:A10に範囲名を付けて、それをセット。

A1の値によって、A2の式が切り替わるようにするには、一案ですが、
 =CHOOSE(A1,Sheet1!A4,Sheet2!A4,Sheet3!A4)
のようにすれば値は求められます。回答になっていないかもしれませんね。
または、ユーザー定義関数
 Public Function SheetAndRange(Sht As Integer, rg As Range)
   SheetAndRange = Worksheets(Sht).Range(rg.Address)
 End Function
を標準モジュールに貼り付け、
 =SheetAndRange(A1,A4) とすれば値は求められます。

範囲名ですが、これもユーザー定義関数を作れば切替えられます。
例として、Sheet1のA1:C1に範囲名『Total1』、Sheet1のA2:C2を範囲名『Total2』とします。
 Public Function TotalChange(num As Integer)
   TotalChange = Application.Sum(Range("Total" & num))
 End Function
を標準モジュールに貼り付け、
 =TotalChange(1) とすればA1:C1の計、=TotalChange(2) とすればA2:C2の計になります。

ご参考に。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!