• ベストアンサー

VBAで「介護」を含む文字列のある行の集計をしたい

EXCEL365のシートに =SUMIF(C17:C30,"*介護*",F17:F30) を入力すると、 正常に計算しました。 これをVBAのコードに入力すると Range("U16").Formula = "=SUMIF(C17:C30," * "介護" * ",F17:F30)  と表示され、エラーが出て、正しく計算してくれません。 どうしたらよいでしょうか。困ってます。どうかよろしくお願いします。

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

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

質問と例を変えていますが C1:D10に下記例データがあるとして    <ーブランク 必介護  12 投薬  1 要介護  34 観察  2 投薬  3 介護要  14 介護  4 観察  5 観察  6 標準モジュールに Sub test01() Range("A2").Formula = "=SUMIF(C1:C10,""*介護*"",D1:D10)" 'Range("A2").Formula = "=SUM(D1:D10)" 'OK 小手慣らしのテストしたもの End Sub これを実行すると、A2セルに 64 とでました。 これを参考に、質問のケースに(セル範囲を)修正して、やってみてください。 他にVBAで、WorksheetFunctionでSUMIFを使う方法もあると思います。

その他の回答 (2)

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

詳しくは http://officetanaka.net/excel/vba/tips/tips90.htm の説明がわかりやすいです。

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

Range("U16").Formula ="=SUMIF(C17:C30,""*介護*"",F17:F30)" と書きます。

