2013-10-27 32 views
0

所以,我试图弄清楚如何编写一个Excel宏来填充列3或4,具体取决于列B中包含的数量的数量。Excel宏:如果列B包含12位数,那么列C等于3?

我已经搜索了上下的对此有正确的措辞,但我一直不了了之。

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

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

回答

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," ")) 
+2

我建议加入“微调”来之前/号码后删除任何空格。否则,一个空格字符可能会欺骗你以为它是一个EAN,当它真是一个UPC:'= IF(LEN(TRIM(A1))= 12,3,IF(LEN(TRIM(A1))= 13,4 ,“”))'(VBA中有类似的功能。) – Roberto

+0

谢谢!这工作就像一个魅力!我没有使用修剪功能,因为我们的库存程序导出数据。我找不到任何空格。 以防万一,将VBA代码是如何测试的空间?我倾向于更喜欢使用VBA宏而不是单元格,因为我们每天都要下载这个文件的新版本。使用宏,我可以将它们保存在单独的电子表格中,并与此库存文件一起打开。 再次感谢!我非常感谢Stumptown的帮助! =) – Lonememe

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 
+0

我认为这很有趣。我得到你想说的话。单元格公式代码本身有点“更清洁”,但我想我是老派,喜欢循环。无论哪种方式,无论漂浮你的船! 我们正在运行这约2300行,所以不是一个很大的交易。 感谢您的意见! – Lonememe

+0

欢迎您,而且您不是第一个这么说的,很多vba开发人员在遇到问题时会直接进行循环。它是一个快速修复,它首先想到的。但是,当代码变得越来越复杂并且数据库不断增长时,它们可能会变成一场噩梦,利用内置的功能优势将会看到你是对的。尽管我必须承认,但这不是一个容易的习惯。 :) – Reafidy

+0

downvoter会照顾评论吗? – Reafidy

相关问题