セルの値に応じて数式を入力するシートを変えたい

このQ&Aのポイント
  • シート名に応じて数式を入力するマクロを作成したい
  • シート「aaa」のD4セルに入力した値に応じて、上記で設定したシートのF7セルに数式を入力したい
  • シート「aaa」のD4セルに「ccc」と入力して実行すると、シート「ccc」のF7セルに「=SUM(F5:F6)」の数式を入力するマクロを作成したい
回答を見る
  • ベストアンサー

セルの値に応じて数式を入力するシートを変えたい

シート名が 「aaa」 「bbb」 「ccc」 「ddd」 という4つのシートがあります。 シート「aaa」のD4セルに入力した値(シート名)に応じて、 (上記で設定したシート)のF7セルに "=SUM(F5:F6)"という数式を入力したいのですが、 おわかりの方がいらっしゃいましたらご教授いただければ幸いです。 例) シート「aaa」のD4セルに「ccc」と入力して実行すると、 シート「ccc」のF7セルに「=SUM(F5:F6)」の数式を入力するマクロを作成したい。 (シート「aaa」のD4セルに「ddd」と入力して実行すると、 同様に、シート「ddd」のF7セルに数式をマクロで入力したい)

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

  • ベストアンサー
  • SI299792
  • ベストアンサー率48% (713/1473)
回答No.9

入力したい式は =IF(ISBLANK(G47),"",G47*I47) 最初に書いて下さい。 プログラム内に" を書くときは、""にする必要があります。 今回、""なので、""""にします。 4種類用意しました、 実際の数式の違う数式を書くのが嫌なら、Macro3、Macro4の様にして、直接セル上に数式を書くしかありません。 この2つを使う場合、図の様に入力してください。 ' Option Explicit ' Sub Macro1() '  普通にに数式を入れる   Range([AAA!D4] & "!F7") = "=IF(ISBLANK(G47)),"""",G47*I47)" End Sub ' Sub Macro2() '  エラーになった場合、文字列にして強制的に入れる   Const Formula = "=IF(ISBLANK(G47)),"""",G47*I47)" '   On Error Resume Next   Range([AAA!D4] & "!F7") = "'" & Formula   Range([AAA!D4] & "!F7") = Formula   On Error GoTo 0 End Sub ' Sub Macro3() '  D4にシート、E4にアドレス、F4に数式を入れて実行   Range([AAA!D4] & "!" & [E4]) = [AAA!F4].Formula & "" End Sub ' Sub Macro4() '  D4にシート、E4にアドレス、F4に数式を入れて実行 '  エラーになった場合、文字列にして強制的に入れる   On Error Resume Next   Range([AAA!D4] & "!" & [AAA!E4]).Formula = [AAA!F4].Formula   Range([AAA!D4] & "!" & [AAA!E4]).Formula = [AAA!F4].Formula & ""   On Error GoTo 0 End Sub

rabbit78
質問者

お礼

ご回答ありがとうございます。 「""""」にする事で無事入力できました。 質問の伝え方がわかりづらく申し訳ありませんでした。 ご丁寧な対応に感謝致します。

その他の回答 (8)

  • HohoPapa
  • ベストアンサー率65% (454/690)
回答No.8

埋め込む計算式が変化する その計算式をE4セルに予め書き込んでおく という使い方でよければ 以下の関数でいかがでしょうか? Option Explicit Private Sub CommandButton1_Click()  Dim ws As Worksheet, flag As Boolean  Dim wsName As String    wsName = Me.Range("D4").Value    '対象シートがあるかをチェック  For Each ws In Worksheets   If ws.Name = wsName Then flag = True  Next ws  If flag = False Then   MsgBox wsName & "シートがありません"   Exit Sub  End If  '計算式をセット  Sheets(wsName).Range("F7").Formula = Me.Range("E4").Value End Sub

  • SI299792
  • ベストアンサー率48% (713/1473)
回答No.7

補足をいただきました。 基本的には、エラーにならない限り、どのような式でも入力できます。 ただ、エラーを無視するようにしてあるので、 入らない場合、原因が解らないという欠点があります。 On Error Resume Nextを外せば、エラーで止まるので、原因がわかります。 また、以下のマクロは、エラーになった時、文字列にします。 ' Sub Macro1() '   Const Formula = "=SUM(F5:F6))"   Dim Sheet As String '   Sheet = [AAA!D4]   On Error GoTo 100   Sheets(Sheet).[F7] = Formula   On Error GoTo 0   End ' 100 '   Sheets(Sheet).[F7] = "'" & Formula   Resume Next End Sub 態と間違った式が入れてあります。

rabbit78
質問者

補足

ご回答ありがとうございます。 入力したい式は =IF(ISBLANK(G47),"",G47*I47) というものなのですが、 どうやら""が動かない原因のようです。 (""を削除すると入力できるのですが ゼロ値を空白にする必要があるため削除できません) → ゼロ値を表示するセルもあるためゼロ値を表示しない設定にはできない ""を削除せずに入力できるでしょうか?

  • msMike
  • ベストアンサー率20% (363/1775)
回答No.6

