• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルVBAマクロで条件付き合計の方法)

エクセルVBAマクロで条件付き合計の方法

このQ&Aのポイント
  • エクセルVBAマクロを使用して、条件付き合計を行う方法を教えてください。
  • 特定の列(B列)にある特定の値(a銀行)に基づいて、別の列(E列)の値を合計する方法を知りたいです。
  • セルの位置が変動しても、合計範囲を自動的に調整する方法があれば教えてください。

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

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

はて……???? >データ末尾=各列最終行ではございません。 >値が入力されているセルの一番下ということです。 回答2のマクロは「値が入力されているセルの一番下」の+3行に数式を記入するよう,作成してありますが,いったいどういうことでしょうか。 回答2のマクロを実際に動かして,いったい「どのように違っている」(具体的に。今のアナタのエクセルで回答のマクロを動かしたら,ここの番地にこういう数式が入ったけど,これこれの理由でここの番地にこういう内容で数式が入って欲しい,と)のか,キチンと教えてください。 そもそも。 >各列毎に設定する方法ではなく、まとめて設定できないものかと思い質問させて頂いております。 いまE列はE80までデータが記入されていて,E83に数式を入れたい いまF列はF103までデータが記入されていて,F106に数式を入れたい  : いまJ列はJ345までデータが記入されていて,J348に数式を入れたい それらのE83,F106…J348に,まとめて数式を入れたい,とそういう事を言ってるように見えますが,そういう事でしょうか? やれば勿論出来ますが,なんとも無意味なコダワリにしか思えません。 それとも? アナタの用意した正体不明のdatnumの値(仮に423とか)を信頼して,E列:J列の実際のデータの入り具合はもう見る必要は無くて,datnum+3行に(たとえばE426:J426に)まとめて一斉に数式を記入したいと言いたいのでしょうか。 こちらも実際に試してください: sub macro2()  dim datnum ’アナタが用意したdatnumの値の取得をここに書き写す  cells(datnum, "E").resize(1, 6).formular1c1 = "=SUMIF(R7C2:R[-3]C2,""a銀行"",R7C:R[-3]C)" end sub 回答1然り,回答2も同じですが,それぞれ回答で寄せられたマクロを実際に試してから「アナタが書いてくれたマクロを実際に動かしてみたら,ここが違うのでこうしたい」という具合に,もうちょっとキャッチボールしてみるのもいいんじゃないでしょうか?

quindecillion
質問者

お礼

質問の仕方、返答の仕方につきまして失礼を重ね申し訳ございません。 No.2のマクロを実行したところ、確かに最終行+3ではあるのですが 合計 a銀行 b銀行 と既にマクロにて先に標記していますので、その更に3列下に表示され、 合計 a銀行 b銀行 1列目 2列目 3列目 合計値 合計値・・・ という形になってしまい、希望とは違うものだと判断をしてしまっておりました。 この度のご指摘を受けた後+3の数値を+1や+2に変えて銀行名を変更していけば対応できることに気がつき、現在は希望に添った形になっております。 For c = 5 To 10 r = Cells(65536, c).End(xlUp).Row If r >= 7 Then Cells(r + 1, c).FormulaR1C1 = "=SUMIF(R7C2:R[-3]C2,""a銀行"",R7C:R[-3]C)" End If Next c For c = 5 To 10 r = Cells(65536, c).End(xlUp).Row If r >= 7 Then Cells(r + 1, c).FormulaR1C1 = "=SUMIF(R7C2:R[-3]C2,""b銀行"",R7C:R[-3]C)" End If Next c と記述させていただき、使わさせて頂きます。 範囲がそのうち合計やa銀行などに被さってきますが、Bを銀行名検索なのでこだわらずにいこうと考えております。 もし、このまま数が増えると問題が起こる可能性がありますようでしたらご教授頂ければ幸いです。 >いまE列はE80までデータが記入されていて,E83に数式を入れたい >いまF列はF103までデータが記入されていて,F106に数式を入れたい > : >いまJ列はJ345までデータが記入されていて,J348に数式を入れたい > >それらのE83,F106…J348に,まとめて数式を入れたい,とそういう事を>言ってるように見えますが,そういう事でしょうか? >やれば勿論出来ますが,なんとも無意味なコダワリにしか思えません。 こちらにつきましては、私の説明がわるかったことが招いた誤解でありますことをお詫び申しあげます。 >sub macro2() > dim datnum >’アナタが用意したdatnumの値の取得をここに書き写す > > cells(datnum, "E").resize(1, 6).formular1c1 = "=SUMIF(R7C2:R[-3]>C2,""a銀行"",R7C:R[-3]C)" >end sub こちらのマクロにつきましても描いていたものと同じ作業ができました。 色々と作法につきましてもご教授頂き、感謝致しております。 この度は色々とご無礼が有りましたことをこの場をかりましてお詫び申しあげます。 この度は本当にありがとうございました。

その他の回答 (2)

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

数式を記入するのは,各列の最下行+3行目でいいんですね?(アナタが掲示したマクロは,そうは書かれていませんが,マクロの方を無視します) 作成例: sub macro1()  dim c as integer  dim r as long  for c = 5 to 10   r = cells(65536, c).end(xlup).row   if r >= 7 then    cells(r + 3, c).formular1c1 = "=SUMIF(R7C2:R[-3]C2,""a銀行"",R7C:R[-3]C)"   end if  next c end sub

quindecillion
質問者

お礼

ご回答ありがとうございます。

quindecillion
質問者

補足

当方の記述がおかしかったことをお詫びさせて頂きます。 データ末尾=各列最終行ではございません。 値が入力されているセルの一番下ということです。 100行目まで値があれば103行目にa銀行の合計 200行目まで値があれば203行目にa銀行の合計 という形です。 最終行が変動しますがDatNumが入力値の最終行になるように設定してあります。 E列からJ列の入力値の最終行+3行目にBがa銀行なら合計をする という形をとりたいと思っております。 各列毎に設定する方法ではなく、まとめて設定できないものかと思い質問させて頂いております。 非常に言葉足らずな質問で申し訳ありませんでした。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

一例です。 Range(adr2$).Cells(datnum + 3, 1).FormulaR1C1 = _ "=SUMIF(r7c2:r1000c2,""a銀行"",r7c:r1000c)"

quindecillion
質問者

お礼

ご回答ありがとうございます。

quindecillion
質問者

補足

ご返事ありがとうございます。 Range(adr2$).Cells(datnum + 3, 1).FormulaR1C1 = _ "=SUMIF(r7c2:r1000c2,""a銀行"",r7c:r1000c)" これですと Range(adr2$).Cells(DatNum + 3, 1).Formula = _ "=SUMIF(B7:B1000,""a銀行"",E7:E1000)" を絶対値形式で書き直しただけで解決に至っていないと思われるのですが当方の勘違いでしょうか? この方法でも各セルに対応するように値をずらして行けばできるのですが、コードが長くなりすぎるのでまとめれないかと考えております。

関連するQ&A