• ベストアンサー

セルの式をマクロの変数に取り込みたい

マクロ初心者です セルD5に ='5月(192)'!D18 セルD6に ='5月(192)'!D20のような式が 入っていますこの式をマクロの変数取り込み 5月の部分を 任意の月に書き換えたいのですが良きアドバイスを お願いします。

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

  • ベストアンサー
  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.3

#1のka_na_deです。 マクロでの回答をしましたが、 もしかして、関数ではうまく参照できないので しかたなくマクロを検討しているのではないですか? そうだとすると、 A1セルに 5 と入力されていて D5セルに =INDIRECT("'" & A1 & "月(192)'!D18") と入力すれば月を変数にすることが可能です。 もちろん、5でなく5月と入力する場合は =INDIRECT("'" & A1 & "(192)'!D18") に変更してください。 参考までに追加しておきます。

yama0192
質問者

お礼

今日は 丁寧な回答有難うございます、ka_na_de様の を参考にさせていただき問題が解決致しました 不勉強な為マクロを使わなくても関数が組める 事がわかり有難うございました。

その他の回答 (4)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.5

たびたび補足です。 #4の回答は A1が 5月 と入力されている場合の例です。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.4

#1のka_na_deです。 前回の回答の補足です。 前回提示した数式ですと、D6セルにコピー&ペーストしても うまくいきません。(セルの相対参照ができません) そこで、改良します。 D5に =INDIRECT("'" & $A$1 & "(192)'!D"&ROW()*2+8) と入力して、以下コピー&ペーストしてください。 なお、今回の数式はシート名に括弧がはいっていたので '(シングルクォーテーション)が入った複雑な形をしていますが 普通のシート名であれば、もっと簡単です。 (例)シート名が5月でA1セルに5月と入力されている場合 =INDIRECT($A$1 & "!D"&ROW()*2+8)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

例 Sub test01() Cells(1, "A").Formula = "=Sheet1!D20" End Sub A1セルに、=sheet1!D20 という式を入れます。 実行結果はD20に300とたまたま入っていたので、A1の価は300 式は数式バー部で =Sheet1!D20 と確認できます。 ーー 質問の例では、内容は値を移す例なので、既出回答のようにもできますが、式をVBAで設定したいという質問の主旨と解釈して上記を記す。 質問の例が中途半端。 関数式の場合はVBAと通常関数と使えるものが同じでないこと、セル範囲の書き方が違うこと、Application.WorksheetFunction.XX となるなどのことがあります。

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.1

おはようございます。 一案です。 標準モジュールに登録して、値を代入したいシートを 選択してから実行してみてください。 質問では5月を変数にするということでしたが、 For文などでループさせるときにシンプルにできるように 5の部分を変数にしました。 Sub test()  Dim M As Integer  M = 5  Range("D5").Value = Worksheets(M & "月(192)").Range("D18").Value  Range("D6").Value = Worksheets(M & "月(192)").Range("D20").Value End Sub また、数値の代入に規則性がある場合はFor文などで繰り返し 処理されると思いますので、例を追加しておきます。 Sub test2()  Dim M As Integer  Dim i As Integer  M = 5  For i = 0 To 1   Range("D5").Offset(i).Value = _    Worksheets(M & "月(192)").Range("D18").Offset(i * 2).Value  Next i End Sub または、次のような方法も可能です。 Sub test3()  Dim M As Integer  Dim i As Integer  M = 5  For i = 5 To 6   Range("D" & i).Value = _    Worksheets(M & "月(192)").Range("D" & 2 * i + 8).Value  Next i End Sub

関連するQ&A