Vba 以整数形式插入日期(Excel)
我有一个vba代码来连接来自不同列的值。其中一列;M列-是日期,格式为dd/mm/yyyy。我想将这个日期的整数值与单元格中的其他值连接起来 我试图使用Vba 以整数形式插入日期(Excel),vba,excel,Vba,Excel,我有一个vba代码来连接来自不同列的值。其中一列;M列-是日期,格式为dd/mm/yyyy。我想将这个日期的整数值与单元格中的其他值连接起来 我试图使用Int(CDbl(“date”))将日期值转换为Int,然后使用该值与其他单元格连接 我当前的vba代码是: Dim datevar As Integer For i = 1 to LastRow datevar = Int(CDbl(Sheets("Project_Name").Cells(i, 13).value)) targ
Int(CDbl(“date”))
将日期值转换为Int,然后使用该值与其他单元格连接
我当前的vba代码是:
Dim datevar As Integer
For i = 1 to LastRow
datevar = Int(CDbl(Sheets("Project_Name").Cells(i, 13).value))
target.location.formula = "=Project_Name!B" & i & "&UPPER(Project_Name!D" & i & ")&Project_Name!E" & i & "&Project_Name!F" & i & "&Project_Name!G" & i & "&Project_Name!H" & i & "&Project_Name!I" & i & datevar & ""
Next i
运行此命令时,在datevar=Int(CDb1(…)
行上出现“类型不匹配”错误:
有人能告诉我为什么会出错,以及是否有更有效的工作方式吗
编辑
好的-我得到了错误,因为CDbl无法将字符串转换为双精度。。。但是,该单元格中的值肯定是日期而不是字符串。解决这个问题的最好办法是什么 处理日期时,最好将它们的值存储到
Double
而不是Integer
只需使用:
datevar = Sheets("Project_Name").Cells(i, 13).Value
可以添加以下行以防止出现非整数值:
If IsNumeric(Sheets("Project_Name").Cells(i, 13).Value) And Sheets("Project_Name").Cells(i, 13).Value > 0 Then
注意:您可以使用
Double
或Long
存储日期值。
Integer
限制为最大值32767,读取
如果我们看一下今天的日期,2018年8月17日的值是43329,这超过了
整数的上限,这就是为什么您会出现错误。要继续我们在评论中的对话,这里有一个简单的例子:
Sub test()
Dim cellValue As String
Dim spaceSpot As Integer
cellValue = CStr(ThisWorkbook.Worksheets(1).Range("A1").Value) ' which is 12/22/2018
spaceSpot = InStr(cellValue, " ")
' Checking if date is in format 12/22/2018 00:00:00
If spaceSpot > 0 Then
cellValue = Left(cellValue, spaceSpot - 1)
End If
cellValue = Replace(cellValue, "/", "")
MsgBox cellValue ' shows 1222018
End Sub
如果在该单元格上使用=ISNUMBER()
,Excel是否返回TRUE?如果不是,Excel不会将其识别为有效日期,这意味着它是一个字符串,并且该字符串不能直接转换为双精度。在我的系统上进行的测试(使用系统日期格式mm/dd/yyyyy
),单元格A1中的01/01/2018
,单元格B1中的=IsNumber(A1)
,显示TRUE
。你能将其改为双精度而不是整数吗?@KenWhite-dammit它返回False。。。。但是,当我点击format时,它被识别为日期格式……如果您的目标是将该值与其他值连接起来,为什么不保留为string并使用string操作删除“/”呢?然后将有一个带有数字的字符串characters@Kubie-你是个天才。。这正是我所想的!!!是-我同意,但出于操作原因,我需要将日期转换为整数,以便生成唯一的id。@OdaySalim我建议使用Long
而不是Integer
,请阅读此处。这样,上面的代码仍然可以正常工作