• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルについて質問です。)

Excelのユーザーフォームで別シートのセルにControlSourceを設定する方法とは?

このQ&Aのポイント
  • ExcelのユーザーフォームでテキストボックスやコンボボックスのControlSourceを、フォームを開いたのとは別のシートのセルに設定する方法を教えてください。
  • ユーザーフォームを開くのは常に「Sheet1」で、入力した内容は「Sheet2」に表示したいです。また、コンボボックスのリストは「Sheet3」の値を使用したいですが、現在は全て「Sheet1」にリンクしています。
  • さらに、Excelのセルの数式に別のセルの値を代入することは可能でしょうか?例えば、「Sheet2」のセルA4の値を参照する数式が存在し、「Sheet3」のセルA4の値を参照する数式に変更したいです。同様に、セルの範囲やファイル名も数式の変数として使用できるのでしょうか?ご教示いただけますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.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には信じられないような方(ホントの専門家?尊敬できそう)がたくさんいらっしゃいますヨ。では。

pc-cad
質問者

お礼

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

その他の回答 (2)

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.2

後半部分についての別方法を思いつきました。 >それと、セルの数式の中に別のセルの数値を代入できますか? 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" のような感じです。リンク先は困難かもしれません。 ご参考に。

pc-cad
質問者

お礼

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

  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.1

テキストボックスの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の計になります。 ご参考に。