iT邦幫忙

0

Excel 自動補0

請問在Excel中使用MS VB寫程式

例如設定k = 1
但我想顯示的是 00001
網路上查詢一下,有說Format(k, "00000")
是可行的
但我始終一直失敗

之後再excel使用函數
是可行的
但我要如何在MS VBA裡面使用
CONCATENATE(REPT("0",5-LEN(K2)),K2)
這段呢

以及,有辦法直接在VBA寫程式
不足5位自動補0呢
我有看到Padleft
可是始終用不成功

感謝

看更多先前的討論...收起先前的討論...
strPadded_1 = Format(3, "00000")    '00003
strPadded_2 = Format(23, "00000")   '00023
strPadded_3 = Format(123, "00000")  '00123
dj5200037 iT邦新手 5 級 ‧ 2012-11-29 17:23:23 檢舉
感謝您的幫忙

我試了
k = Format(3, "00000")
工作表2.Cells(j, 11) = k

可是工作表2.Cells(j, 11)
仍然顯示3而已

不知道哪裡錯誤
還請大大指點
因為儲存格格式是通用
把格式改為文字即可

改用以下這段
Sub Macro1()
    ActiveCell.NumberFormatLocal = "@"
    ActiveCell.Value = Format(123, "00000")
End Sub
外獅佬 iT邦大師 1 級 ‧ 2012-11-30 09:07:52 檢舉
海綿寶...該把這個移到回答那一區了吧...謝謝
wiselou提到:
海綿寶...該把這個移到回答那一區了吧.


看吧
這就是我不移到回答區的原因
吃
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
12
ihon822
iT邦研究生 2 級 ‧ 2012-11-29 16:50:18
最佳解答

數字前面加個 '(單引號)
或是儲存格格式改成自訂 -> 00000

dj5200037 iT邦新手 5 級 ‧ 2012-11-29 16:56:59 檢舉

謝謝你的回覆

儲存格格式改成自訂
雖然顯示的字為00001

但實際上抓出來的資料為1

在數字前加單引號的話
如果今天固定一定要五位
流水碼有可能為一位或兩位
這樣會有問題

10
外獅佬
iT邦大師 1 級 ‧ 2012-11-29 16:59:35

dj5200037提到:
始終一直失敗

怎麼個失敗法?
這個Format函數的執行是沒有問題的啊...(Tested Excel 2000/XP/2003)

看更多先前的回應...收起先前的回應...
dj5200037 iT邦新手 5 級 ‧ 2012-11-29 17:16:45 檢舉

小弟不才

想問問

k = 1
k = Format(k, "00000")

這樣是正確的嗎
我試都是1 不是00001

ctipde iT邦高手 1 級 ‧ 2012-11-29 21:29:44 檢舉

wiselou應該是說你下的 CONCATENATE(REPT("0",5-LEN(K2)),K2)指令格式(format)
是對的我有試過當K2為零時在此指令格顯示為5個零,當K2=2時指令格為00002

ctipde iT邦高手 1 級 ‧ 2012-11-29 21:30:25 檢舉

外獅佬 iT邦大師 1 級 ‧ 2012-11-30 02:09:45 檢舉

比奇堡的大廚點出了他的問題所在....
問題根本在儲存格的格式
通用格式會把00001當做數值1
永遠也不會變成00001
所以,必須把儲存格改成文字

顯示的格式是小事
但是這種用法很容易讓人混淆
到底那格是文字還是數字
做菜

蟹老闆 iT邦大師 1 級 ‧ 2012-11-30 09:55:51 檢舉

antijava提到:
到底那格是文字還是數字

通常這種應該會用在流水號、產品編號、單據編號等類型的應用(猜測他用在這方面),基本上不會用來運算

10
蟹老闆
iT邦大師 1 級 ‧ 2012-11-29 23:34:41

dj5200037提到:
網路上查詢一下,有說Format(k, "00000")
是可行的
但我始終一直失敗

以下狀況假設輸出位置在 A1

<pre class="c" name="code">
A = 456
Range("A1").Value =  "'" & Format(A , "00000")

或是先設定儲存格格式

<pre class="c" name="code">
A = 456
Range("A1").NumberFormat = "00000"
Range("A1").Value = A

我想你的問題在 VBA 輸出後 EXCEL 自動幫你轉成數字格式,若要改善可以先設定好儲存格格式或是用VBA 轉成字串。

另外

dj5200037提到:

但我要如何在MS VBA裡面使用
CONCATENATE(REPT("0",5-LEN(K2)),K2)

以這三個函數來說,除了LEN是共通的, CONCATENATE 及 REPT 在 VBA 裡是不可引用的,若用引用 EXCEL 內的函數只能引用 VBA 裡無相同功能的,例如 Vlookup 或 Hlookup 等函數,若要達到與 REPT 相同的功能可以用 STRING , CONCATENATE 則可用 連接符號 &
若要在 VBA 引用 EXCEL 函數可參考 計算非空白儲存格
以上供參考

我要發表回答

立即登入回答