質問編集履歴
1
コードを書いておらず申し訳ございません。まだまだ出来ていませんが調べて書いてみました。
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/
|
14
|
+
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-09-04/54c07700-77a2-4c7e-98cd-7e8f44f5257c.png)
|
14
|
-
![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-09-04/
|
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
|
|