質問編集履歴

1

コードを書いておらず申し訳ございません。まだまだ出来ていませんが調べて書いてみました。

2022/09/04 06:49

投稿

green_frog
green_frog

スコア2

test CHANGED
@@ -1 +1 @@
1
- ExcelVBA、Sheet1からSheet2へ特定のデータを特定の位置にコピーするシステム
1
+ ExcelVBA、Sheet1からSheet2へ特定のデータを特定の位置にコピーするシステム
test CHANGED
@@ -3,6 +3,7 @@
3
3
  ExcelVBAでSheet1の特定のデータをSheet2にコピーするシステムを作成することになりました。
4
4
  しかし、プログラミングの知識がほとんど皆無であり、また社内など周囲に詳しい方がおらず
5
5
  困っているため、どうか助けていただきたいです。
6
+ 分かりやすい説明が出来ず、申し訳ございません。
6
7
 
7
8
  ### 実現したいこと
8
9
 
@@ -10,14 +11,58 @@
10
11
 
11
12
  処理は、Sheet1とSheet2の同じ案件番号に、Sheet1から取得した月累計時間データを、Sheet2の8月の列(F列)にコピーするようにしたいです。
12
13
  Sheet1の月累計時間が空欄の場合はSheet2も空欄のままでコピーする予定です。
13
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-09-04/e830c5cc-b341-49a1-a802-2d15d7df3aa9.png)
14
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-09-04/54c07700-77a2-4c7e-98cd-7e8f44f5257c.png)
14
- ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-09-04/b773e771-d0de-4273-a68d-1f9abba761d2.png)
15
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-09-04/115f379a-bed7-4e95-8d0a-4bb1b09a7ae1.png)
16
+
17
+ 画像で説明すると、Sheet1(1枚目の画像)のB11と、Sheet2(2枚目の画像)のA5の値を比較する。
18
+ 同値のため、Sheet1のC11の値をSheet2のF5にコピーする。
19
+ ような感じにします。
20
+
21
+ また、Sheet2のテキストボックスに「8」と入力したらSheet2のF列に、
22
+ 「9」と入力したらSheet2のG列にコピーできるようにしたいです。
15
23
 
16
24
  ### 発生している問題
17
25
 
18
26
  使用するExcelファイルは、毎月新規作成ではなく、上書きしています。
19
- そのため、案件番号が追記されたり、削除されたりします。
27
+ そのため、Sheet1は、案件番号が追記されたり、削除されたりします。Sheet2の案件番号の方は、追記されたら削除することはないです。
20
- 私の考えでは、ループでSheet1とSheet2の案件番号が等しかったら、Sheet1の月累計時間をSheet2の該当箇所にコピー → 次のセルへ というふうに考えているのですが、ループをしたい始まりのセル番号が固定値でない為、どのようにすればよいか見当もつきません。
28
+ 私の考えでは、ループでSheet1とSheet2の案件番号が等しかったら、Sheet1の月累計時間をSheet2の該当箇所にコピー → 次のセルへ というふうに考えているのですが、
29
+ Sheet1はループをしたい始まりのセル番号(画像のS1=11)が必ずしも固定値でない為、
30
+ どのように記述すればよいか見当もつきません。
31
+ 例えば、月によってSheet1は、B11からやB20、B31などから始まる月があります。
32
+
33
+ ```VBA
34
+ Private Sub 集計btn_Click()
35
+
36
+ '変数の宣言
37
+ Dim S1 As Long 'Sheet1の案件番号の列をカウント
38
+ Dim S2 As Long 'Sheet2の案件番号の列をカウント
39
+ Dim Sheet1 As Worksheet
40
+ Dim Sheet2 As Worksheet
41
+
42
+ Set Sheet1 = Sheets("Sheet1")
43
+ Set Sheet2 = Sheets("Sheet2")
44
+
45
+ 'Sheet1 D案件の採番1からD案件の最終行までループしたい
46
+ '※毎回(B11)とは限らない。
47
+ For S1 = 11 To Sheet1.Cells(Rows.Count, 2).End(xlUp).Row
48
+
49
+ 'Sheet2 (A5:最終行) ループ
50
+ For S2 = 5 To Sheet2.Cells(Rows.Count, 1).End(xlUp).Row
51
+
52
+ 'Sheet1と同じ案件番号だったら、、、
53
+ If Sheet1.Cells(S1, 2) = Sheet2.Cells(S2, 1) Then
54
+
55
+ 'Sheet2にデータを転記
56
+ Sheet2.Cells(S2, 5) = Sheet1.Cells(S1, 3)
57
+
58
+ End If
59
+
60
+ Next S2
61
+
62
+ Next S1
63
+
64
+ End Sub
65
+ ```
21
66
 
22
67
  ### 補足情報(FW/ツールのバージョンなど)
23
68