0

所以,我试图弄清楚如何编写一个 Excel 宏来根据 B 列中包含的数字数量用 3 或 4 填充 C 列。

我已经上下搜索了正确的措辞,但我一直在做空。

基本上,我需要宏来查看 B 列中的位数。如果有 12 位,则该数字是 UPC,如果有 13 位,则该数字是 EAN。然后,我需要使用宏来填充 C 列,其中 UPC 为 3,EAN 为 4。这需要针对电子表格中的整个行范围。

有没有人有任何想法?提前非常感谢!

4

2 回答 2

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
于 2013-10-28T02:51:37.150 回答
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

单元格内方程可能如下所示:

=IF(LEN(B1)=12,3,IF(LEN(B1)=13,4," "))

正如评论中所建议的,您可能希望根据您的数据测试空格:

=IF(LEN(TRIM(A1))=12,3,IF(LEN(TRIM(A1))=13,4," "))
于 2013-10-27T23:45:50.593 回答