• ベストアンサー

VBAにて計算式を入力したい

VBAにてマクロ作成中です。 下記の計算式をマクロから入力したいのですが、 どのような式になりますでしょうか? =SUM(SUMIF(稼動データ!F2:F89,{"D","F"},稼動データ!I2:I89)) R1C1形式だと、下記でうまくいくのですが。。 Range("G42").FormulaR1C1 = _ "=SUM(SUMIF(稼動データ!R[-40]C[-1]:R[47]C[-1],{" & """D"",""F""" & "},稼動データ!R[-40]C[2]:R[47]C[2]))"

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

  • ベストアンサー
  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.2

>この式の計算結果だけを、値として入力する場合は、 Application.WorksheetFunction.Sum(Application.WorksheetFunction. Sumif(WorkSheets("稼動データ").Range("F2:F89"),・・・)) のようにネストすればよいと思います。 ただ、WorksheetFunctionで、{"D","F"} のような設定を許可してくれるか解りませんが・・・。 他の方法として、Evaluate メソッドがあります。 セルに入る式をそのまま記述すれば問題無く動作するはずです。 Range("G42").Value = Evaluate("SUM(SUMIF(稼動データ!F2:F89,{""D"",""F""},稼動データ!I2:I89))")

makekin
質問者

お礼

>ただ、WorksheetFunctionで、{"D","F"} のような設定を許可してくれるか解りませんが・・・。 こちらはうまくいきませんでしたが、 >Range("G42").Value = Evaluate("SUM(SUMIF(稼動データ!F2:F89,{""D"",""F""},稼動データ!I2:I89))") こちらは、思い通りの動作になりました。 コードもこちらの方が見やすく、すっきりしました。 2日くらい悩んでいたものが解決しました。 大変ありがとうございました。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

Range("G42").Formula = "=SUM(SUMIF(稼動データ!F2:F89,{""D"",""F""},稼動データ!I2:I89))" では駄目なのですか?

makekin
質問者

お礼

こんなに早く回答がもらえるなんて大変ありがとうございます。 うまくいきました。 A1形式の計算式を 「Range("G42").FormulaR1C1 =」で、入力していたのが原因でした。 もう一点質問させてください。 この式の計算結果だけを、値として入力する場合は、 どのような式になりますでしょうか? Application.WorksheetFunction. を使うところまではわかるのですが、 ワークシート関数が2つある場合どのようにしたらよいか悩んでいます。 よろしくお願いします。

