2017-06-09 20 views
0

作爲更大腳本的一部分,我試圖用excel中的小數值替換小數值,使用vbscript。我總是可以指望具有特定列和特定格式的值。在Excel中使用vbscript代替Excel中的小數

Excel的示例預期輸入欄B:

51-7/16 
1-1/2 
2 
15-7/8 

的Excel例如期望的輸出列B:

51.4375 
1.5 
2 
15.875 

我知道它總是會以一個1/16。所以我的想法是通過列表尋找每個可能的分數,找到一個包含該分數的單元格,並將其替換爲相應的小數。

問題:如何讓腳本查找包含值的單元格,以及如何用小數點替換該分數?

最接近的例子Search and Replace a number of characters in Excel using VBscript

嘗試:

Dim FMember (14) 
FMember(0) = "-1/16" 
FMember(1) = "-1/8" 
FMember(2) = "-3/16" 
FMember(3) = "-1/4" 
FMember(4) = "-5/16" 
FMember(5) = "-3/8" 
FMember(6) = "-7/16" 
FMember(7) = "-1/2" 
FMember(8) = "-9/16" 
FMember(9) = "-5/8" 
FMember(10) = "-11/16" 
FMember(11) = "-3/4" 
FMember(12) = "-13/16" 
FMember(13) = "-7/8" 
FMember(14) = "-15/16" 

Dim DMember(14) 
DMember(0) = ".0625" 
DMember(1) = ".125" 
DMember(2) = ".1875" 
DMember(3) = ".25" 
DMember(4) = ".3125" 
DMember(5) = ".375" 
DMember(6) = ".4375" 
DMember(7) = ".5" 
DMember(8) = ".5625" 
DMember(9) = ".625" 
DMember(10) = ".6875" 
DMember(11) = ".75" 
DMember(12) = ".8125" 
DMember(13) = ".875" 
DMember(14) = ".9375" 
Dim endRow2 
endRow2 = objSheet2.UsedRange.Rows.Count 

For lngPosition = LBound(FMember) To UBound(FMember) 
     For r = 1 To endRow2 
      If objSheet2.Cells(r, objSheet2.Columns("B").Column).Value = FMember(lngPosition) Then 
       objSheet2.replace 
      End If 
     Next 
Next 
+0

如果第二部分存在,則使用application.evaluate()獲取小數點並將兩者相加。 –

回答

1

使用分裂()

Function fract(str As String) As Double 
Dim strArr() As String 
If InStr(str, "-") Then 
    strArr = Split(str, "-") 
    fract = strArr(0) + Application.Evaluate(strArr(1)) 
Else 
    fract = Application.Evaluate(str) 
End If 
End Function 

然後你可以使用它作爲一個工作表函數:

=fract(A1) 

enter image description here

+0

我在As String之前的第一行收到預期的')'錯誤。 – john

+0

不知道爲什麼,你有'Dim strArr()As String'? –

+0

是的,我喜歡。我對如何將其納入更大的計劃感到好奇。我是否需要使用for循環以將其應用於所有使用的單元格的B列? – john

相關問題