[[20160725153216]] 『同じ値のコンボボックス→計算』(りんご) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『同じ値のコンボボックス→計算』(りんご)

 Gr.1
 ComboBox1 → りんご TextBox1 → 200

 Gr.2
 ComboBox2 → みかん TextBox2 → 150

 Gr.3
 ComboBox3 → りんご TextBox3 → 500

 ユーザーフォームに上記を配置して、それぞれに値が入っています。
 ComboBox 同一値のみの、TextBoxの合計値を出したいです。

 「りんご」の合計「700」
 「みかん」の合計「150」

 よろしくお願い致します。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


Private Sub CommandButton1_Click()
    Dim dic, k, i As Integer
    Set dic = CreateObject("scripting.dictionary")
    On Error Resume Next
    For i = 0 To 2
    dic(Array(ComboBox1, ComboBox2, ComboBox3)(i).Text) = dic(Array(ComboBox1, ComboBox2, ComboBox3)(i).Text) * 1 + val(Array(TextBox1, TextBox2, TextBox3)(i))
    Next i
    For Each k In dic.keys
    If Not k = Empty Then MsgBox k & "の合計" & dic(k) * 1
    Next k
End Sub
(mm) 2016/07/25(月) 16:37

 一例です

 Private Sub CommandButton1_Click()
    Dim i As Long
    Dim k As String
    Dim dic As Object
    Dim msg As Object

    Set dic = CreateObject("Scripting.Dictionary")
    Set msg = CreateObject("Scripting.Dictionary")

    For i = 1 To 3
        k = Me.Controls("ComboBox" & i).Value
        dic(k) = dic(k) + Val(Me.Controls("TextBox" & i).Value)
        msg(k) = k & ":" & dic(k)
    Next

    MsgBox Join(msg.items, vbLf)

    Set dic = Nothing
    Set msg = Nothing

 End Sub

(β) 2016/07/25(月) 17:06


 mm様・β様 ありがとうございます。

 すみません。MsgBoxに表示させる方法ではなく、
 「りんご」の場合 → TextBox3に合計値を表示
 「みかん」の場合 → TextBox4に合計値を表示

 だとどのようになりますか?

 りんご
(りんご) 2016/07/25(月) 17:14

 >>「りんご」の場合 → TextBox3に合計値を表示

 TextBox3 は、明細行で、すでに値が入っているので、これは TextBox4 ですかね?

 もし、「バナナ」だったら、どこに表示するのですか?

(β) 2016/07/25(月) 17:25


 β様

 失礼しました。TextBox4です。

 ComboBox1〜3全てに、「りんご」「みかん」「バナナ」3つのリストセット。
 それぞれの金額をTextBox1〜3に入力。

 TextBox4〜6を配置。
 CommandButton1_Clickで、 
 「りんご」の場合 → TextBox4に合計値を表示
 「みかん」の場合 → TextBox5に合計値を表示
 「バナナ」の場合 → TextBox6に合計値を表示
 というイメージです。
(りんご) 2016/07/25(月) 17:34

 各ComboBoxのリストがRowSourceで与えられているか、Listに対するセット(AddItem等) なのかは別にして
 TextBox4,5,6に そのリストに格納されている順番で合計値を転記します。

 最初のほうの 変数 w への格納は、どちらかで行ってください。

 Private Sub CommandButton1_Click()
    Dim w As Variant
    Dim i As Long
    Dim x As Long
    Dim k As String
    Dim d As String
    Dim v(1 To 3) As Variant
    Dim z As Variant

    w = Evaluate(ComboBox1.RowSource).Value     'RowSourceの場合
'    w = ComboBox1.List                         'List使用の場合

    For i = 1 To 3
        k = Me.Controls("ComboBox" & i).Value
        If k <> "" Then
            z = Application.Match(k, w, 0)
            If IsNumeric(z) Then
                If z <= UBound(v) Then
                    v(z) = v(z) + Val(Me.Controls("TextBox" & i).Value)
                End If
            End If
        End If
    Next

    For i = 4 To 6
        Me.Controls("TextBox" & i).Value = v(i - 3)
    Next

 End Sub

(β) 2016/07/25(月) 19:10


 ↑ もし、わかりにくければ

 Private Sub CommandButton1_Click()
    Dim ans4 As Variant
    Dim ans5 As Variant
    Dim ans6 As Variant
    Dim i As Long
    Dim k As String
    Dim d As Long

    For i = 1 To 3
        k = Me.Controls("ComboBox" & i).Value
        d = Val(Me.Controls("TextBox" & i).Value)
        Select Case k
            Case "りんご": ans4 = ans4 + d
            Case "みかん": ans5 = ans5 + d
            Case "バナナ": ans6 = ans6 + d
        End Select
    Next

    TextBox4.Value = ans4
    TextBox5.Value = ans5
    TextBox6.Value = ans6

 End Sub

(β) 2016/07/25(月) 19:26


 β様

 ご連絡が遅くなってしまい申し訳ございません。
 教えて頂いた方法で解決しました!
 本当にありがとうございました
(りんご) 2016/07/29(金) 16:37

コメント返信:

[ 一覧(最新更新順) ]


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