• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:行数が変化する表をチェックボックスにチェックが入っている箇所のみ増やし)

エクセルVBAで行数が変化する表の特定箇所を増やす方法

このQ&Aのポイント
  • エクセルVBAを使用して、行数が変化する表の特定箇所を増やす方法について教えてください。
  • 具体的には、チェックボックスにチェックが入っている箇所のみ行を増やし、コピー元セルの内容をクリアする方法を知りたいです。
  • また、増やす行数が事前に決定していない場合でも、チェックボックスにチェックを入れることで必要な行数分増やすことができるプログラムを作りたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • mt2008
  • ベストアンサー率52% (885/1701)
回答No.2

シートに貼り付ける事が出来るチェックボックスには2種類あってどちらなのか明記がありませんでしたので、A列にはチェックボックスではなく、1/0の数値が入っているとしました。 Sub Sample()   For i = 5 To ActiveSheet.Cells.SpecialCells(xlLastCell).Row     If Cells(i, 1) = 1 Then       '結合セルの左上セルか確認       If (Cells(i, 1).MergeArea.Column = Cells(i, 1).Column) * (Cells(i, 1).MergeArea.Row = Cells(i, 1).Row) Then         'コピーと挿入         With Range(Cells(i, 4), Cells(i + Range("A" & i).MergeArea.Count - 1, 7))           .Copy           .Insert Shift:=xlToRight         End With         Range(Cells(i, 4), Cells(i, 7)).ClearContents '○月の部分をクリア         Range(Cells(i + 1, 4), Cells(i + Range("A" & i).MergeArea.Count - 2, 6)).ClearContents '合計以外をクリア              End If     End If   Next i End Sub

greyseal
質問者

お礼

ありがとうございました。 行数が変化する表でもコピペによる挿入がちゃんと出来るようになりました。 いつも本当にありがとうございます。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.1

VBAでも相当高度のことを聞いているので、ここに質問するレベルでは難しいと思う。当面人間の操作で対応せねばならないように思う。 コントロールを使い出だしたらVBAが必須です。そこまでの質問者は認識はあるとして (1)イベントを捉えることについて チェックボックスのクリックイベントを捕らえなければならないが、多数の会社がある=チェックボックスが沢山ある場合はどのチェックボックスにチェックが入れられたか判別するコードを書くのが難しい。 コントロール配列という考えの、イベント版をVBAコードで作れると、コードが簡単になるが、VBAではむつかしい。 会社の数=チェックボックスの数だけほぼ同じコードを並べるつもりなら、考えは易しいが、増えたときなどコードの追加が必要になるように思う。 セルとリンクさせてLinkedCellの値変化で捉えようとしたがChangeイベントはマウスクリックしか捕らえないようだ。 (2)行挿入する位置が 会社列の結合セルの一番下の行の次になると思うが、これも結合セルの割り出し方、行範囲をとらえるなど初心者には難しい。 参考までに Sub test01() MsgBox Range("B2").MergeArea.Address End Sub 結合セルのどのセルをRange("B2").に指定してもMergeArea.は、属する結合セル全体セルを捉える。 その他参考になるコードを挙げてみる。 セル結合はエクセルバージョンの中間から出来たもので、VBAとかで色々扱いが難しい。 初心者は良く使うようだが、扱いが難しくなる。 同一会社名は白色書体設定で2行以下を見えにくくして我慢すべきか。 市販のVBAの本にもセル結合の扱いは余り触れられていない。 WEBには少数にしろ関連記事があるので調べる。 Sub test01() MsgBox Range("B2").MergeArea.Address '所属結合セル範囲番地 MsgBox Range("B2").MergeArea.Rows.Count ''結合セル行数 mr = Range("B2").MergeArea.Rows.Count '結合セル行数 MsgBox Range("B2").MergeArea.Select MsgBox Range("B3").MergeArea.Cells(mr, 1).Address MsgBox Range("B2").MergeArea.SpecialCells(xlCellTypeLastCell).Address Range("B3").MergeArea.Cells(mr, 2).Select '非結合列指定 Selection.EntireRow.Insert '結合範囲の最下行の下に行挿入 End Sub

greyseal
質問者

お礼

いつもありがとうございます。 大変勉強になりました^^