- ベストアンサー
セルの式をマクロの変数に取り込みたい
マクロ初心者です セルD5に ='5月(192)'!D18 セルD6に ='5月(192)'!D20のような式が 入っていますこの式をマクロの変数取り込み 5月の部分を 任意の月に書き換えたいのですが良きアドバイスを お願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#1のka_na_deです。 マクロでの回答をしましたが、 もしかして、関数ではうまく参照できないので しかたなくマクロを検討しているのではないですか? そうだとすると、 A1セルに 5 と入力されていて D5セルに =INDIRECT("'" & A1 & "月(192)'!D18") と入力すれば月を変数にすることが可能です。 もちろん、5でなく5月と入力する場合は =INDIRECT("'" & A1 & "(192)'!D18") に変更してください。 参考までに追加しておきます。
その他の回答 (4)
- ka_na_de
- ベストアンサー率56% (162/286)
たびたび補足です。 #4の回答は A1が 5月 と入力されている場合の例です。
- ka_na_de
- ベストアンサー率56% (162/286)
#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)
例 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)
おはようございます。 一案です。 標準モジュールに登録して、値を代入したいシートを 選択してから実行してみてください。 質問では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
お礼
今日は 丁寧な回答有難うございます、ka_na_de様の を参考にさせていただき問題が解決致しました 不勉強な為マクロを使わなくても関数が組める 事がわかり有難うございました。