2016-07-15 136 views
1

我想使用宏來改變長長的單元格列。單元格是數字或文本。數字,雖然,存儲爲文本,我想轉換它們。我想喜歡如何在執行vba之前檢查命令是否可行?

`Range("A1").Value = Int(Range("A1").Value)` 

,這將被存儲爲文本數號碼時,工作正常,但顯然它不會是文字,沒有數字的值所在工作。如何設置命令以查看,如果可以進行此轉換,那麼請執行此操作?

+0

'如果ISNUMERIC(範圍( 「A1」)值then'也許...... – xQbert

回答

1

使用IsNumeric。爲了避免將空白轉換爲零,請檢查空白。

if IsNumeric(Range("A1").Value2) and Not IsEmpty(Range("A1")) then 
Range("A1").Value = Int(Range("A1").Value) 
end if 
+1

爲什麼你在條件中使用'Value2'和而不是「價值」? – Black

+1

更多的習慣,給你實際的價值,不受任何單元格格式的干擾 – cyboashu

+2

@EdwardBlack來自MS docs:「該屬性和Value屬性之間的唯一區別是Value2屬性不使用貨幣和日期數據類型您可以使用Double數據類型將使用這些數據類型格式化的值作爲浮點數返回。「 –

2

Range.TextToColumns method一起執行它們。 VBA的開銷將負責錯誤控制。

with worksheets("Sheet1") 
    with intersect(.usedrange, .columns(1)) 
     .numberformat = "General" 
     .TextToColumns DataType:=xlFixedWidth, FieldInfo:=Array(0, 1) 
    end with 
end with 
1

我想這應該這樣做:

With Range("A:A") ' column A 
    .NumberFormat = "General" 
    .Value = .Value   ' Excel should auto convert the strings to numbers 
End With 
+0

如果列A中沒有日期或貨幣,則** [.Value](https://msdn.microsoft.com/en-us/library/office/ff195193.aspx)= [.Value2](https:/ /msdn.microsoft.com/en-us/library/office/ff193553.aspx)**可能稍好一些。 – Jeeped

+0

甚至更​​好'.Value2 = .Value2':] – Slai

+0

可能只是編程風格,但我傾向於使用默認的.Value作爲目標,.Value2作爲源。 – Jeeped

相關問題