[[20240724105448]] 『SUMIFを使った式をマクロで入力』(じいかっぱ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『SUMIFを使った式をマクロで入力』(じいかっぱ)

Sub 数式入力()

   Sheets("Sheet2").Select

   Range("C2").Formula = "=SUMIF(出納帳!B4:B204,""事務費"",出納帳!E4:E204)"

 End Sub

上記のマクロを元に以下のようなマクロを考えています。

  Dim s As String←変数を宣言
  s = Sheets("Sheet2").Range("C2").Offset(i, 0).Value←左隣のB2セルの値を取得
'  Range("B7").Formula ="=SUMIF(出納帳!B4:B204,""事務費"",出納帳!E4:E204)"
                          ↑
         この"事務費"の代わりに変数sで取得した値(文字)を入れて処理を進めたい

どのようにしたら上手くいくでしょうか。
ご教授ください。

また、同じ処理を2行目から32行目まで繰り返し行う処理を最終的に考えています。
こちらの方も併せご教授、お願いいたします。

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 Dim s As String
 s = Sheets("Sheet2").Range("C2").Offset(, -1).Value
 Range("B7").Formula = "=SUMIF(出納帳!B4:B204," & Chr(34) & s & Chr(34) & ",出納帳!E4:E204)"

 されたいことはこんな感じになると思います。

 ちなみに「左隣のB2セルの値を取得」は
 Range("C2").Offset(, -1).Value
 になり、Range("C2").Offset(i, 0).Valueではi行下を取得してしまいます。

 Chr(34)は「"」ダブルクォーテーションです。

 > 2行目から32行目まで繰り返し行う処理を最終的に考えています
 は、Range("B" & n).Formula のようにしてnを2〜32までFor〜Next文で括るといいでしょう。 
(通りすがり助六) 2024/07/24(水) 11:11:48

>s = Sheets("Sheet2").Range("C2").Offset(i, 0).Value←左隣のB2セルの値を取得
Offsetについて調べなおしてください。
OffsetはOffset(RowOffset, ColumnOffset)ですよ。

>' Range("B7").Formula ="=SUMIF(出納帳!B4:B204,""事務費"",出納帳!E4:E204)"
文字列演算子について調べてみて下さい。
Range("B7").Formula = "=SUMIF(出納帳!B4:B204," & Chr(34) & s & Chr(34) & ",出納帳!E4:E204)"

>また、同じ処理を2行目から32行目まで繰り返し行う処理を最終的に考えています。
>こちらの方も併せご教授、お願いいたします。
For Nextで調べてみて下さい。
(匿名) 2024/07/24(水) 11:20:00


  >"=SUMIF(出納帳!B4:B204,""事務費"",出納帳!E4:E204)"

   一目 ↓
  
    "=SUMIF(出納帳!B4:B204,""" & s & """,出納帳!E4:E204)"

(半平太) 2024/07/24(水) 11:30:57


 書き込み先は B7で良いのでしょうか。C列なのでは?
 計算式中にB2を使えばいいだけのように思いましたが。
(xyz) 2024/07/24(水) 11:46:18

結局皆さんと同じ1ことになりますが何点か。

■1
以下について、コードとコメントが一致していません。

 s = Sheets("Sheet2").Range("C2").Offset(i, 0).Value '←左隣のB2セルの値を取得

コメントのほうが正しいならば↓になります。

 s = Sheets("Sheet2").Range("C2").Offset(0, -1).Value 'C2セルから下に0行、左に1列ズレるセルの値を取得

■2
>同じ処理を2行目から32行目まで繰り返し行う処理を最終的に考えています。
既に案内があるように、そもそもセルを参照すればよいので、いちいち取得して数式を設定する必要がありません。

  Range("C2").Formula = "=SUMIF(出納帳!B4:B204,B2,出納帳!E4:E204)"
                                               ~~

さらに、数式の相対参照と絶対参照を適切に設定すれば、繰り返し処理せずとも↓で事足ります。

    Sub 研究用()
         Sheets("Sheet2").Range("C2:C32").Formula = "=SUMIF(出納帳!$B$4:$B$204,B2,出納帳!$E$4:$E$204)"
    End Sub

(もこな2 ) 2024/07/24(水) 12:49:47


通りすがり助六様、匿名様、半平太様、xyz様、もこな2様
早速のご教授ありがとうございました。
希望通りの結果を得ることができました。
コメントに基づいて学びを深めていきたいと思います。
なお、指摘されるように、質問の記述に問題点がありました点が多々ありました。
質問コメントを挙げる前に確認をしっかりする等、以後、気をつけたいと思います。
お詫びいたします。

(じいかっぱ) 2024/07/24(水) 13:49:01


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.