Board logo

標題: [發問] 請問....如何利用VBA判定通用格式中小數位數為幾位(以格式顯示) [打印本頁]

作者: 棋語鳥鳴    時間: 2013-7-18 19:08     標題: 請問....如何利用VBA判定通用格式中小數位數為幾位(以格式顯示)

本帖最後由 棋語鳥鳴 於 2013-7-18 19:10 編輯

假設:A欄格式為通用格式,想判定其小數位數格式於B欄
例如:
A1:數值為0.0001          B1自動判定A1格式為"0.0000"
A2:數值為0.01          B2自動判定A2格式為"0.00"
A3:數值為0.1          B3自動判定A3格式為"0.0"
類似這樣,請問用VBA如何判定A欄的小數位數字至第幾位
作者: GBKEE    時間: 2013-7-18 19:41

回復 1# 棋語鳥鳴

是這樣嗎
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Range, i As Integer
  4.     For Each E In Range("A:A").SpecialCells(xlCellTypeConstants, xlNumbers)
  5.         i = InStr(E, ".")
  6.         If i > 0 Then
  7.             i = Len(Mid(E, i + 1))
  8.             E.NumberFormatLocal = "0." & String(i, "0") & "_ "
  9.         Else
  10.             E.NumberFormatLocal = "G/通用格式"
  11.         End If
  12.     Next
  13. End Sub
複製代碼

作者: 棋語鳥鳴    時間: 2013-7-22 18:50

回復 2# GBKEE


  我想要的是將格式設在b欄
例如:a1是0.0002   b1是0.1
執行之後b1則變成0.1000(參考a1,b1自動改格式與a1的小數位數一樣)
意思就是把現有的語法(目前是a欄直接變數值),格式由a欄改到b欄,要如何改
作者: luhpro    時間: 2013-7-22 22:43

回復 3# 棋語鳥鳴
只要在 E 的後面加上 .Offset(0, 1) <即標的儲存格右移一欄 = B欄> 就好了:
  1. Option Explicit
  2. Sub Ex()
  3.     Dim E As Range, i As Integer
  4.     For Each E In Range("A:A").SpecialCells(xlCellTypeConstants, xlNumbers)
  5.         i = InStr(E, ".")
  6.         If i > 0 Then
  7.             i = Len(Mid(E, i + 1))
  8.             E.Offset(0, 1).NumberFormatLocal = "0." & String(i, "0") & "_ "
  9.         Else
  10.             E.Offset(0, 1).NumberFormatLocal = "G/通用格式"
  11.         End If
  12.     Next
  13. End Sub
複製代碼

作者: 棋語鳥鳴    時間: 2013-7-23 21:20

回復 4# luhpro


    原來如此還能用"Offset"這招,看來我要多學學Offset的函數和語法...感覺還不錯用!
感謝兩位大大的教學....




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)