前提
ExcelVBAでSheet1の特定のデータをSheet2にコピーするシステムを作成することになりました。
しかし、プログラミングの知識がほとんど皆無であり、また社内など周囲に詳しい方がおらず
困っているため、どうか助けていただきたいです。
分かりやすい説明が出来ず、申し訳ございません。
実現したいこと
まず、ExcelのSheet2のテキストボックスに「8」と入力し、「集計」ボタンを押下します。
処理は、Sheet1とSheet2の同じ案件番号に、Sheet1から取得した月累計時間データを、Sheet2の8月の列(F列)にコピーするようにしたいです。
Sheet1の月累計時間が空欄の場合はSheet2も空欄のままでコピーする予定です。
画像で説明すると、Sheet1(1枚目の画像)のB11と、Sheet2(2枚目の画像)のA5の値を比較する。
同値のため、Sheet1のC11の値をSheet2のF5にコピーする。
ような感じにします。
また、Sheet2のテキストボックスに「8」と入力したらSheet2のF列に、
「9」と入力したらSheet2のG列にコピーできるようにしたいです。
発生している問題
使用するExcelファイルは、毎月新規作成ではなく、上書きしています。
そのため、Sheet1は、案件番号が追記されたり、削除されたりします。Sheet2の案件番号の方は、追記されたら削除することはないです。
私の考えでは、ループでSheet1とSheet2の案件番号が等しかったら、Sheet1の月累計時間をSheet2の該当箇所にコピー → 次のセルへ というふうに考えているのですが、
Sheet1はループをしたい始まりのセル番号(画像のS1=11)が必ずしも固定値でない為、
どのように記述すればよいか見当もつきません。
例えば、月によってSheet1は、B11からやB20、B31などから始まる月があります。
VBA
1Private Sub 集計btn_Click() 2 3 '変数の宣言 4 Dim S1 As Long 'Sheet1の案件番号の列をカウント 5 Dim S2 As Long 'Sheet2の案件番号の列をカウント 6 Dim Sheet1 As Worksheet 7 Dim Sheet2 As Worksheet 8 9 Set Sheet1 = Sheets("Sheet1") 10 Set Sheet2 = Sheets("Sheet2") 11 12 'Sheet1 D案件の採番1からD案件の最終行までループしたい 13 '※毎回(B11)とは限らない。 14 For S1 = 11 To Sheet1.Cells(Rows.Count, 2).End(xlUp).Row 15 16 'Sheet2 (A5:最終行) ループ 17 For S2 = 5 To Sheet2.Cells(Rows.Count, 1).End(xlUp).Row 18 19 'Sheet1と同じ案件番号だったら、、、 20 If Sheet1.Cells(S1, 2) = Sheet2.Cells(S2, 1) Then 21 22 'Sheet2にデータを転記 23 Sheet2.Cells(S2, 5) = Sheet1.Cells(S1, 3) 24 25 End If 26 27 Next S2 28 29 Next S1 30 31End Sub
補足情報(FW/ツールのバージョンなど)
Excel2016 64bit、Windows10
フォームのボタンとテキストボックスはActive Xコントロールで作成しています。
回答1件
あなたの回答
tips
プレビュー