所以,我正在试图找出如何编写一个Excel宏来填充C列中的3或4,具体取决于B列中包含的数字量。
我已经搜索到了正确的措辞,但我一直在做空。
基本上,我需要宏来查看B列中的位数。如果有12位数,则该数字为UPC,如果有13,则该数字为EAN。然后,我需要宏来填充C列,其中3个用于UPC,4个用于EAN。这需要适用于电子表格中的整个行范围。
有没有人有任何想法?非常感谢提前!
答案 0 :(得分:1)
你不需要使用一个脏的旧循环,尝试这个(如果你有很多行,要快得多):
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
答案 1 :(得分:0)
例如,您可以使用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
in in cell equation看起来像这样:
=IF(LEN(B1)=12,3,IF(LEN(B1)=13,4," "))
根据评论中的建议,您可能希望根据数据测试空格:
=IF(LEN(TRIM(A1))=12,3,IF(LEN(TRIM(A1))=13,4," "))