2016-03-01 48 views
1

正如標題中所提到的,我需要一個與Excel值函數相當的VBA。我的數據集看起來是這樣的:Data set example需要Excel的真正的VBA等效函數

我在找什麼是VBA代碼相當於這個:=Value(A2)+Value(B2)。這將在列C

輸出必須與該功能相同。對於給定的例子,列C應該看起來像這樣:End product

更重要的是,它只需要在宏運行後在單元格中具有值,而不是顯示值並仍然具有該公式它。

這是我迄今所做的:

For i = 1 To LastRow 
    strValue = Val(sht.Range("A" & i)) 
    strValue1 = Val(sht.Range("B" & i)) 
    sht.Range("C" & i).Value = strValue + strValue1 
Next i 

我也試過這個變化,如下表所示,其中一對夫婦:

For i = 1 To LastRow 
    strValue = Evaluate(sht.Range("A" & i)) 
    strValue1 = Evaluate(sht.Range("B" & i)) 
    sht.Range("C" & i).Value = strValue + strValue1 
Next i 

For i = 1 To LastRow 
    strValue = sht.Range("A" & i) 
    strValue1 = sht.Range("B" & i) 
    strVal = Evaluate(strValue) 
    strVal1 = Evaluate(strValue1) 
    sht.Range("C" & i).Value = strVal + strVal1 
Next i 

我找不到任何會爲我工作。 C中的輸出結果僅爲9.很確定它將A中的第一個數字加上B中的第一個數字。所以當B中的小時變爲1 C時,顯示爲10.

我也試過簡單:

For i=1 To LastRow 
    sht.Range("C" & i).Value = sht.Range("A" & i).Value + sht.Range("B" & i).Value 
Next i 

這只是串接文本格式9/03/15 00:00:00

任何和讚賞所有幫助。如果您可以指引我將正確方向的數值從該數字(即42250.00017)更改爲自定義日期/時間格式'yyyy-mm-dd hh:mm:ss',則可獲得獎勵。

編輯:這是我的代碼達到了堅持。其他一切都按照我想要的方式工作,唯一的問題是最後的For循環。

Sub sbOrganizeData() 

Dim i As Long 
Dim k As Long 
Dim sht As Worksheet 
Dim LastRow As Long 
Dim sFound As String 
Dim rng As Range 
Dim sheet As Worksheet 
Dim Sheet2 As Worksheet 
Dim strFile As String 
Dim strCSV As String 
Dim strValue As Double 
Dim strValue1 As Double 
Dim strVal As Long 
Dim strVal1 As Long 

Application.DisplayAlerts = False 
Sheets("all016").Delete 
Sheets("Sheet1").Delete 
Application.DisplayAlerts = True 
Set sheet = Sheets.Add 
Set Sheet2 = Sheets.Add 
sheet.Name = "all016" 
Sheet2.Name = "Sheet1" 

strFile = ActiveWorkbook.Path 
strCSV = "*.csv" 
sFound = Dir(strFile & "\*.csv") 
If sFound <> "" Then 
    Workbooks.Open Filename:=strFile & "\" & sFound 
End If 
Range("A1").CurrentRegion.Copy Destination:=Workbooks("solar.xlsm").Sheets("all016").Range("A1") 
Workbooks(sFound).Close 

Set sht = ThisWorkbook.Sheets("all016") 
LastRow = sht.Cells.Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row 

sht.Range("C1").EntireColumn.Insert 

For i = 1 To LastRow 
    'Code that doesn't quite work here' 

    sht.Range("C" & i).NumberFormat = "yyyy-mm-dd hh:mm:ss" 
Next i 
+0

您是否嘗試過使用'Application.WorksheetFunction.Value'? – Dan

+0

試試這個'strValue = Evaluate(「 - 」&sht.Range(「A」&i).Address(1,1,,1))'和'strValue1 = Evaluate(「 - 」&sht.Range 「B」&i).Address(1,1,,1))'然後添加它們。 –

+0

我不認爲你必須評估它們,因爲'.Value2'字段已經有了值。只是簡單的添加,但你有參考範圍的領域。 – nbayly

回答

3

的問題是,日期和時間是字符串所以像這樣將工作:

For i = 2 To LastRow 
    strValue = Evaluate("VALUE(TRIM(" & sht.Range("A" & i).Address(1,1,,1) & "))") 
    strValue1 = Evaluate("VALUE(TRIM(" & sht.Range("B" & i).Address(1,1,,1) & "))") 
    sht.Range("C" & i).Value = strValue + strValue1 
    'the format 
    sht.Range("C" & i).NumberFormat = "mm/dd/yy hh:mm:ss" 
Next i 
+0

你的懷疑大部分是正確的。它們是文本,但是當我運行該代碼時,我在第一行數據處發現類型不匹配錯誤。 – shilohln

+0

你試過這段代碼嗎?它爲我工作。 –

+0

是的,使用了這個確切的代碼。我在For循環中立即得到類型不匹配。 – shilohln

1

你必須引用範圍元素的.Value2領域爲:

For i = 1 To LastRow 
    sht.Range("C" & i).Value2 = sht.Range("A" & i).Value2 + sht.Range("B" & i).Value2 
Next i 

值是自由格式的,只是在Excel中的日期/時間碼,只要你想你的最終結果是。歡呼聲中,

+0

不幸的是,這最終只與使用.Value相同。只是連接單元格的面值和粘貼。另外,當B列出現10:00:00時,出現類型不匹配錯誤,原因是上述評論中提到的原因。 – shilohln