所以,我试图弄清楚如何编写一个Excel宏来填充列3或4,具体取决于列B中包含的数量的数量。Excel宏:如果列B包含12位数,那么列C等于3?
我已经搜索了上下的对此有正确的措辞,但我一直不了了之。
基本上,我需要宏看的在列B的数字位数如果有12位数字,则数量是一个UPC,如果有13然后数量是EAN。然后我需要这个宏来为C列填充3个UPCs和一个4个EANs。这需要针对电子表格中整个行的范围。
有没有人有任何想法?提前感谢!
所以,我试图弄清楚如何编写一个Excel宏来填充列3或4,具体取决于列B中包含的数量的数量。Excel宏:如果列B包含12位数,那么列C等于3?
我已经搜索了上下的对此有正确的措辞,但我一直不了了之。
基本上,我需要宏看的在列B的数字位数如果有12位数字,则数量是一个UPC,如果有13然后数量是EAN。然后我需要这个宏来为C列填充3个UPCs和一个4个EANs。这需要针对电子表格中整个行的范围。
有没有人有任何想法?提前感谢!
您可以通过使用Len()
这样Len(Range("A1"))
例如获得一个单元格的值的长度。
现在你只需要遍历你的专栏,并期待在每个值。如果你寻找最后使用的单元格,并且只通过该范围循环,你的循环将更快。
这里是我会怎么做:
sub TestUPC()
With ActiveSheet
LastRow = .Cells(.Rows.Count, "B").End(xlUp).Row
End With
Dim rRng As Range
Set rRng = Range("B1:B" & LastRow)
For Each cell In rRng.Cells
If Len(Trim(cell))=12 then
cell.Offset(0, 1).Value = 3
ElseIf Len(Trim(cell))=13 then
cell.Offset(0, 1).Value = 4
End If
Next
End Sub
的细胞公式看起来是这样的:
=IF(LEN(B1)=12,3,IF(LEN(B1)=13,4," "))
正如评论建议您可能要测试空间取决于您的数据:
=IF(LEN(TRIM(A1))=12,3,IF(LEN(TRIM(A1))=13,4," "))
您不需要使用脏旧循环,试试这个(得更快,如果你有大量的行):
Sub HTH()
With Sheet1.Range("B1", Cells(Rows.Count, "B").End(xlUp)).Offset(, 1)
.Formula = "=IF(LEN(TRIM(B1))=12,3,IF(LEN(TRIM(B1))=13,4,""""))"
.Value = .Value
End With
End Sub
或者使用用户定义的函数,它在当数据变化的优势列B被更新。
更好的是只使用一个公式,你并不真正需要的VBA。
替代VBA方法(循环快速路):
Sub HTH()
Dim vArray As Variant
Dim lCnt As Long
With Range("B1", Cells(Rows.Count, "B").End(xlUp))
vArray = .Value
For lCnt = 1 To UBound(vArray, 1)
Select Case Len(Trim(vArray(lCnt, 1)))
Case 12: vArray(lCnt, 1) = 3
Case 13: vArray(lCnt, 1) = 4
Case Else:
End Select
Next lCnt
.Offset(, 1).Value = vArray
End With
End Sub
我建议加入“微调”来之前/号码后删除任何空格。否则,一个空格字符可能会欺骗你以为它是一个EAN,当它真是一个UPC:'= IF(LEN(TRIM(A1))= 12,3,IF(LEN(TRIM(A1))= 13,4 ,“”))'(VBA中有类似的功能。) – Roberto
谢谢!这工作就像一个魅力!我没有使用修剪功能,因为我们的库存程序导出数据。我找不到任何空格。 以防万一,将VBA代码是如何测试的空间?我倾向于更喜欢使用VBA宏而不是单元格,因为我们每天都要下载这个文件的新版本。使用宏,我可以将它们保存在单独的电子表格中,并与此库存文件一起打开。 再次感谢!我非常感谢Stumptown的帮助! =) – Lonememe