エクセル の学校
8.一覧 9.HOME
1.Top 2.Last

[[20240423100928]]

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

|
| 全文検索 | 過去ログ | エクセルの学校HOME ]

 

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

 下記の様な表が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



[ 一覧(最新更新順) |

]

キーボードヒント:[Home]または[Fn+Home]キーで一番上へ戻ります

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