- ベストアンサー
エクセル ユーザーフォームで数値の合計を表示するには
いつもお世話になります。 列A=大分類,列B=中分類,列C=小分類,列D=売上金額の表があります。 ユーザーフォームで、列Dの売上金額の合計や、各分類別の合計数値を表示させたいのですが、そのようなことは可能でしょうか? 以上宜しくお願い致します。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
お話がよく見えてきませんが、 ○列A=大分類,列B=中分類,列C=小分類,列D=売上金額の表があります。 ということですが、結局は、種類別の「売上合計」を出すのですか? 単なる、ワークシート関数の式の組み立てではないのしょうか? SUM でも、SUMPRODUCTでも、配列の確定の必要がありません。 With Sheet1 .Select With .Range("A1", .Range("A65536").End(xlUp)) MsgBox Application.Evaluate("SUM(IF(" & .Address & "=1," & _ .Offset(, 3).Address & ",0))") End With End With ここの部分は、もし、はっきりしているなら、 "SUM(IF(" & .Address & "=1," & .Offset(, 3).Address & ",0))" "SUM(IF(A2:A200=1,B2:B200,0)" でも構いません。ただし、列を指定しないでくださいね。(例:A:Aというように全体を指定する) "SUMPRODUCT((A1:A200=1)*(D1:D200))" Dim myValue As Variant With Sheet1 .Select myValue = Application.Evaluate("SUMPRODUCT((A1:A200=1)*(D1:D200))") If Not IsError(myValue) Then MsgBox myValue Else MsgBox "エラーが出ています", 16 End If End With このようにして、エラー処理します。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
合計値を出す場合、ワークシート関数を使ったほうが、エラーを吐かなくて便利です。 TextBox に出す(またはLabelは、Caption)として、 サンプル: ボタンとかに以下を入れます。 Dim a As Double, b As Double, c As Double, d As Double With Sheet1 With .Range("A1", .Range("A65536").End(xlUp)) a = Application.Sum(.Value) If Not IsError(a) Then TextBox1.Value = Format$(a, "#,##0") End With With .Range("B1", .Range("B65536").End(xlUp)) b = Application.Sum(.Value) If Not IsError(b) Then TextBox2.Value = Format$(b, "#,##0") End With With .Range("C1", .Range("C65536").End(xlUp)) c = Application.Sum(.Value) If Not IsError(c) Then TextBox3.Value = Format$(c, "#,##0") End With With .Range("D1", .Range("DC65536").End(xlUp)) d = Application.Sum(.Value) If Not IsError(d) Then TextBox4.Value = Format$(d, "#,##0") End With End With
補足
早速ありがとうございます。おかげさまで問題解決しました・・・と申し上げたい所なのですが、すみません。私の質問の仕方が悪く、正確には、 大分類、中分類、小分類にそれぞれ2つの分類コードがあり、 ・全体の合計 ・大分類2種の合計 ・中分類2×2=4種の合計 ・小分類2×2×2=8種の合計 計15コの合計をそれぞれ出したかったのです。 SUMPRODUCT関数のような形で導き出す必要があるのですが、こちらは可能でしょうか?
お礼
ありがとうございました。 何分、知識不足なもので、解決までに非常に時間がかかりましたが、いただきましたお答えで作成できました。