• ベストアンサー

合計金額を出力するマクロについて知りたい

E・F列は既に入力されています。 下記のようにG列・H列にマクロで出力できるようにしたいのです ■例 ----E-----F-----G-------H 07--名前A --金額---名前A---名前Aの合計金額 08--空白---金額---名前B---名前Bの合計金額 09--名前B --金額---名前C---名前Cの合計金額 10--空白---金額---合計---名前A~名前Cの合計金額 11--空白---金額 12--名前C --金額 13--合計--合計金額 ご教授お願い致しますm(_ _)m

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.4

>下記のところでエラーがでます。 どんなエラーが出たのか不明なので詳しい事は判りませんが,恐らくあなたの実際のワークシートが,ご相談で書かれている内容とは違ってるのが原因です。 変更前: cells(n, "H") = cells(n, "H") + cells(r, "F") 変更後: cells(n, "H") = application.sum(cells(n, "H"), cells(r, "F")) #具体的に「このマクロの行で」「こんな風に書かれてるエラーが現れた」「どこまで進んでマクロが止まった」「止まったときのワークシートはこんな内容が記入されている」などのように,目に見える様子を何でも詳しくご質問に書いて下さい。

hiro721
質問者

お礼

すみません。 cells(n, "H") = application.sum(cells(n, "H"), cells(r, "F")) で解決しました。 宣言した定数が一つ異なっているという単純なミスでした(><) 何度もご丁寧に本当に、ありがとうございました。

hiro721
質問者

補足

エラー箇所→ cells(n, "H") = application.sum(cells(n, "H"), cells(r, "F")) エラー出力→「実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラーです」 止まったときのワークシートには、名前Aだけが出力されています。 何度も申し訳ないですが、ご教授お願いします。

その他の回答 (4)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.5

No1です。 エラーが出ますだけでは・・・ 記載している情報と実際のセル位置が違うとか、 金額には”円”がついているとか、 どこかセルを結合しているとかなどの 問題じゃないかな????

hiro721
質問者

お礼

返答ありがとうございました。 >>エラーが出ますだけでは・・・ おっしゃる通りです(><) ですが、 誠に勝手ですが、自分の知識不足により、エラー原因追求が できない状態でした。 2度もご返答ありがとうございました。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.3

マクロでなく、sumif関数で実現できます。 セルH7に式[=sumif(E7:E12,"=名前A",F2:F12)] セルH8に式[=sumif(E7:E12,"=名前B",F2:F12)] セルH9に式[=sumif(E7:E12,"=名前C",F2:F12)] セルH9に式[=sum(H7:H9] を設定。

hiro721
質問者

補足

ご回答ありがとうございます。 残念ながら、名前は変動しますので、関数ではできないんです。 説明不足で、すみません。

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.2

7行目から金額が記入してある前提で。 sub macro1()  dim r as long  dim n as long  n = 6  range("H7:H65536").clearcontents  for r = 7 to range("E65536").end(xlup).row   if cells(r, "E") <> "" then    n = n + 1    cells(n, "G") = cells(r, "E")   end if   cells(n, "H") = cells(n, "H") + cells(r, "F")  next r end sub みたいな。

hiro721
質問者

補足

ご回答ありまがとうございます。 分かりやすいプログラムだったのですが、下記のところで エラーがでます。原因について考えたのですが、分かりません。 お手数ですが、どのようなプログラムを入力すればよいのか、 ご教授お願いできないでしょうか? 宜しかったらお願いします(><) cells(n, "H") = cells(n, "H") + cells(r, "F")

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

Sub try() Dim myDic As Object Dim r As Range Dim st As String Dim v As Variant Set myDic = CreateObject("Scripting.Dictionary") For Each r In Range("E7", Cells(Rows.Count, 5).End(xlUp)) st = IIf(r.Value <> "", r.Value, st) If Not myDic.Exists(st) Then myDic(st) = Array(r.Value, r.Offset(, 1).Value) Else v = myDic(st) v(1) = Val(v(1)) + r.Offset(, 1).Value myDic(st) = v End If Next Range("G7").Resize(myDic.Count, 2).Value = _ Application.Transpose(Application.Transpose(myDic.Items)) Set myDic = Nothing End Sub 一例になれば。

hiro721
質問者

補足

ご回答ありがとうございます。 ご回答いただいて申し訳ないですが、エラー表示されてしまいます。 配列で構成しているのではと思い考えてみましたが、やはり理解できず。 配列苦手で(^^;) すみません(><) 配列で構成したほうが一番いいと思うので、配列についてはもう少し勉強し直します。

関連するQ&A

専門家に質問してみよう