[[20240802000051]] 『変数を使って、計算式を動的に活用する』(じいかっぱ) ページの最後に飛ぶ

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

| 全文検索 | 過去ログ ]

 

『変数を使って、計算式を動的に活用する』(じいかっぱ)

Sub 執行状況シート式入力()

    Dim kurikaesi As Long
    Dim kurikaesi2 As Long
    Dim Clastrow As Long

   '出納帳シートのc列最終行番号を取得
     Clastrow = Sheets("出納帳").Cells(Rows.Count, "C").End(xlUp).Row

   '執行状況シートのc列に数式を入力
     For kurikaesi = 2 To 7
            Sheets("執行状況").Range("D" & kurikaesi).Formula = "=IF(C" & kurikaesi & "="","",SUMIF(出納帳!B4:B" & Clastrow - 1 & ",C" & kurikaesi & ",出納帳!D4:D" & Clastrow - 1 & "))"
     Next kurikaesi

     For kurikaesi2 = 10 To 36
            Sheets("執行状況").Range("D" & kurikaesi2).Formula = "=IF(C" & kurikaesi & "="","",SUMIF(出納帳!B4:B" & Clastrow - 1 & ",C" & kurikaesi2 & ",出納帳!E4:E" & Clastrow - 1 & "))"
     Next kurikaesi2

 End Sub

上記のマクロを記述し、実行したところ
D列の該当各セルに入力された式を確認すると(D2セルの例)
期待していた =IF(C2="","",SUMIF(出納帳!B$4:B$204,C2,出納帳!D$4:D$204))ではなく
次のような式が入力されており
=IF(C2=",",SUMIF(出納帳!B$4:B$204,C2,出納帳!D$4:D$204))
結果、
「FALSE」とされてしまいました。

どのようにすれば期待した結果を得ることができるのでしょうか。

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


 文字列データ型
https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/string-data-type

 二重引用符は次の 2 つのいずれかの方法でリテラル文字列に埋め込むことができます。

 二重引用符を使う。
   Dim s As String
   s = "This string literal has an embedded "" in it."

 Chr 関数を使う。二重引用符の文字コードは 34。
   Dim s As String
   s = "This string literal has an embedded " & Chr(34) & " in it."
(リンク) 2024/08/02(金) 07:10:35

すでにアドバイスがあるところですが↓あたりを読んでみてはどうでしょうか?
 ダブルコーテーションの表示
http://officetanaka.net/excel/vba/tips/tips90.htm

なお、[[20240728063236]][[20240724105448]]でどのような数式を提案されたのか読み返してみても理解が進むとおもいます。

(もこな2) 2024/08/02(金) 07:27:26


 過去に質問している内容だったか。。。ちゃんと読まないと

 (マナ)さんがアドバイスしてくれてますよ。

 Formula = "=IF(C" & kurikaesi & "="","",SUMIF 〜略〜 これではなんか少ない気がするような...
                                  ~~~~~~
 ↓へ

 Formula = "=IF(C" & kurikaesi & "="""","""",SUMIF 〜略〜
(あみな) 2024/08/02(金) 07:43:12

 ダブルクオーテーションを文字列の中で使う時は、
 「二つ続けて一つのダブルクオーテーション」ということです。

 別件ですが
[[20240728063236]]
 で書かれているように、ループを使わない方法も身に着けたほうがよいと思いますよ。

 できあがりの式は確かに異なる文字列だから、ひとつづつ設定しないといけないと思っていて、
 そこがモヤモヤしていて、助言を受け容れない理由になっているのでしょう。

 これは条件付き書式の設定の時にも表れますよね。
 たとえば、A1:A100の範囲に、その値が1だったら赤の塗りつぶし色をつけたいとします。
 A1セルに =A1=1
 A2セルに =A2=1
 ・・・・
 と100個の条件付き書式を一つづつ設定しますか?

 A1:A100を選択した状態で、=A1=1 とするでしょう?
 それと同じ理屈ですよ。
 相対参照をもちいた式を入力する場合は、
 こうしてまとめて設定しても、Excel側がそう解釈するんです。

 ひとつひとつ設定しないと結果が変わるならいざ知らず、
 そうしないで済むなら一括して設定するでしょう? 同じことです。

(xyz) 2024/08/02(金) 09:49:53


リンク様、もこな2様、あみな様、xyz様
貴重なアドバイスありがとうございました。
皆様のご指摘、痛いです。
せっかくいただいたアドバイスを読み込まず、解決にまっしぐらという姿勢、反省いたします。
(じいかっぱ) 2024/08/02(金) 10:20:52

コメント返信:

[ 一覧(最新更新順) ]


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