所以,我試圖弄清楚如何編寫一個Excel宏來填充列3或4,具體取決於列B中包含的數量的數量。Excel宏:如果列B包含12位數,那麼列C等於3?
我已經搜索了上下的對此有正確的措辭,但我一直不了了之。
基本上,我需要宏看的在列B的數字位數如果有12位數字,則數量是一個UPC,如果有13然後數量是EAN。然後我需要這個宏來爲C列填充3個UPCs和一個4個EANs。這需要針對電子表格中整個行的範圍。
有沒有人有任何想法?提前感謝!
所以,我試圖弄清楚如何編寫一個Excel宏來填充列3或4,具體取決於列B中包含的數量的數量。Excel宏:如果列B包含12位數,那麼列C等於3?
我已經搜索了上下的對此有正確的措辭,但我一直不了了之。
基本上,我需要宏看的在列B的數字位數如果有12位數字,則數量是一個UPC,如果有13然後數量是EAN。然後我需要這個宏來爲C列填充3個UPCs和一個4個EANs。這需要針對電子表格中整個行的範圍。
有沒有人有任何想法?提前感謝!
您可以通過使用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," "))
您不需要使用髒舊循環,試試這個(得更快,如果你有大量的行):
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
我建議加入「微調」來之前/號碼後刪除任何空格。否則,一個空格字符可能會欺騙你以爲它是一個EAN,當它真是一個UPC:'= IF(LEN(TRIM(A1))= 12,3,IF(LEN(TRIM(A1))= 13,4 ,「」))'(VBA中有類似的功能。) – Roberto
謝謝!這工作就像一個魅力!我沒有使用修剪功能,因爲我們的庫存程序導出數據。我找不到任何空格。 以防萬一,將VBA代碼是如何測試的空間?我傾向於更喜歡使用VBA宏而不是單元格,因爲我們每天都要下載這個文件的新版本。使用宏,我可以將它們保存在單獨的電子表格中,並與此庫存文件一起打開。 再次感謝!我非常感謝Stumptown的幫助! =) – Lonememe