質問するログイン新規登録

回答編集履歴

2

追記

2021/03/22 14:37

投稿

jinoji
jinoji

スコア4592

answer CHANGED
@@ -62,4 +62,59 @@
62
62
  .Value = EvaArr
63
63
  End With
64
64
 
65
+ ```
66
+
67
+ ---
68
+ <追記>
69
+
70
+ ```VBA
71
+ Private Function PutDataEx2(ws As Worksheet, Dat As Variant, EvaluationSheetName As Variant) As Boolean
72
+ Dim TargetRo As Long
73
+ Dim Col As Integer, strDat As String
74
+
75
+ TargetRo = getLastRoExTempRow(ws) + 1
76
+ If TargetRo < 9 Then TargetRo = 9
77
+
78
+ Call CopyTemplateRow(ws, TargetRo)
79
+
80
+ Dim arr(1 To 44) '格納用配列
81
+ For Col = 1 To 44
82
+ Select Case Col
83
+ Case 1
84
+ If Dat(14) = "継続" Then
85
+ strDat = "2"
86
+ ElseIf Dat(14) = "新規" Then
87
+ strDat = "1"
88
+ Else
89
+ strDat = ""
90
+ End If
91
+ arr(Col) = strDat
92
+ Case 2
93
+ If Dat(15) = "外注" Then
94
+ strDat = "2"
95
+ ElseIf Dat(15) = "資材" Then
96
+ strDat = "1"
97
+ Else
98
+ strDat = ""
99
+ End If
100
+ arr(Col) = strDat
101
+
102
+
103
+ Case 44 '前一年間の取引実績
104
+ arr(Col) = Dat(Col - 4)
105
+ Case Else
106
+ arr(Col) = Dat(Col - 3) 'Dat(Col - 5)
107
+ End Select
108
+ Next
109
+
110
+ '格納
111
+ With ws.Rows(TargetRo).Resize(, 44)
112
+ .Value = arr
113
+ '.Font.Name = "Meiryo UI"
114
+ End With
115
+
116
+ PutDataEx2 = True
117
+
118
+ End Function
119
+
65
120
  ```

1

追記

2021/03/22 14:37

投稿

jinoji
jinoji

スコア4592

answer CHANGED
@@ -20,4 +20,46 @@
20
20
  '↓
21
21
  Dat(4) = dic(SheetNames)(12, 11) '業種
22
22
 
23
+ ```
24
+ ---
25
+ <追記>
26
+ 転記元は1ファイルに100シート程度、転記先は1シートに100行程度、という情報から、
27
+ 転記先の1行と転記元の1シートが対応づいていると仮定すると、
28
+ 後続の処理は以下の感じにすればいいのかな、という想像をしています。
29
+
30
+ ```VBA
31
+ '転記先シート
32
+ Dim EvaluationSheet As Worksheet
33
+ Set EvaluationSheet = ThisWorkbook.Worksheets(1)
34
+
35
+ With EvaluationSheet
36
+ Dim startRow, endRow
37
+ startRow = 10 ’たとえば10行目からがデータ行の場合
38
+ endRow = .Cells.SpecialCells(xlCellTypeLastCell).Row
39
+
40
+ '転記先データ範囲
41
+ Dim EvaRange As Range, EvaArr As Variant
42
+ Set EvaRange = .Range("A1").Resize(endRow, 44)
43
+
44
+ '転記先の値を転記先用配列に取得
45
+ EvaArr = EvaArr.Value
46
+
47
+ '順次処理
48
+ Dim TargetRo, shtName
49
+ For TargetRo = startRow To endRow
50
+
51
+ '転記元シート名の決定
52
+ shtName = EvaArr(TargetRo, 1)
53
+
54
+ 'シート名をキーに連想配列から配列を取り出し、転記先用配列の各列の値をセット
55
+ EvaArr(TargetRo, 4) = dic(shtName)(2, 13) '
56
+ EvaArr(TargetRo, 5) = dic(shtName)(12, 11) '業種
57
+ '
58
+ EvaArr(TargetRo, 44) = dic(shtName)(33, 22) 'xx
59
+ Next
60
+
61
+ '転記先用配列の値をシートに反映
62
+ .Value = EvaArr
63
+ End With
64
+
23
65
  ```