我将数据存储在三列Excel中。
Column A: Product no,
Column B: Production site
Column C: Sales code
我需要检查每个产品编号
的销售代码中前6位的一致性例如,对于所有产品没有的产品。 1,我需要检查销售代码中的前6位是否相等。如果产品的所有销售代码都没有。 1相等,程序必须在D列中为“是”编写Y
。如果销售代码不同,则程序必须在D列中为“否”写入N
。
Product;Site;Sales code
1;A;86451001
1;B;864510.3
1;C;86451004
1;D;86451001
1;E;864510.3
1;F;86451004
1;G;86451001
1;H;864510.3
1;I;86451004
1;J;86451001
1;K;874507.3
1;L;87450704
1;M;87450701
1;N;885656.3
1;O;88565604
2;A;86451001
2;B;864510.3
2;C;86451004
2;D;86451001
2;E;864510.3
2;F;88565604
2;G;88565601
2;H;864510.3
2;I;86451004
2;J;86451001
2;K;874507.3
2;L;87450704
2;M;87450701
2;N;885656.3
3;A;88565604
3;B;86451001
3;C;864510.3
3;D;86451004
3;E;87450704
我需要检查一致性,因为我的数据集很大。我是VBA的初学者,所以我不知道如何做到这一点。
你有任何提示吗?
答案 0 :(得分:1)
我们需要一个辅助列,D1 = Product_SaleCode6
D2=A2&"_"&LEFT(C2,6)
然后,E列将成为您的测试列,E1 =测试
E2=IF(COUNTIF($A$2:$A$35,A2)=COUNTIF($D$2:$D$35,D2),"Y","N")
填写所有行的D2,E2公式。
我要做的是,检查产品数量是否与该产品组的销售代码的6位数相同。
答案 1 :(得分:0)
以下是您可以做的事情:
逐行扫描行
当您识别新的组存储时,其产品编号和销售短代码(前6个字符)以及从
开始的范围检查组的每个后续行,以查看代码是否一致
如果没有将该组标记为已损坏并继续
在组的末尾回头查看该组的第一行,并为该组的每一行写下组标志“Y”或“N”
检查当前行是否为空,是“停止扫描”
否则重置下一组的值并继续扫描
这是一个快速且不太脏的实现(使用您的小数据集进行测试,但当然在使用之前进行尽职调查;)):
Sub check()
Dim sh As Worksheet
Set sh = Sheets(1)
Dim r As Range
Set r = sh.Range("A1")
Dim currentProduct As Integer
Dim currentProductSalesCode As String
Dim currentProductStart As Range
Dim ok As Boolean
currentProduct = -1
Do
' Are we changing of product group?
If r.Value2 <> currentProduct Then
' Check that this is not the beginning
If currentProduct <> -1 Then
Dim i As Integer
i = 0
' Apply the flag to all the rows in the current group
Do
If currentProductStart.Offset(i, 0) <> currentProduct Then
Exit Do
End If
Dim flagOutput As Range
Set flagOutput = currentProductStart.Offset(i, 3)
If ok Then
flagOutput = "Y"
Else
flagOutput = "N"
End If
i = i + 1
Loop
If IsEmpty(r) Then
Exit Do
End If
End If
'Reset the values for the current group
currentProduct = r.Value2
currentProductSalesCode = Left(r.Offset(0, 2).Text, 6)
Set currentProductStart = r
ok = True
Else
' If the current row code is not equal to the first row of the group code
If Left(r.Offset(0, 2).Text, 6) <> currentProductSalesCode Then
ok = False
End If
End If
Set r = r.Offset(1, 0)
Loop
End Sub
答案 2 :(得分:0)
这是一个非常适合数据透视表的应用程序。例如,添加一个带有公式=LEFT(C2,6)
的列(“Sales”)和一个如下所示的数据透视表布局,可以立即确定样本中Y
将适用于所有情况(每种情况下计数为1)(假设网站可能有所不同):
可以使用不同的公式进行其他验证,以适应不同的列。