自動編號

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


數字,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

snare wrote:
數字,15位數是上限(恕刪)

Snare大,所以沒解了嗎?我想用類似 Right(Cells(i, 1), Len(Cells(i, 1)) - 1)的方式 ,在編號的同時,將第一碼去掉,複製到別的儲存格再貼回,這樣可行嗎?我還在努力中......哈哈
沒殼的螃蟹 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 wrote:
拆2部份計算,算是比(恕刪)

[點擊下載]
終於完成了,感謝Snare大的不吝教導
[點擊下載]
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
沒殼的螃蟹 wrote:
不知道為什麼,查詢號碼的時候就會轉圈圈當掉.....(恕刪)


不是當掉,是跑很久
因為您用了2層迴圈在查詢號碼

您的檔案最後一筆在第30024列(row)
如果查的資料剛好在最後一筆,本來只要跑30024次,變成要跑450705277次
計算時間多了約1千倍

我不知道您用2層的用途是什麼,正常應該像這樣
For i = 2 To UsedRange.Rows.Count
If s = Cells(i, 5) Then
MsgBox "" & s & "和E列第" & i & "行值重複。"
Exit For
End If
Next i
snare wrote:
不是當掉,是跑很久因(恕刪)

受教了,現在用起來都很順,真的是高手一出手便知有沒有.....再次感謝
內文搜尋
X
評分
評分
複製連結
Mobile01提醒您
您目前瀏覽的是行動版網頁
是否切換到電腦版網頁呢?