関連するQ&A

  • excel vba sumif 月間集計

    excel vba sumif 月間集計 どなたか教えていただけますか? sheet1に1日毎のデータが打ち込まれています。そのデータを同じブック内の月間シートが開いたときに表示してるのですが、31日間分のコードをsumifで処理しているため、かなりのファイル容量となり重くなります。もっと効率的な方法はないのでしょうか、(範囲指定の繰り返し処理等)お願いいたします。 なお、sheet1からsheet5まで日毎のデータをそれぞれ月間シート1~5に集計してます。 例です。 sheet1は   A    B     C    D     E   F・・・・ 1 日  目的  距離  燃料 2 1   社用  50 3 1   私用  60   10  4 2   社用  30 月間シート1は   A   B   C   D E    F 1 日  距離  燃料       1110 2 1  110    10 3 2   30     0  Private Sub Worksheet_Activate() UserForm1.Hide Range("A1").Select '距離数 Range("B2").Value = WorksheetFunction.SumIf(Sheets("Sheet1").Range("A2:A300"),   Range("A2"), Sheets("Sheet1").Range("C2:C300"))   Range("B3").Value = WorksheetFunction.SumIf(Sheets("Sheet1").Range("A2:A300"),   Range("A3"), Sheets("Sheet1").Range("C2:C300"))      ・      ・      ・ '累計 ・・・は、こんな感じ処理してます Dim myRng As Range Dim c As Range Set myRng = Range("F2:F32") For Each c In myRng c.Value = c.Offset(0, -4).Value + c.Offset(-1, 0).Value  Next c  End Sub

  • EXCEL VBA Worksheet_Chang

    お世話になります。 EXCEL VBAで 以下の処理をしています。 C6の内容に応じて、セルに式を設定するだけなのですが このシートの全然関係ないセルで[Delete]キーを押下した際に 実行時エラー 13 型が一致しません というエラーが発生します。 どういう理由でエラーとなるのでしょうか? また、どのような対処をすればいいでしょうか? 以下、実際のコードです Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("C6") Then If Range("C6").Value = "する" Then Range("I11").Formula = "=C7" Range("I12").Formula = "=C7" Range("I13").Formula = "=C7" Range("I14").Formula = "=C7" Range("J11").Formula = "=C8" Range("J12").Formula = "=C8" Range("J13").Formula = "=C8" Range("J14").Formula = "=C8" Else Range("I11").Formula = "" Range("I12").Formula = "" Range("I13").Formula = "" Range("I14").Formula = "" Range("J11").Formula = "" Range("J12").Formula = "" Range("J13").Formula = "" Range("J14").Formula = "" End If Else End If End Sub

  • VBAで文字と数値のセルを計算したい

    EXCEL2000でVBA作成中です。  以下のコードで計算式を入れています。 セルの値が0のときは、セルの値を表示しないようにしています。 ところが印刷すると0が表示されてしまいます。 Range("F18").Formula = "=if(+G18>0,""朝"","""")" Range("h18").Formula = "=if(+I18>0,""昼"","""")" Range("J18").Formula = "=if(+K18>0,""夕"","""")" Range("G18").Formula = "=IF(COUNTIF(Q18:AB19, "" 朝"")=0,0,COUNTIF(Q18:AB19, ""朝""))" Range("I18").Formula = "=IF(COUNTIF(Q18:AB19, "" 昼"")=0,0,COUNTIF(Q18:AB19, ""昼""))" Range("K18").Formula = "=IF(COUNTIF(Q18:AB19, "" 夕"")=0,0,COUNTIF(Q18:AB19, ""夕""))" Range("L18").Formula = "=-(+G18*300+I18*350+K18* 400)" そこで Range("G18").Formula = "=IF(COUNTIF(Q18:AB19, "" 朝"")=0,"""",COUNTIF(Q18:AB19, ""朝""))" とすると、L18にエラーが出て計算してくれません。 ゼロを非表示にしてしかも計算させるようにするには どうしたらよろしいか。

  • vbaの速度向上(sumif関数)

    エクセルvbaの速度を向上できないか、お知恵を貸していただきたく存じます。 以下のvba(sumif関数)をもっと速めたいです。何とかできないでしょうか。長い記載となり申し訳ないのですが、何卒よろしくお願い申し上げます。 myCnt7 = 2 Do Worksheets("●").Cells(myCnt7, 4).Value = WorksheetFunction.SumIf(Worksheets("◆").Range("B:R"), Worksheets("●").Cells(myCnt7, 3), Worksheets("◆").Range("R:R")) - WorksheetFunction.SumIf(Worksheets("★").Range("B:C"), Worksheets("●").Cells(myCnt7, 3), Worksheets("★").Range("C:C")) Worksheets("●").Cells(myCnt7, 7).Value = WorksheetFunction.SumIf(Worksheets("◆").Range("B:R"), Worksheets("●").Cells(myCnt7, 6), Worksheets("◆").Range("R:R")) - WorksheetFunction.SumIf(Worksheets("★").Range("B:C"), Worksheets("●").Cells(myCnt7, 6), Worksheets("★").Range("C:C")) Worksheets("●").Cells(myCnt7, 10).Value = WorksheetFunction.SumIf(Worksheets("◆").Range("B:R"), Worksheets("●").Cells(myCnt7, 9), Worksheets("◆").Range("R:R")) - WorksheetFunction.SumIf(Worksheets("★").Range("B:C"), Worksheets("●").Cells(myCnt7, 9), Worksheets("★").Range("C:C")) Loop While myCnt7 > 201 ※シート●のC列から3列ごとに、Sumifの検索条件があります。 ※シート●のD列から4列ごとに、Sumifの計算結果を出力させます。 ※計算対象シートは、シート◆とシート★の2つです。  シート◆のSumif合計から、シート★のSumif合計を差し引いています。  Sumifの条件自体は、どちらのシートも同じ(シート●)。 ※上記のSumif関数の記述は、3つですが、実際の記述は24あります。 ※すなわち、検索条件の組み合わせが24あり、201行分をmyCnt7でLoopさせて実行しています。

  • 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にてマクロ作成中です。 下記の計算式をマクロから入力したいのですが、 どのような式になりますでしょうか? =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]))"

  • エクセルVBA ワークシート関数の使用について

    エクセル2003VBA ワークシート関数の使用についての質問です よろしくお願いします。 4桁の数字を、千の位・百の位・十の位・一の位に分解する関数ですが 例えば A1に4桁の数字があり、B1に千の位を表示する場合ですが ワークシート関数の場合 B1=MOD(INT($A$1/1000),10) となりますが VBAにてそのまま使用し Range("B1").value=Application.WorksheetFunction.MOD(INT(Range("A1")/1000),10)とするとエラーになります。 エラーになる原因は、いろいろ調べたら分かったのですが この様に、一発でB1に計算結果を入れたいのですが、どうしたらよろしいでしょうか 現在は、 Range("C1").Formula = "=MOD(INT(A1/1000),10)" Range("B1").value=Range("C1").value 一旦、C1に置き換えてから行っています。 よろしくお願いします

  • Excel 2007 VBA で実行時エラーが出る

    Excel 2007 VBA で下記の様に入力し、実行すると、 実行時エラー 1004  アプリケーション定義またはオブジェクト定義のエラーです。 と表示され、ストップしてしまいます。 ' 登録番号を付ける Range("C7").Value = 1 Range("C8:C42").Formula = "=IF(LEN(E8)>2,C7+1,"")" 初心者で、どうしても原因がわかりません。 教えて下さい、お願いします。

  • エクセル計算式、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で入力規則を設定するには?

    22歳男性です。 エクセルVBAについて質問があります。 シート上にあるボタンをクリックすると、特定のセルに入力規則を追加するというプログラムを作っています。 以下のコードのように記述しているのですが、まったくうまくいきません。 何が悪いのかご指摘いただけたらと思います。 ■コード■ Private Sub CommandButton1_Click() With Range(\"b2\").Validation .Add Type:=xlValidateWholeNumber, Operator:=xlBetween, Formula1:=10, Formula2:=20 End With End Sub

専門家に質問してみよう