2013-10-27 35 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

相關問題