関連するQ&A

  • excel VBAで計算式を入力したい

    下記の計算式をVBAから入力したいのですが、うまくいきません。 =SUMPRODUCT((稼動データ!F2:F89="C")*(稼動データ!E2:E89={49,65,66,67,68,70,73,74,93,8106,8169,8192,8194,8561})*稼動データ!I2:I89) 文字列は、""で囲むのは判っているのですが。。。 いくつか試しましたがうまくいきません。 Range("M43").Formula = の後にどのような式を入力すればうまくいきますか? よろしくお願いします。

  • エクセル計算式、VBAについて

    エクセル計算式、VBAについて 下記質問の続きでございます。 http://okwave.jp/qa/q5871637.html 先日の質問にて表もうまく完成したかに見えたのですが、 何度か動作確認のテストをしているうちに、少しおかしな点が出てきました。 下記のURLにある表を見ていただきたいのですが、 加工前の状態から、下記のVBAを実行して、別シートへ加工後の形に出力しました。 ※質問文に直接画像を貼りたかったのですが、どういうわけか出来なかったので、 画像URLでのご説明になることをお許し下さい。 ※「加工前」 http://f58.aaa.livedoor.jp/~works/4.jpg ※VBAの内容 Sub ボタン1_Click() With Sheets("加工後") .Range("2:65536").ClearContents For i = 2 To Range("A65536").End(xlUp).Row For j = 1 To Range("D" & i).Value GYOU = .Range("A65536").End(xlUp).Row + 1 .Range("A" & GYOU).Value = Range("A" & i).Value .Range("B" & GYOU).Value = Range("B" & i).Value .Range("C" & GYOU).Value = Range("C" & i).Value .Range("D" & GYOU).Value = Range("D" & i).Value .Range("E" & GYOU).Value = j .Range("F" & GYOU).Value = "111-1111-" & Right("1111" & (i - 1), 4) .Range("G" & GYOU).Value = GYOU - 1 .Range("H" & GYOU).FormulaR1C1 = _ "=MIN(RC[-5],RC[-6]-SUMIF(R1C[-2]:R[-1]C[-2],RC[-2],R1C[-5]:R[-1]C[-5]))" Next j Next i End With End Sub ※「加工後」 http://f58.aaa.livedoor.jp/~works/1.jpg 加工後の結果でおかしいのが、「箱内数量」です。 目立つようにピンクと黄色で色分けしました。 H9とH10 は箱内数量が正しい数値ですが、 H18とH19は本来、H18=50、H19=40 とならなければなりません。 さらに、H22:H24も、H22=50、H23=50、H24=20 となってほしいのです。 ”加工前” シートのH列には下記の計算式が入っており、H列下方へ相対参照にて計算式をコピーしています。 =MIN(INDEX(C:C,MATCH(F2,F:F,0)),INDEX(B:B,MATCH(F2,F:F,0))-(ROW()-MATCH(F2,F:F,0))*INDEX(C:C,MATCH(F2,F:F,0))) ”加工後” シートのH列には事前には何も計算式が入ってませんが、VBAを実行することにより、下記の計算式が入り、H列下方へ相対参照にて計算式がコピーされています。 =MIN(C2,B2-SUMIF(F$1:F1,F2,C$1:C1)) なぜうまく結果が出るところと、出ないところがあるのか分かりません。 正常な結果を求めるには、どこを修正すればよろしいでしょうか?

  • エクセルVBAが書ける方へ

    お世話になります。 下記VBAはB19からB28までのデータをA11:12の横列に貼り付けさせる内容です。 Sub 特価() ' ' 特価 Macro ' ' Range("A11:A12").Select ActiveCell.FormulaR1C1 = "=R[8]C[1]" Range("B11:B12").Select ActiveCell.FormulaR1C1 = "=R[9]C" Range("C11:C12").Select ActiveCell.FormulaR1C1 = "=R[10]C[-1]" Range("F11:F12").Select ActiveCell.FormulaR1C1 = "=R[11]C[-4]" Range("H11:I12").Select ActiveCell.FormulaR1C1 = "=R[12]C[-6]" Range("T11:U12").Select ActiveCell.FormulaR1C1 = "=R[13]C[-18]" Range("X11:Y12").Select ActiveCell.FormulaR1C1 = "=R[14]C[-22]" Range("AD11:AE12").Select ActiveCell.FormulaR1C1 = "=R[15]C[-28]" Range("AN11:AO12").Select ActiveCell.FormulaR1C1 = "=R[16]C[-38]" Range("AW11").Select ActiveCell.FormulaR1C1 = "=R[17]C[-47]" Range("B23").Select End Sub これに下記内容を追加したいのですが教えて下さい。 ・B19からB28のデータは入力後消す。 ・貼り付けたら次に入力する時は下の行(A13:14)に貼り付ける。 ・同様にデータを消してA15:16に貼り付ける。以下、下の行に貼り付けていくようにする。 ・貼り付けたらカーソルはB19を選択した状態にする。 言葉足らずでしたら補足します。 何卒宜しくお願い致します。

  • VBAでエラーになってしまう

    初心者です。 RangeクラスのSelectメゾットが失敗しました。となります。 このコードは、マクロの記録を行い、そのコードをコマンドボタンのコードにコピーしたものです。 初心者なので、マクロの記録からやりました。 どうか、わかる方がいらっしゃいましたら、教えてください。 Private Sub CommandButton4_Click() Sheets("印刷ページ").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C6").Select ←ここが黄色くなり、エラーになります。 ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D6").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E6").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("B8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("F8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("B10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" End Sub

  • Excel VBAで表組みしたらデバック発生

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。

  • Excel VBA 計算範囲の変更について教えてください。

    こんばんは。とても困っています。 下記のような表で=A1&B1&C1の計算式を入れ、A1とB1を絶対参照にして$A$1&$B$1&C1としてD3までオートフィルをかけます。 そしてD4は =$A$4&$B$4&C4のように絶対参照しているセルを変更したいのです。たくさんありすぎて参照する範囲を変更するのにとても大変な思いをしています。VBAでどのようにすればよいのか教えてください。   |A    B   C     D ------------------------------------- 1| 1T  11L   A    1T11LA (=$A$1&$B$1&C1) 2|          B    1T11LB (=$A$1&$B$1&C2) 3|          C    1T11LC (=$A$1&$B$1&C3) 4| 2T  20L   A    2T20LA (=$A$4&$B$4&C4) 5|          B     2T20LB (=$A$4&$B$4&C5) 6|          C    2T20LC (=$A$4&$B$4&C6) 7| 3T  31M   A    3T31MA (=$A$7&$B$7&C7) 8|          B     3T31MB (=$A$7&$B$7&C8) マクロで記録させたらところ下記のようになりました。 Sub 4行置きに参照範囲を変更する() Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "=RC[-3]&RC[-2]&RC[-1]" Range("D1").Select ActiveCell.FormulaR1C1 = "=R1C1&R1C2&RC[-1]" Range("D1").Select Selection.AutoFill Destination:=Range("D1:D3"), Type:=xlFillDefault Range("D1:D3").Select Range("D4").Select ActiveCell.FormulaR1C1 = "=R4C1&R4C2&RC[-1]" Range("D4").Select Selection.AutoFill Destination:=Range("D4:D6"), Type:=xlFillDefault Range("D4:D6").Select Range("D7").Select ActiveCell.FormulaR1C1 = "=R7C1&R7C2&RC[-1]" Range("D7").Select Selection.AutoFill Destination:=Range("D7:D9"), Type:=xlFillDefault Range("D7:D9").Select End Sub ◎初心者なのでVBAにたくさんコメントを入れていただくと助かります。 宜しくお願い致します。

  • VBAで計算結果のみ表示させたい

    VBA作成中です。 SUMIF関数なのですが、 ActiveCell.FormulaR1C1 = "=SUMIF(R2C1:R14C1,RC[-1],R2C4:R14C4)"  このままだと計算式が入るので、これを計算結果のみ表示させたいのですが、値のみ貼り付け以外で方法はありますか?

  • VBAでVlookupを使って

    いつもお世話になっています。 VBAで現場検索登録シートと言うところに 一覧シートからVlookupを使って 表示させようと思い作りました。 エラーも何もでません。 ただ、表示されるものがちゃんと検索されるものと まったくされないものがあります。 Vlookupはマクロの記録から作ったものです。 原因がわかりません。 よろしくお願い致します。 '検索ボタン Private Sub CommandButton6_Click() '送り方 Range("C4:D4").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,22,FALSE)" Selection.Value = Selection.Value '封筒 Range("C5:D5").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,23,FALSE)" Selection.Value = Selection.Value '得意先名ふりがな Range("C6:F6").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,6,FALSE)" Selection.Value = Selection.Value '得意先名 Range("C7:F8").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,4,FALSE)" Selection.Value = Selection.Value '現場名ふりがな Range("C9:H11").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,9,FALSE)" Selection.Value = Selection.Value '現場名 Range("C10:H11").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,7,FALSE)" Selection.Value = Selection.Value End Sub エラーも何もなく、ちゃんと動くことは動きます。 検索結果が、検索コードによって違うのです。 よろしくお願い致します

  • Excel VBA の構文を教えてください。

    Excelにて、I列に分類条件が、”決", "D", "E*〇", E*△", 4種類あります。 (空白行もあり)計算済み数値がCP 列以降EO列まで記載されています。 セルCP2 (決+D+E*〇+E*△) 合計 セルCP5 (決+D) 合計 セルCP2 (決+D+E*△) 合計 JA2からJA18まで一旦、保存しています。 これをCP列からEO 列まで計算したいのですが、添付のようなVBAになってしまいました。 元データの加工によっては、行列が違ってくる事もあります。 VBA でシンプルに作成可能でしょうか?また、何となくExcel 関数でも簡単な方法がありましたら、 ご教授願います。(VBA初心者です)よろしくお願いします。 Sub 集計条件に一致した数値の合計() 'CP列 Range("JA2") = WorksheetFunction.SumIf(Range("I:I"), "決", Range("CP:CP")) Range("JB2") = WorksheetFunction.SumIf(Range("I:I"), "D", Range("CP:CP")) Range("JC2") = WorksheetFunction.SumIf(Range("I:I"), "E*○", Range("CP:CP")) Range("JD2") = WorksheetFunction.SumIf(Range("I:I"), "E*△", Range("CP:CP")) Range("CP2") = WorksheetFunction.Sum(Range("JA2:JD2")) Range("CP5") = WorksheetFunction.Sum(Range("JA2:JB2")) Range("CP6") = WorksheetFunction.Sum(Range("JA2:JC2")) 'CQ も同様に I列を検索して、 CQ列にある数値を一旦保存して、 CQ2 CQ5 CQ6 に結果を表示する

  • エクセルVBA(マクロ)の書き方で・・・

    VBA初心者です。よろしくお願いします。 エクセルマクロで、次のような関数を入力して、 =IF(月!$D4=稼動シート!$B$2,月!B4,"◆") 自動記録をさせると コードは、次のような「絶対参照セル」(←表現あっていますか?)の表示になります。 『Range("C4").Select ActiveCell.FormulaR1C1 = "=IF(月!RC4=稼動シート!R2C2,月!RC[-1],""◆"")"』 わたしのスキルでは、この記述コードを参考に別のコードを書こうにも理解と応用が効きません。 そこで、VBAコードにも 『Range("C4").Select  =IF(月!$D4=稼動シート!$B$2,月!B4,"◆")』 と単純に書いてはいけないのでしょうか?また、どうすれば実際のシートで入力した関数と同じような表現でVBAにもかけるのでしょうか? ご指導お願いいたします。

専門家に質問してみよう