natekris8183
Board Regular
- Joined
- Mar 12, 2013
- Messages
- 156
I have the following data set. Certain values in the [SKU] have a double-quote (chr(34)) denoting the display size (e.g. 7"). When using the VBA code below, I get a type mismatch when I come to a SKU with a double-quote since I have to input the Chr(34) manually into the Evaluate function. Not sure if anyone has a work around. I cannot manipulate the data with a Replace for data integrity sake, since this moves over into POs and other systems it has to remain the same SKU. Essentially trying to see if there is a way it to not break the text string in the Evaluate function when the SKU possess a double-quote as a part of the text string. Thanks!
Excel 2012 | |||||||||
---|---|---|---|---|---|---|---|---|---|
A | B | C | D | E | F | G | |||
1 | Week | SKU | SKU Status | Source | Actual | Trend | Forecast | ||
2 | 1/5/15 | SKU1 | Active | Dealer | 19 | ||||
3 | 1/5/15 | SKU2 | Active | Dealer | 13 | ||||
4 | 1/5/15 | SKU3 | Active | Dealer | 157 | ||||
5 | 1/5/15 | SKU4 | Active | Dealer | 51 | ||||
6 | 1/5/15 | SKU5 | Active | Dealer | 123 | ||||
7 | 1/5/15 | SKU6 | Active | Dealer | 5 | ||||
8 | 1/5/15 | SKU7 | Active | Dealer | 70 | ||||
9 | 1/5/15 | SKU9 | Active | Dealer | 27 | ||||
10 | 1/5/15 | SKU16 | Active | Dealer | 3 | ||||
11 | 1/5/15 | SKU18 | Active | Dealer | 3 | ||||
12 | 1/5/15 | SKU19 | Active | Dealer | 20 | ||||
13 | 1/5/15 | SKU20 | Active | Dealer | 3 | ||||
14 | 1/5/15 | SKU21 | Active | Dealer | 3 | ||||
15 | 1/5/15 | SKU22 | Active | Dealer | 2 | ||||
16 | 1/5/15 | SKU23 | Active | Dealer | 5 | ||||
17 | 1/5/15 | SKU24 | Active | Dealer | 6 | ||||
18 | 1/5/15 | SKU29 | Active | Dealer | 1 | ||||
19 | 1/5/15 | SKU30 | Active | Dealer | 2 | ||||
20 | 1/5/15 | SKU35 | Active | Dealer | 6 | ||||
21 | 1/5/15 | SKU36 | Active | Dealer | 1 | ||||
22 | 1/5/15 | SKU37 | Active | Dealer | 1 | ||||
23 | 1/5/15 | SKU51 | Active | Dealer | 1 | ||||
24 | 1/5/15 | SKU52 | Active | Dealer | 2 | ||||
25 | 1/5/15 | SKU54 | Active | Dealer | 1 | ||||
26 | 1/5/15 | SKU61 | Active | Dealer | 6 | ||||
27 | 1/5/15 | SKU68 | Active | Dealer | 126 | ||||
28 | 1/5/15 | SKU69 | Active | Dealer | 109 | ||||
29 | 1/5/15 | SKU70 | Active | Dealer | 63 | ||||
30 | 1/5/15 | SKU71 | Active | Dealer | 172 | ||||
31 | 1/5/15 | SKU72 | Active | Dealer | 18 | ||||
32 | 1/5/15 | SKU73 | Active | Dealer | 271 | ||||
33 | 1/5/15 | SKU74 | Active | Dealer | 157 | ||||
34 | 1/5/15 | SKU75 | Active | Dealer | 406 | ||||
35 | 1/5/15 | SKU76 | Active | Dealer | 13 | ||||
36 | 1/5/15 | SKU77 | Active | Dealer | 18 | ||||
37 | 1/5/15 | SKU78 | Active | Dealer | 38 | ||||
38 | 1/5/15 | SKU79 | Active | Dealer | 3 | ||||
39 | 1/5/15 | SKU80 | Active | Dealer | 16 | ||||
40 | 1/5/15 | SKU81 | Active | Dealer | 23 | ||||
41 | 1/5/15 | SKU82 | Active | Dealer | 445 | ||||
42 | 1/5/15 | SKU83 | Active | Dealer | 529 | ||||
43 | 1/5/15 | SKU84 | Active | Dealer | 367 | ||||
44 | 1/5/15 | SKU85 | Active | Dealer | 336 | ||||
45 | 1/5/15 | SKU86 | Active | Dealer | 129 | ||||
46 | 1/5/15 | SKU87 | Active | Dealer | 329 | ||||
47 | 1/5/15 | SKU88 | Active | Dealer | 18 | ||||
48 | 1/5/15 | SKU89 | Active | Dealer | 3 | ||||
49 | 1/5/15 | SKU90 | Active | Dealer | 36 | ||||
50 | 1/5/15 | SKU91 | Active | Dealer | 60 | ||||
51 | 1/5/15 | SKU92 | Active | Dealer | 81 | ||||
52 | 1/5/15 | SKU93 | Active | Dealer | 105 | ||||
53 | 1/5/15 | SKU94 | Active | Dealer | 91 | ||||
54 | 1/5/15 | SKU95 | Active | Dealer | 18 | ||||
55 | 1/5/15 | SKU96 | Active | Dealer | 80 | ||||
56 | 1/5/15 | SKU121 | Active | Dealer | 1 | ||||
57 | 1/5/15 | SKU124 | Active | Dealer | 3 | ||||
58 | 1/5/15 | SKU133 | Active | Dealer | 276 | ||||
59 | 1/5/15 | SKU134 | Active | Dealer | 85 | ||||
60 | 1/5/15 | SKU137 | Active | Dealer | 140 | ||||
61 | 1/5/15 | SKU138 | Active | Dealer | 2 | ||||
62 | 1/5/15 | SKU140 | Active | Dealer | 55 | ||||
63 | 1/5/15 | SKU144 | Active | Dealer | 14 | ||||
64 | 1/5/15 | SKU145 | Active | Dealer | 4 | ||||
65 | 1/5/15 | SKU147 | Active | Dealer | 7 | ||||
66 | 1/5/15 | SKU148 | Active | Dealer | 25 | ||||
67 | 1/5/15 | SKU153 | Active | Dealer | 3 | ||||
68 | 1/5/15 | SKU154 | Active | Dealer | 117 | ||||
69 | 1/5/15 | SKU161 | Active | Dealer | 114 | ||||
70 | 1/5/15 | SKU162 | Active | Dealer | 10 | ||||
71 | 1/5/15 | SKU165 | Active | Dealer | 30 | ||||
72 | 1/5/15 | SKU167 | Active | Dealer | 2 | ||||
73 | 1/5/15 | SKU168 | Active | Dealer | 1 | ||||
74 | 1/5/15 | SKU171 | Active | Dealer | 201 | ||||
75 | 1/5/15 | SKU173 | Active | Dealer | 168 | ||||
76 | 1/5/15 | SKU174 | Active | Dealer | 3 | ||||
77 | 1/5/15 | SKU175 | Active | Dealer | 40 | ||||
78 | 1/5/15 | SKU179 | Active | Dealer | 5 | ||||
79 | 1/5/15 | SKU185 | Active | Dealer | 7 | ||||
80 | 1/5/15 | SKU188 | Active | Dealer | 60 | ||||
81 | 1/5/15 | SKU189 | Active | Dealer | 90 | ||||
82 | 1/5/15 | SKU192 | Active | Dealer | 3 | ||||
83 | 1/5/15 | SKU193 | Active | Dealer | 214 | ||||
84 | 1/5/15 | SKU194 | Active | Dealer | 76 | ||||
85 | 1/5/15 | SKU195 | Active | Dealer | 93 | ||||
86 | 1/5/15 | SKU197 | Active | Dealer | 73 | ||||
87 | 1/5/15 | SKU205 | Active | Dealer | 13 | ||||
88 | 1/5/15 | SKU207 | Active | Dealer | 11 | ||||
89 | 1/5/15 | SKU208 | Active | Dealer | 3 | ||||
90 | 1/5/15 | SKU209 | Active | Dealer | 1 | ||||
91 | 1/5/15 | SKU210 | Active | Dealer | 344 | ||||
92 | 1/5/15 | SKU211 | Active | Dealer | 145 | ||||
93 | 1/5/15 | SKU212 | Active | Dealer | 31 | ||||
94 | 1/5/15 | SKU214 | Active | Dealer | 9 | ||||
95 | 1/5/15 | SKU215 | Active | Dealer | 105 | ||||
96 | 1/5/15 | SKU216 | Active | Dealer | 53 | ||||
97 | 1/5/15 | SKU217 | Active | Dealer | 349 | ||||
98 | 1/5/15 | SKU219 | Active | Dealer | 91 | ||||
99 | 1/5/15 | SKU234 | Active | Dealer | 1 | ||||
Raw Data |
Code:
Function VBA_Trend()
Dim tbl As ListObject
Dim curDate As Date
Dim xRange, yRange, xNew As Range
Dim curTrend
Dim weekRng As Range
Dim SKURng As Range
Dim sourceRng As Range
Dim curDate1 As Integer
Application.ScreenUpdating = False
Set tbl = ActiveSheet.ListObjects("RawSalesDataTbl")
Set weekRng = ActiveSheet.Range("RawSalesDataTbl[Week '#]")
Set SKURng = ActiveSheet.Range("RawSalesDataTbl[SKU]")
Set sourceRng = ActiveSheet.Range("RawSalesDataTbl[Source]")
For i = 2 To tbl.Range.Rows.Count
curDate = Cells(i, Range("RawSalesDataTbl[Week '#]").Column).Value
prevdate = Evaluate("=DATEVALUE(" & Chr(34) & DateAdd("d", -2 * 7, curDate) & Chr(34) & ")")
curSKU = Cells(i, Range("RawSalesDataTbl[SKU]").Column).Value
curSource = Cells(i, Range("RawSalesDataTbl[Source]").Column).Value
If WorksheetFunction.CountIfs(Range("RawSalesDataTbl[Week '#]"), "<=" & prevdate, Range("RawSalesDataTbl[SKU]"), "=" & curSKU, Range("RawSalesDataTbl[Source]"), "=" & curSource) > 0 Then
rNum = WorksheetFunction.CountIfs(Range("RawSalesDataTbl[Week '#]"), ">=" & prevdate, Range("RawSalesDataTbl[Week '#]"), "<" & curDate, Range("RawSalesDataTbl[SKU]"), "=" & curSKU, Range("RawSalesDataTbl[Source]"), "=" & curSource)
mindate = Evaluate("=MIN(IF(RawSalesDataTbl[Week '#]<=" & prevdate & ",IF(RawSalesDataTbl[SKU]=" & Chr(34) & curSKU & Chr(34) & ",IF(RawSalesDataTbl[Source]=" & Chr(34) & curSource & Chr(34) & ",RawSalesDataTbl[Week '#]))))")
fRow = Evaluate("=MATCH(" & Chr(34) & mindate & curSKU & curSource & Chr(34) & ",RawSalesDataTbl[Week '#]&RawSalesDataTbl[SKU]&RawSalesDataTbl[Source],0)")
For Each c In Range(Cells(fRow, Range("RawSalesDataTbl[Week '#]").Column), Cells(i, Range("RawSalesDataTbl[Week '#]").Column))
If c.Value >= DateAdd("d", -2 * 7, curDate) Then
If c.Value < curDate Then
If Cells(c.Row, Range("RawSalesDataTbl[SKU]").Column).Value = curSKU Then
If Cells(c.Row, Range("RawSalesDataTbl[Source]").Column).Value = curSource Then
j = j + 1
If j <= rNum Then
If j < rNum Then
Cells(rNum - (rNum - (j + 1)), Range("'Raw Sales Data'!$T:$T").Column).Value = Cells(c.Row, Range("RawSalesDataTbl[Week '#]").Column).Value
Cells(rNum - (rNum - (j + 1)), Range("'Raw Sales Data'!$U:$U").Column).Value = Cells(c.Row, Range("RawSalesDataTbl[Actual]").Column).Value
Else
If j = rNum Then
Application.ScreenUpdating = True
Cells(rNum - (rNum - (j + 1)), Range("'Raw Sales Data'!$T:$T").Column).Value = Cells(c.Row, Range("RawSalesDataTbl[Week '#]").Column).Value
Cells(rNum - (rNum - (j + 1)), Range("'Raw Sales Data'!$U:$U").Column).Value = Cells(c.Row, Range("RawSalesDataTbl[Actual]").Column).Value
Cells(rNum - (rNum - (j + 2)), Range("'Raw Sales Data'!$T:$T").Column).Value = curDate
Set xRange = Range(Cells(2, Range("'Raw Sales Data'!$U:$U").Column), Cells(rNum - (rNum - (j + 1)), Range("'Raw Sales Data'!$U:$U").Column))
Set yRange = Range(Cells(2, Range("'Raw Sales Data'!$T:$T").Column), Cells(rNum - (rNum - (j + 1)), Range("'Raw Sales Data'!$T:$T").Column))
Set xNew = Range(Cells(j + 2, Range("'Raw Sales Data'!$T:$T").Column), Cells(rNum - (rNum - (j + 2)), Range("'Raw Sales Data'!$T:$T").Column))
Cells(i, Range("RawSalesDataTbl[Trend]").Column).Value = Application.WorksheetFunction.Trend(xRange, yRange, xNew)
Range(Cells(2, Range("'Raw Sales Data'!$T:$T").Column), Cells(j + 2, Range("'Raw Sales Data'!$u:$u").Column)).Clear
j = Clear
xRange = Clear
yRange = Clear
xNew = Clear
End If
End If
End If
End If
End If
End If
End If
Next c
Else
Cells(i, Range("RawSalesDataTbl[Trend]").Column).Value = Cells(i, Range("RawSalesDataTbl[Actual]").Column).Value
End If
Next i
Application.ScreenUpdating = True