- ベストアンサー
チェックボックスに関して(vba)
VBA初心者のためコードを教えてくれますと助かります。 シート1にリストが記載されています。 チェックボックスで選択されている値を取得して(シート1のA列の商品名から)、チェックされている値のデータを転記するようなコードを作成したいと思っております。(別途シート追加する) 知識不足でうまく動きません。よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
チェックボックスの横のりんごとかがCaptionに見えるのでCaptionだとして 以下のどちらかで試してみてください。 チェックボックスの順に固まってSheet2に転記するパターン Sub Test() Dim ws1 As Worksheet, ws2 As Worksheet Dim obj As OLEObject Dim i As Long, LastRow1 As Long, LastRow2 As Long Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") For Each obj In ws1.OLEObjects If obj.progID = "Forms.CheckBox.1" Then If obj.Object.Value = True Then For i = 6 To ws1.Cells(Rows.Count, "A").End(xlUp).Row If ws1.Cells(i, "A").Value = obj.Object.Caption Then LastRow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row ws2.Cells(LastRow2 + 1, "A").Resize(1, 3).Value = ws1.Cells(i, "A").Resize(1, 3).Value End If Next End If End If Next Set ws1 = Nothing Set ws2 = Nothing End Sub Sheet1の出現順にSheet2に転記するパターン Sub Test2() Dim ws1 As Worksheet, ws2 As Worksheet Dim obj As OLEObject Dim i As Long, LastRow1 As Long, LastRow2 As Long Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") For i = 6 To ws1.Cells(Rows.Count, "A").End(xlUp).Row For Each obj In ws1.OLEObjects If obj.progID = "Forms.CheckBox.1" Then If obj.Object.Value = True Then If ws1.Cells(i, "A").Value = obj.Object.Caption Then LastRow2 = ws2.Cells(Rows.Count, "A").End(xlUp).Row ws2.Cells(LastRow2 + 1, "A").Resize(1, 3).Value = ws1.Cells(i, "A").Resize(1, 3).Value End If End If End If Next Next Set ws1 = Nothing Set ws2 = Nothing End Sub
その他の回答 (4)
- kkkkkm
- ベストアンサー率66% (1734/2604)
もし、どちらかのデータの前後にスペースがあるとしたら、その場合一致と認識しないので If ws1.Cells(i, "A").Value = obj.Object.Caption Then を If Trim(ws1.Cells(i, "A").Value) = Trim(obj.Object.Caption) Then に変更して試してみてください。
- kkkkkm
- ベストアンサー率66% (1734/2604)
> Sub Test2()なのですがりんごも選択したらシート2に追加させたいのですが 追加されると思いますが・・・ チェックボックスのCaptionはりんごなんですよね。
- m5048172715
- ベストアンサー率16% (860/5261)
思い出した。自分のPCで作ったコードを、社内の別PCへ持って行ったら、だめだった。 VBAは、別 or そのPCには無いチェックボックスをハンドリングしようとしたっけ。
- MT765
- ベストアンサー率57% (2087/3626)
個人的にはシートにコントロールを配置するよりも、VBAのユーザーフォームを作ったほうが簡潔で分かりやすいと思います。 1から全部お教えするのはなかなか厳しいので、まずはご自分で進めてみて、つまづいたら質問されると良いと思います。 下記のサイト等で確認してみてください。 【VBA】チェックボックスの値取得と判定、連動させる方法【複数の判定とイベントを使う】 https://daitaideit.com/vba-checkbox/
補足
コードまで記載いただきありがとうございます。 確認したのですが、、 Sub Test2()なのですがりんごも選択したらシート2に追加させたいのですが、どうすればいよいでしょうか?