Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 8.1 Pro : Excel 2007)
チェックボックスの判断
投稿日時: 19/12/12 17:50:09
投稿者: FILETUBE

こんばんは。
1つ教えて下さい。
 
データのDATA.xlsxがあります。
品番 カラー 単価
A 1 100
A 2 200
A 3 300
A 4 400
A 5 500
B 1 150
 
 
別のエクセルからユーザーフォームを表示させ品番Aを指定すると
 
ユーザーフォームにカラーのラベルが10個有り
カラーをラベルにセットします。
左に同じ数のチェックボックスを
用意し、発行ボタンをクリックするとチェックしたカラーの
データを別の表(TNK.xlsx)に転記します。
 
例えば
 
1,2,3カラーをチェックした場合
 
 
TNK.xlsxは
 
品番 A
 
カラー 単価
1 100
2    200
3 300
 
のように転記したいのです。
 
 
品番を指定してカラーを表示するところまでできました。
 
発行ボタンをクリックしたらチェックされている品番、カラーと同じ
データをDATA.xlsxから取得したいのです。
 
このようなこと可能でしょうか?

回答
投稿日時: 19/12/13 10:23:32
投稿者: WinArrow
投稿者のウェブサイトに移動

説明の内容は、ほとんど理解できませんので
質問タイトルにある「チェックボックスの判断」
をチェックボックスにチェックが入っているか判断したい
と解釈して
 
If Me.CheckBox1.Value THen
  'チェックが入ってtる
Else
  'チェックがはいっていない
End If
 
というコードを紹介します。

回答
投稿日時: 19/12/13 14:34:57
投稿者: 半平太

>このようなこと可能でしょうか?
 
可能です・・けど。
 
1.チェックボックスとラベルの対応関係が分からないと始まらないですよ。
    多分、CheckBox1ならLabel1、と言う様な関係なのでしょうが、回答側の推測でしかない。
 
  まずは、あるチェックボックスに対応するのはどのラベルなのか分かる工夫をしてください。
 
 
2.次に、ループでCheckBoxを順に見て行き、チェックが入っていたら、
    対応するラベルのカラーを取得する。
 
  追加情報として単価が必要になりますが、その時になって単価を調べに行くのは面倒なので、
    この時、ついでに単価も調べ、ラベルのTagプロパティにメモして置けば、それを取り出せばいい。
  ↓
>「品番を指定してカラーを表示するところまでできました。 」
 
以上が処理できれば、特に難しいところは無さそう。
 

回答
投稿日時: 19/12/14 10:32:29
投稿者: コレ

 こんにちは
 他の方法として、
 ListViewコントロールのCheckBoxプロパティを使うのはどうですか?
 
 簡単な使用例としてコードを載せておきます。
UserFormにListViewとCommandButtonをそれぞれ一つずつ配置すると動きます。
 
Private Sub CommandButton1_Click()
    Dim i As Integer
     
    For i = 1 To Me.ListView1.ListItems.Count
        MsgBox "Index" & Me.ListView1.ListItems(i).Index & ":" & Me.ListView1.ListItems(i).Checked
    Next i
     
End Sub
 
Private Sub UserForm_Initialize()
     
    With Me.ListView1
        .CheckBoxes = True
        .Gridlines = True
        .View = lvwReport
         
        .ColumnHeaders.Add Text:="品番", Width:=100
        .ColumnHeaders.Add Text:="カラー", Width:=50
        .ColumnHeaders.Add Text:="単価", Width:=50
         
        With .ListItems.Add(Index:=1, Text:="A")
            .ListSubItems.Add Text:=1
            .ListSubItems.Add Text:=100
        End With
         
        With .ListItems.Add(Index:=2, Text:="A")
            .ListSubItems.Add Text:=2
            .ListSubItems.Add Text:=500
        End With
         
    End With
     
End Sub

投稿日時: 19/12/14 12:58:46
投稿者: FILETUBE

大変丁寧な回答ありがとうございます。
Checkbox1に対してlabel1になります。
Listviewは使ったことがありませんでしたので
とても良いアドバイスをありがとうございました。
 
検証して投稿させて頂きます。

投稿日時: 19/12/19 18:02:33
投稿者: FILETUBE

  こんばんは。
ListViewコントロールの方が全然使いやすいですね。
大変参考になりました。