各シートのセル F7 に次式を入力してみてください。 =IF(aaa!D4=MID(CELL("filename",A1),FIND("]",CELL("filename",A1))+1,9),SUM(F5:F6),"") 【注意】テストする前に必ず[ファイル名を付けて保存]を実行しておくこと

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.5

>Private Sub Worksheet_Change(ByVal Target As Range) >の場合どのように実行すれば良いかがわからずにおります。 シートモジュールに貼り付ければ シート「aaa」のD4セルに「ccc」と入力するとするだけで シート「ccc」のF7セルに「=SUM(F5:F6)」に記載されます。

  • SI299792
  • ベストアンサー率48% (713/1473)
回答No.4

aaa!D4にシート名が入っていて、そこが指定したシートに数式を入れるのですね。 ' Sub Macro1() '   Dim Sheet As String '   Sheet = [aaa!D4]   On Error Resume Next   Sheets(Sheet).[F7] = "=SUM(F5:F6)"   On Error GoTo 0 End Sub

rabbit78
質問者

補足

ご回答ありがとうございます。 =SUM(F5:F6)という式は入力できたのですが、 この他の式は入力できないものなのでしょうか… 今日の夜にもう少し検証してみたいと思います。

回答No.3

【補足】それぞれにってのは・・・ =(aaa!D1="bbb") * SUM(F5:F6) =(aaa!D1="ccc") * SUM(F5:F6) =(aaa!D1="ddd") * SUM(F5:F6) ってことです。

回答No.2

それぞれに =(aaa!D1="aaa") * SUM(F5:F6) って式を書いておけばいいような気がするが・・・

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

aaaシートのシートモジュールに以下のコードを貼り付けてください。 Private Sub Worksheet_Change(ByVal Target As Range) Dim sn As String With Target If .Address <> "$D$4" Then Exit Sub If .Value = "" Then Exit Sub sn = .Value Select Case sn Case "bbb", "ccc", "ddd" Sheets(sn).Range("F7").Formula = "=SUM(F5:F6)" Case Else MsgBox "該当するシートが有りません" End Select End With End Sub

rabbit78
質問者

補足

ご回答ありがとうございます。 ボタンに登録してクリックして実行したいのですが、 Private Sub Worksheet_Change(ByVal Target As Range) の場合どのように実行すれば良いかがわからずにおります。 併せて教えていただけるとありがたく存じます。

