所以,我试图弄清楚如何编写一个 Excel 宏来根据 B 列中包含的数字数量用 3 或 4 填充 C 列。
我已经上下搜索了正确的措辞,但我一直在做空。
基本上,我需要宏来查看 B 列中的位数。如果有 12 位,则该数字是 UPC,如果有 13 位,则该数字是 EAN。然后,我需要使用宏来填充 C 列,其中 UPC 为 3,EAN 为 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
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," "))