對不起,附件有寫一個vba,是關於自動編號及重複警告,目前卡在自動編列15碼OK,可是編16碼,尾數就會變成0,請問有解決的方式嗎?謝謝[點擊下載]

數字,15位數是上限,超過要正常顯示,必需要用“純文字”
詳細請參考:Excel 的規格及限制
https://support.office.com/zh-tw/article/excel-%E7%9A%84%E8%A6%8F%E6%A0%BC%E5%8F%8A%E9%99%90%E5%88%B6-1672b34d-7043-467e-8e27-269d656771c3
但純文字,在使用=MAX(E:E)... 等等的計算函數時,會無法計算,所以會回傳0
簡單範例,請參考

Sub find_max()
Dim temp As Double, i As Integer
temp = Range("e2")
For i = 3 To 10
If Cells(i, 5) > temp Then temp = Cells(i, 5)
Next i
Range("f1") = CStr(temp)
End Sub
Sub add_sn()
Dim n As Integer, i As Integer
n = 15
Range("g1") = Range("f1")
For i = 2 To n
Cells(i, 7) = CStr(Cells(i - 1, 7) + 1)
Next i
End Sub
沒殼的螃蟹 wrote:
我想用類似 Right(Cells(i, 1), Len(Cells(i, 1)) - 1)的方式(恕刪)
拆2部份計算,算是比較常用的解決方式
但不建議分成1+15,建議分成2+14,或n+14(n>15,需拆成3份計算)
因為必需要考慮進位的問題
999999999999999+1
這樣第2部份又變成16位數字,會變成科學記號1E+15,所以要保留進位空間
因為還需注意合併2部份前,要補0的問題
例如:100000000000009
拆成
1 & 00000000000009
00000000000009+1 會變成 10,0會自動被刪掉,合併後會變成110
需適當的補上0,才能正確顯示100000000000010
簡易範例如下
Sub add_sn()
Dim n As Integer, i As Integer, temp As String, a As String, b As String, check As Boolean
n = 15
Range("g1") = Range("f1")
For i = 2 To n
temp = Cells(i - 1, 7)
If Len(temp) > 14 Then
a = Left(temp, Len(temp) - 14)
b = Right(temp, 14)
check = True
Else
b = temp
End If
b = b + 1
If Len(b) > 14 Then
a = a + 1
b = Right(b, 14)
End If
If check = True And Len(b) < 14 Then b = WorksheetFunction.Rept("0", 14 - Len(b)) & b
Cells(i, 7) = CStr(a & b)
Next i
End Sub
但是,如果您用的excel是64位元,可利用dim longlong
數字可計算範圍更大,不會變成科學記號,可直接在vba中計算
詳細請參考:LongLong 資料類型
https://docs.microsoft.com/zh-tw/office/vba/language/reference/user-interface-help/longlong-data-type
Sub test()
Dim a As LongLong
a = Range("f1")
Range("g1") = CStr(a + 123)
End Sub
Snare大,又有問題了.......不知道為什麼,查詢號碼的時候就會轉圈圈當掉.....
S = Application.InputBox("請輸入欲查詢S/N號碼")
Cells(1, 3) = S
For i = 1 To UsedRange.Rows.Count
For j = i + 1 To UsedRange.Rows.Count
If Cells(i, 3) = Cells(j, 5) Then
MsgBox "" & Cells(i, 3) & "和E列第" & j & "行值重複。"
Exit For
End If
Next j
Next i
內文搜尋

X