関連するQ&A

  • 別シートの値を検索して一致したものを合計する

    excelvba初心者です。 お手数おかけします。 難問なのかどうかもよく分からず。。困っています。 シート1       シート2   シート3 AAA 100     AAA 50      BBB 20 BBB 200   CCC 150   CCC 30 DDD 300   QQQ 250   DDD 10 EEE 400     WWW 350  RRR 40 上記の値を決められた順番に別シートに集計したい(その時に、値を1/10にしたい) シート4 AAA 150 BBB 220 CCC 180 DDD 310 EEE 400 FFF 0 GGG 0 www 350 findでAAAを検索し見つかった値を ifにて条件分岐させるものをつくったものの プロシャーシーが大きすぎと言われてできません。 どなたか教えていただけないでしょうか。

  • 二つのシートのセルを比較して、あるセルの値が一致した場合に、片方のセル

    二つのシートのセルを比較して、あるセルの値が一致した場合に、片方のセルの値を 別のシートに設定するには、どうしたらいいでしょうか? [シート1] --|A---B---C---D---E --+---+---+---+---+--- 01|A1 ??? 02|A2 yyy 03|B1 ??? 04|C1 sss [シート2] --|A---B---C---D---E --+---+---+---+---+--- 01|A1 aaa 02|A3 bbb 03|B0 xxx 04|B1 ccc 05|C1 sss シート1 [Aのセル]とシート2の[Aのセル] を比較し、同じ値だった場合に、 シート2の [B] の値を シート1の[C]に設定するための関数はどのようにしたら良いでしょうか? 最終的に、シート1が --|A---B---C---D---E --+---+---+---+---+--- 01|A1 ??? aaa 02|A2 yyy 03|B1 ??? ccc 04|C1 sss sss となります。 Excelの関数あマクロは、どうしても分からなく質問させてもらいました。 申し訳ありませんが、ご教授宜しくお願い致します。

  • 参照先をセルに入力して、他のブックのセルを参照する方法

    Excelで、他のブックのセルを参照したいです。 たとえば、あるExcel(test.xls)上から、別のフォルダにある複数のブック C:\AAA.xls D:\BBB.xls の値を参照する場合ですが(AAA.xlsとBBB.xlsは、値の内容は違うが、同じシート名の同じセルに値が入っている)、 test.xlsのSheet1のA1に「C:\」、A2に「AAA.xls」を入力すると、test.xlsのSheet2にはAAA.xlsの値を表示し、 test.xlsのSheet1のA1に「D:\」、A2に「BBB.xls」を入力すると、test.xlsのSheet2にはBBB.xlsの値を表示するような方法です。 参照先が固定であれば、='C:\[AAA.xls]Sheet名'!D5・・・のような指定ができるのですが、参照するファイル名とパス名が都度変わるので、入力したセルの値で参照先を変えたいのです。 ちなみに、INDIRECTを使うやり方も考えましたが、参照先のブックを開いていないと値が表示されないようなので、却下されました。 (参照先のブックは開かなくても値を参照させたいです) どなたかご存知の方がいらっしゃったら、教えてください。 よろしくお願いします。

  • Sheet2にある情報をSheet1のA1に1列で

    マクロを作りたいのですが、以下のようなものをどうすればできるかで詰まっています。 Sheet2にある情報をSheet1のA1に1列(A列B列C列の順)で並ぶようにしたいです。 Sheet2の内容は変わることがあるので、データがどの行まで入っているかはマクロを走らせるときにチェックしないとわからないかと思います。 [Sheet1] 111 222 333 aa bb aaa bbb ccc ddd eee -------------------------- [Sheet2] A B C 1 111 aa aaa 2 222 bb bbb 3 333 ccc 4 ddd 5 eee 素人な質問かもしれないですが、調べてもわからなかったので、教えていただけると幸いです。

  • 数式の入力

    全てのシートのセルの同じ位置に SUMの範囲を指定して (たとえばE5に足し算の数式を入力して値はE6からE10) そんな数式を入力したいのですが、 そんなこと出来ますか? ※もう既に数値は入力されていています。

  • 番号入力するとデーターから自動的に該当に入力できる?

    下記例の入力したいシートに種類番号を入力すると、別シートの内容から検索して最初の入力したいシートの名前・住所欄に自動的に入力出来るようにできたらいいなと考ええています、そんなことが出来るでしょうか? 例■入力したいシート    A    B  C D E F 1種類番号 3 2名前   ううう  3住所   ccc 4 ■データシート    A    B    C  D E F 1種類番号 名前  住所 2 1    あああ aaa 3 2    いいい  bbb 4 3    ううう   ccc 5 4    えええ   ddd

  • 任意のブックのシートをコピー

    任意のブックのシートをコピーしたいのです。 たとえば、いつも使用するブック【AAA】があるとして、そこに後から開いたブック【BBB】のシート「あああ」をコピーしたいのです。 ここでの問題は、そのブックが常に【BBB】ではなということです。 例えはブック【CCC】のシート「あああ」であったり、ブック【DDD】のシート「あああ」であったり。 シート名は常に「あああ」なのですが、ブック名が毎回違うのです。 ブック【AAA】のマクロでなんとかできますでしょうか?

  • 【Excel VBA】データを集計する数式を入力するマクロ

    Excel2003を使用しています。   A列   B列   C列   D列   E列   F列 1      9/1                    20000 2      9/2              1000 3      9/10              5000 : : 10           9月計        ※1    ※2    11 12 13     10/1                   10000 14     10/10             2000 15     10/14                   4000 : : 20           10月計       ※3    ※4 上記のデータでいうと、 ※1(E10セル) =SUM(E1:E9) ※2(F10セル) =SUM(F1:F9) ※3(E20セル) =SUM(E13:E19) ※4(F20セル) =SUM(F13:F19) という内容の数式を入力するマクロを作成したく、数式を入力したいセルをアクティブにして、ボタン等に登録したマクロを実行すると数式が入力されるようにしたいと考えていますが、その際、集計範囲の最下行は、アクティブセルの1行上までになりますが、最上行をどのようにして取得すればよいかがわかりません。 (実際のデータは、もっと行数も入力されているデータ数も多いです) また、他にもこんな方法があるとか、こうしたほうが簡単とかあれば、教えていただけると勉強にもなりますので助かります。 うまく説明できなくて申し訳ありませんが、よろしくお願いします。

  • セルの値に応じてシート間をデータ移動させたい

    シート名が 「1」 「2」 「3」 「4」 「5」 という5つのシートがあります。 A2とA4にデータが入力されていて、 D4とI4に入力した値(シート名)に応じて、 マクロでシート間をデータ移動させたいのですが、 どなたかおわかりの方がいらっしゃいましたら教えて下さい。 (移動先にデータが存在する場合は上書きして問題ありません) 例) D4に「1」 I4に「3」と入力して実行すると、 シート「1」からシート「3」にA2とA4の値が移動するマクロを作成したい。

  • 数式が入った空白のセルを合計するとき

    数式が入った空白のセルを合計するとき WINDOWS XP EXCELL 2003 です。 各セルの数式は C43 =SUM(B36-C36) D36 =SUMPRODUCT((入力!$C$2:$C$50=$A36)*(入力!$A$2:$A$50=D$1),入力!$E$2:$E$50) E36 =SUMPRODUCT((入力!$D$2:$D$50=$A36)*(入力!$A$2:$A$50=D$1),入力!$F$2:$F$50) E43 =SUM(C43+D36-E36) と数式がそれぞれに入っています。 ご教示を仰ぎたいのは D36,E36 に値がない空白のセルですがこの場合、E43 G43 I43 と表示(この場合 50,000)がされますがD36 若しくはE36に値が表示されたときのみにE43 を表示したいのですが可能でしょうか。 目的は見やすくしたいのですが。 ご指導いたたければ幸甚の至りです。

専門家に質問してみよう