需要一个真正的VBA等效的Excel值函数

时间:2016-03-01 20:41:39

标签: excel vba excel-vba

如标题中所述,我需要一个等同于Excel Value函数的VBA。我的数据集如下所示:Data set example

我正在寻找的是与此相当的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

任何和所有帮助表示赞赏。如果您可以指出我正确的方向,将最终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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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的时间/日期代码中,因为您希望获得最终结果。欢呼声,