電子書籍の厳選無料作品が豊富!

シート1には、
「番号・名前・種類」が書かれている表があります。
上記の項目は、B2から横にC2,D2と書かれていて
それぞれの内容は、2行目から下に書かれています。
そして、A列にチャックボックスがあります。

シート2には、「番号・名前・種類」の項目だけが書かれていて
内容は空欄の表があります。

シート1のチェックボックスをチェック✓した行のみ
シート2に出力したいです。

C言語をただいま勉強中で、いきなりVBAの話を振られて困っています。
どなたかご教示ください。よろしくお願いします。

A 回答 (2件)

こんにちは



チェックボックスはセルとは独立しているので、順序も行とは関係がありませんし、位置関係から割り出すのも少々面倒です。

処理しやすい方法として、チェックボックスにはセルにリンクする機能がありますので、その行のE列(他の列でも良い)などにリンクさせておいて、E列がチェックされている(=True)の行だけを順に転記してゆくというのが簡単だと思います。


とは言っても、位置関係から割り出しても、さほどのことではないので。
以下は、「フォームコントロール」のチェックボックスをシートに配置してある場合の例です。
ですので、「アクティブX」のチェックボックスは拾いません。
チェックボックスがアクティブXのものだったり混在していたりする場合も、基本的には同様の方法で処理することができるはずです。

Sub Sample()
Dim cb As Object, c As Range, u As Range
Dim x As Single, y As Single

Const s1 = "Sheet1"
Const s2 = "Sheet2"

With Worksheets(s1)
 x = .Columns(1).Width
 For Each cb In .CheckBoxes
  If cb.Value = 1 And cb.Left < x Then
   Set c = cb.TopLeftCell
   y = cb.Top + cb.Height / 2
   While y > c.Top + c.Height
    Set c = c.Offset(1)
   Wend
   If u Is Nothing Then Set u = c Else Set u = Union(u, c)
  End If
 Next cb
 If Not u Is Nothing Then Set u = Intersect(.Columns("B:D"), u.EntireRow)
End With

With Worksheets(s2)
 .UsedRange.Offset(1).ClearContents
 If Not u Is Nothing Then u.Copy Destination:=.Range("A2")
End With
End Sub
    • good
    • 0

C言語は上級者言語です


私はエンジニアという仕事柄、ほぼ毎日C言語と戯れていますがまだまだだと自覚しています。

対してVBAは初心者用言語です
正直誰でも出来るレベルの言語です

1日教材と睨めっこすれば
ある程度マスターできると思います

チェックボックスは、チェックボックスの状態を取得するライブラリがあります
そちらを使用し、条件分岐して下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!