[[20240423100928]] 『チェックボックスで計算式?』(さとみ) ページの最後に飛ぶ

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

| 全文検索 | 過去ログ ]

 

『チェックボックスで計算式?』(さとみ)

 下記の様な表がSheet1にあります。
   基本  A手当  B手当 C手当 D手当 E手当
 1  500   0    300  200  0   100
 2  200  100    0   150  200  200
 3 1200   0    0    0   100  120
 4  300  50   500    0   0   0

 やりたい事は、Sheet2に基本、A手当、B手当、C手当、D手当、E手当それぞれのチェックボックスを作成し
 チェックが入った項目の合計をSheet2のA1セルに表示したいです。
 例えば、基本とB手当にチェックが入ってる場合は、A1に3000としたいです。
 よろしくお願いいたします。

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


各々のチェックボックスの「リンクするセル」を設定する。
仮に「A6:F6」とする。

下の式で求まります。

=SUMPRODUCT((A2:F5)*(A6:F6))
(メジロ) 2024/04/23(火) 10:54:54


>Sheet2のA1セルに表示したいです。
>基本とB手当にチェックが入ってる場合は、A1に3000としたいです。
どういうことですか。
(?) 2024/04/23(火) 10:58:32

よく見ていませんでした。
1行目は「項目名」ではないのですね。
計算式の行数は実状にあわせ調整してください。
(メジロ) 2024/04/23(火) 11:47:29

    |[A]  |[B]   |[C]    |[D]    |[E]    |[F]    |[G]
 [1]|3000 |☑基本|☐A手当|☑B手当|☐C手当|☐D手当|☐E手当 
 [2]|     |2200  |       |800    |       |       |

    |[A]  |[B]   |[C]    |[D]    |[E]    |[F]    |[G]
 [1]|800  |☐基本|☑A手当|☐B手当|☑C手当|☑D手当|☐E手当 
 [2]|     |      |150    |       |350    |300    |

 チェックボックスはこんな感じでしょうか。
 チェックボックスは二種類ありますけど、どちらでしょうか。

(IT) 2024/04/23(火) 14:17:21


(さとみ)さん=(IT)さんですか?

ワークシート上ではフォームコントロールのほうが扱いやすいのでは

(メジロ) 2024/04/23(火) 16:06:24


    '標準モジュール 最初に実行してください
    Sub main()
    Dim sp As Shape, c As Range
    Sheets("Sheet2").Cells.Delete
    For Each sp In Sheets("Sheet2").Shapes
        sp.Delete
    Next sp
    For Each c In Sheets("Sheet1").Rows(1).SpecialCells(2)
        Set obj = Sheets("Sheet2").OLEObjects.Add(ClassType:="Forms.CheckBox.1", Link:=False, DisplayAsIcon:=False, _
        Left:=c.Offset(, 1).Left, Top:=c.Top, Width:=50, Height:=25)
        Sheets("Sheet2").OLEObjects(obj.Name).Object.Caption = c.Value
    Next c
    Sheets("Sheet1").Activate
    Sheets("Sheet2").Activate
    End Sub

    'クラスモジュール(Class1)
    Private WithEvents チェック As MSForms.CheckBox
    Public Sub 起動(ByVal c As MSForms.CheckBox)
    Set チェック = c
    End Sub
    Private Sub チェック_change()
    Dim tot, ck As Object, r As Range
    For Each ck In Sheets("Sheet2").OLEObjects
        Set r = Sheets("Sheet1").Rows(1).Find(ck.Object.Caption, , , xlWhole)
        If Not r Is Nothing Then
            If ck.Object.Value = True Then
                tot = tot + WorksheetFunction.Sum(r.EntireColumn)
            End If
        End If
    Next ck
    Sheets("Sheet2").Range("A1").Value = tot
    End Sub

    'Sheet2のシートモジュール
    Private チェックボックス() As New Class1
    Private Sub Worksheet_Activate()
    Dim ck As Object, i As Integer
    For Each ck In ActiveSheet.OLEObjects
    ReDim Preserve チェックボックス(i)
    チェックボックス(i).起動 Sheets("Sheet2").OLEObjects(ck.Name).Object
    i = i + 1
    Next ck
    End Sub

(mm) 2024/04/23(火) 16:35:58


>(さとみ)さん=(IT)さんですか?
失礼なことおっしゃりますね。
問いかけをよく見てくださいよ。
(IT)ですよ。

(IT) 2024/04/23(火) 18:00:07


>チェックボックスはこんな感じでしょうか。
>チェックボックスは二種類ありますけど、どちらでしょうか。

てっきり質問者さんと思いました
(メジロ) 2024/04/24(水) 10:08:52


obj が反転して変数が定義されていませんのエラーが出ました。
(えらー) 2024/04/25(木) 15:08:32

(さとみ)さん=(えらー)さんですか?

(メグロ) 2024/04/25(木) 15:37:18


↑何故そう思うんですか。
そのようなこと聞いてどうするの。
(わからん) 2024/04/25(木) 21:23:42

コメント返信:

[ 一覧(最新更新順) ]


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