質問編集履歴

4

ソースにコメントをつけてみました

2020/03/21 00:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -70,35 +70,51 @@
70
70
 
71
71
 
72
72
 
73
+ ’リストA,Bを変数にセットする
74
+
73
75
  Set ws1 = Worksheets("リストA")
74
76
 
75
77
  Set ws2 = Worksheets("リストB")
76
78
 
77
79
 
78
80
 
79
- '※追加しました
81
+ 'リストBのセルB2にある日付をmydate1にセット
80
82
 
81
83
  myDate1 = ws2.Range("B2")
82
84
 
83
-
85
+ ’もし、リストBのセルB2が空白ならば、何もせず終了する
84
86
 
85
87
  If Not (IsDate(myDate1)) Then Exit Sub
86
88
 
87
-
89
+ ’リストA1を始点にする?
88
90
 
89
91
  List = ws1.Range("A1").CurrentRegion
92
+
93
+ ’ここは調べたのですが、理解できていません。リストの最終行をcntにセットしている??
90
94
 
91
95
  cnt = UBound(List, 1) + 1
92
96
 
93
97
 
94
98
 
99
+ ’iにリストBの品番先頭から最後をセット
100
+
95
101
  For i = 2 To ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row
102
+
103
+ ’jにリスト1行目から最終行をセット?
96
104
 
97
105
  For j = UBound(List, 1) To 2 Step -1
98
106
 
107
+
108
+
109
+ ’もし、リストBの品番とリストAの品番が一致したら(このソースで下から検索しているのか理解できていません)
110
+
99
111
  If ws2.Cells(i, 2).Value = List(j, 2) Then
100
112
 
113
+ ’行をコピーして、最終行に張り付ける
114
+
101
115
  ws1.Rows(j).Copy Destination:=ws1.Rows(cnt)
116
+
117
+ ’貼付け先行の日付をmydate1の値にセット
102
118
 
103
119
  ws1.Cells(cnt, 3).Value = myDate1
104
120
 

3

myDate1 = ws2.Range("B2")を追加しました。

2020/03/21 00:27

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  リストBの品番をリストAの品番の下から検索しヒットした行をコピーして(つまり最新行)、リストAの最終行に貼りつける。
6
6
 
7
- このとき、貼りつけ先行の登録日はリストBの登録日に書き換え、貼りつけ先の区分がBであればAに更新する。
7
+ このとき、貼りつけ先行の登録日はリストBセルB2の登録日に書き換え、貼りつけ先の区分がBであればAに更新する。
8
8
 
9
9
  リストA
10
10
 
@@ -76,6 +76,12 @@
76
76
 
77
77
 
78
78
 
79
+ '※追加しました
80
+
81
+ myDate1 = ws2.Range("B2")
82
+
83
+
84
+
79
85
  If Not (IsDate(myDate1)) Then Exit Sub
80
86
 
81
87
 

2

誤字

2020/03/21 00:08

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  下記リストがあります。
4
4
 
5
- リストBの品番をリストBの品番の下から検索しヒットした行をコピーして(つまり最新行)、リストAの最終行に貼りつける。
5
+ リストBの品番をリストAの品番の下から検索しヒットした行をコピーして(つまり最新行)、リストAの最終行に貼りつける。
6
6
 
7
7
  このとき、貼りつけ先行の登録日はリストBの登録日に書き換え、貼りつけ先の区分がBであればAに更新する。
8
8
 

1

全体的に修正

2020/03/20 15:15

投稿

退会済みユーザー
test CHANGED
File without changes
test CHANGED
@@ -1,36 +1,116 @@
1
1
  ### 前提・実現したいこと
2
+
3
+ 下記リストがあります。
4
+
5
+ リストBの品番をリストBの品番の下から検索しヒットした行をコピーして(つまり最新行)、リストAの最終行に貼りつける。
6
+
7
+ このとき、貼りつけ先行の登録日はリストBの登録日に書き換え、貼りつけ先の区分がBであればAに更新する。
8
+
9
+ リストA
10
+
11
+ 商品名/品番/登録日/区分
12
+
13
+ aaa/001/yyyymmdd/A
14
+
15
+ iii/002/yyyymmdd/A
16
+
17
+ uuu/003/yyyymmdd/C
18
+
19
+ iii/002/yyyymmdd/A
20
+
21
+ aaa/001/yyyymmdd/B
22
+
23
+ uuu/003/yyyymmdd/A
24
+
25
+
26
+
27
+
28
+
29
+ aaa/001/yyyymmdd/B
2
30
 
3
31
 
4
32
 
5
- ここに質問の内容を詳しく書いてください。
33
+ リストB
6
34
 
7
- (例)PHP(CakePHP)で●●なシステムを作っています。
35
+ 商品名/品番/登録日
8
36
 
9
- ■■な機能を実装中に以下のエラーメッセージが発生しました。
37
+ aaa/001/yyyymmdd
38
+
39
+ iii/002/yyyymmdd
40
+
41
+ uuu/003/yyyymmdd
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
10
50
 
11
51
 
12
52
 
13
53
  ### 発生している問題・エラーメッセージ
14
54
 
55
+ もともとあるマクロを修正して使っていたのですが、「貼付け元行の区分がAならば、貼付け先行の区分をBと書き換える」
15
56
 
57
+ 部分がうまくいかないです。
16
58
 
17
- ```
18
-
19
- エラメッセ
59
+ マクロ勉強中で、ソスの意味も理解できていないので、ソスの説明を頂けないでしょうか。
20
-
21
- ```
22
60
 
23
61
 
24
62
 
25
63
  ### 該当のソースコード
26
64
 
65
+ Sub Test()
66
+
67
+ Dim ws1 As Worksheet, ws2 As Worksheet, myDate1
68
+
69
+ Dim List, cnt As Long, i As Long, j As Long
27
70
 
28
71
 
29
- ```ここに言語名を入力
30
72
 
31
- ソーコード
73
+ Set ws1 = Worksheets("リトA")
32
74
 
75
+ Set ws2 = Worksheets("リストB")
76
+
77
+
78
+
79
+ If Not (IsDate(myDate1)) Then Exit Sub
80
+
81
+
82
+
83
+ List = ws1.Range("A1").CurrentRegion
84
+
85
+ cnt = UBound(List, 1) + 1
86
+
87
+
88
+
89
+ For i = 2 To ws2.Cells(ws2.Rows.Count, 2).End(xlUp).Row
90
+
91
+ For j = UBound(List, 1) To 2 Step -1
92
+
93
+ If ws2.Cells(i, 2).Value = List(j, 2) Then
94
+
95
+ ws1.Rows(j).Copy Destination:=ws1.Rows(cnt)
96
+
97
+ ws1.Cells(cnt, 3).Value = myDate1
98
+
99
+
100
+
101
+ cnt = cnt + 1
102
+
103
+ Exit For
104
+
33
- ```
105
+ End If
106
+
107
+ Next j
108
+
109
+ Next i
110
+
111
+
112
+
113
+ End Sub
34
114
 
35
115
 
36
116
 
@@ -38,7 +118,13 @@
38
118
 
39
119
 
40
120
 
121
+ 「貼付け元行の区分がAならば、貼付け先行の区分をBと書き換える」は、IF分を使って
122
+
123
+ if ws1.cells(j,4).value = "B" then
124
+
125
+ ws1.cells(cnt,4).value ="A"
126
+
41
- ここに問題に対して試したことを記載してください。
127
+ というソースでよいのかと思ったのですが、れをどこに追加すればよのかわかりません
42
128
 
43
129
 
44
130