簡體   English   中英

需要與Excel Value函數等效的真實VBA

[英]Need a real VBA equivalent for Excel Value function

如標題中所述,我需要一個等效於Excel Value函數的VBA。 我的數據集如下所示: 數據集示例

我正在尋找的是與此等效的VBA代碼: =Value(A2)+Value(B2) 那將在C列中

輸出必須與該函數相同。 對於給定的示例,列C的最終外觀應如下所示: 最終產品

不僅如此,它只需要在運行宏后在單元格中具有值,而不是顯示該值並仍在其中包含該公式。

到目前為止,這是我所做的:

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

任何和所有幫助表示贊賞。 如果您能指出正確的方向,以將最終的C值從該數字(即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

問題在於日期和時間是字符串,因此類似的東西可以工作:

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

您必須將range元素的.Value2字段引用為:

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

該值不受格式限制,並且只需要您希望最終結果為Excel的時間/日期代碼即可。 干杯,

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM