質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

1回答

879閲覧

ExcelVBA(SUMIFで数式を残したい)

bigginer

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/09/14 11:45

■実現したいこと
下記インターネットより調べたコードを書き換えて、
「C2」セルにSUMIFにより算出して、
「C2」セルに数式を残したまま結果を返したいです。

■インターネットより参照した下記コード
(SUMIFの結果が値としてC2セルに返ってしまう。)
Sub Aggregate()
Dim result As Long
Dim shopNumber As Range
Dim sales As Range
Dim searchKey As String

Set shopNumber = Worksheets("売上表").Range("C3:C12") '店舗番号の列を代入 Set sales = Worksheets("売上表").Range("E3:E12") '売上金額の列を代入 searchKey = "A005" result = WorksheetFunction.SumIf(shopNumber, searchKey, sales) '集計 Range("C2").Value = result

End Sub

■試したこと
上記コードを下記コードに書き換えて試しました。

Range("C2").Formula = "WorksheetFunction.SumIf(shopNumber, searchKey, sales) "

大変恐れ入りますが、
数式を残したまま、「C2」セルにSUMIFの結果を返す方法を教えて頂きたく、
どうぞ宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

<再修正>

VBA

1 Dim 月次 As String 2 月次 = "202108" 3 4 Dim moto As Worksheet, lastrow As Long 5 6 Set moto = Worksheets("果物" & 月次) 7 lastrow = moto.Range("B" & moto.Rows.Count).End(xlUp).Row 8 9 Dim 範囲 As Range, 合計範囲 As Range 10 Set 範囲 = moto.Range("C4:C" & lastrow) 11 Set 合計範囲 = moto.Range("B4:B" & lastrow) 12 13 Dim saki As Worksheet 14 Set saki = Worksheets("集計表") 15 16 Dim i As Long, fm As String 17 For i = 2 To saki.Range("A" & saki.Rows.Count).End(xlUp).Row 18 fm = "=SUMIF(" & 範囲.Address(, , , True) & "," & "A" & i & "," & 合計範囲.Address(, , , True) & ")" 19 'fm = "=SUMIF(" & 範囲.Address(, , , True) & ",""" & saki.Range("A" & i).Value & """," & 合計範囲.Address(, , , True) & ")" 20 saki.Range("C" & i).Formula = fm 21 Next

投稿2021/09/14 12:32

編集2021/09/15 02:40
jinoji

総合スコア4585

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bigginer

2021/09/14 19:12

ご回答頂きまして誠に有難うございます。基礎的な事が理解できてなくて恐れ入ります。 質問不足でしたが、もう一点どうしても上手くいきません。 ■質問内容(前提事項) 「検索範囲」と「集計対象」のシートを別シートから算出したいです。 (前提①)シート名称の一部を変数にする必要があります。 (前提②)集計対象元シートの対象レコードは可変です。 ■具体例(シート名)果物(←固定シート名称)&月次(←固定ではないため変数) ■試したこと Sub SUMIF集計練習() Dim 月次 As String Dim Last_row As Integer '最終行 月次 = "202108" '集計元シート選択 Sheets("果物" & 月次).Select Last_row = Cells(Rows.Count, 2).End(xlUp).Row MsgBox ("集計元シート最終行は" & Last_row) '集計先シート選択 Sheets("集計表").Select '↓アプリケーション定義またはオブジェクト定義エラー(変数の紐付け方法が判らず) Range("C3").Formula = "=SUMIF(""果物""&月次!R4C2:R & Last_row &C2,""りんご"",""果物""&月次!R4C3:R& Last_row &C3)" End Sub 以上、大変お手数をお掛けしますが、ご教授頂きたくどうぞ宜しくお願い致します。
bigginer

2021/09/15 02:19

ご丁寧に有難うございます。 何度も誠に申し訳ございません。1点自己解決できると思ったため、質問していないところがどうしても実現できませんでした。 ■前提 実際の検索値は、常に「集計元」シートの行(例:A列)をループしながら取得するものです。 ループしながら取得した検索値を基にSUMIFで集計元シートから算出する式です。 例えば、SUMIF数式を入力したい列がC列で、検索値を取得したい列がA列だとします。 そのため、集計元シートから検索値を取得するには、RC[-2]となります。 ■試したこと(””りんご””の検索値→RC[-2]に置き換えてテストしましたが、文法が通らず) Range("C3").Formula = "=SUMIF(""果物""&月次!R4C2:R & Last_row &C2,RC[-2],""果物""&月次!R4C3:R& Last_row &C3)" 以上、何度も大変申し訳ございません。 また、お忙しいところ誠に恐れ入りますが、ご教授頂きたく何卒宜しくお願い致します。
jinoji

2021/09/15 02:43

R1C1形式で書くなら、Range("C3").FormulaR1C1= とする必要があると思います。
bigginer

2021/09/15 04:51

この度は、お忙しい所何度もご教授頂きまして誠に有難うございました。 (自分で2日位悩んでました。。) 教えて頂きましたコードによりようやく実現できました。 今後は、自己解決できるようにVBAの学習に励んでいきたいと思います。 重ね重ね御礼申し上げます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問