我有一个表,我需要根据客户端作业ID填写每个客户端作业的一些信息,并在VBA中使用vlookup提取信息。
Dim jobID as double, path as String, creationDate as date
For i = 2 to 100
jobID = Sheet11.Cells(i, 1).Value
path = Application.WorksheetFunction.VLookup(jobID, Sheet9.Range("A:G"), 7, False)
creationDate = Application.WorksheetFunction.VLookup(jobID, Sheet9.Range("A:M"), 13, False)
Sheet11.Cells(i, 6).Value = creationDate
Sheet11.Cells(i, 8).Value = path
Next i
表9中的路径看起来像" 180,28,60,91,40,178"或" 179,143,141,142,178"并且已经"将军"格式。表9中的创建日期类似于" 2015-11-12 11:44"并具有yyyy-mm-dd h:mm自定义日期格式。但是,当如图所示将存储的值输入到sheet11时,一些路径被转换为例如数字。 " 179,143,141,142,178"变成" 179143141142178",虽然有些像我想要的那样保持字符串,例如" 180,28,60,91,40,178&#34 ;.大多数日期也丢失了时间信息(h:mm信息),并以yyyy-mm-dd格式输入到sheet11,而有些则保留了原始格式。
有人可以帮我保留日期中的所有信息,并防止存储为字符串的路径成为数字吗?
答案 0 :(得分:2)
Excel正在尽力修复它认为数据错误的内容。
标准千位分隔符每三位数都会输入一个逗号。这是表达数字的标准方法。 180,28,60,91,40,178
可以视为实数。
当Excel看到类似Dim jobID as double, path as String, creationDate as date
For i = 2 to 100
jobID = Sheet11.Cells(i, 1).Value
path = Application.WorksheetFunction.VLookup(jobID, Sheet9.Range("A:G"), 7, False)
creationDate = Application.WorksheetFunction.VLookup(jobID, Sheet9.Range("A:M"), 13, False)
Sheet11.Cells(i, 6).NUMBERFORMAT = "yyyy-mm-dd h:mm"
Sheet11.Cells(i, 6).Value = creationDate
Sheet11.Cells(i, 8).NUMBERFORMAT = "@"
Sheet11.Cells(i, 8).Value = path
Next i
的值时,它不知道如何处理它,因为用逗号分隔的两个数字不是表达数值的标准方法,因此它将它们视为文本。 / p>
如果您尚未手动更改单元格对齐方式,请加宽列并查看值。默认情况下,文本值在单元格中保持对齐;数值和日期(被认为是数字)默认情况下在单元格中右对齐。这将很快向您展示Excel'认为'是一个数字,它是什么'认为'是文字。
将目标路径格式化为文本,而不是常规。格式化目标日期以包含时间值。
Dim jobID as double, path as String, creationDate as date, rw as variant
For i = 2 to 100
jobID = Sheet11.Cells(i, 1).Value
rw = Application.Match(jobID, Sheet9.Columns("A"), 0)
if not iserror(rw) then
path = Sheet9.Cells(rw, "G").TEXT 'this will return whatever is displayed; not the underlying value
creationDate = Sheet9.Cells(rw, "M").VALUE2
Sheet11.Cells(i, 6).NUMBERFORMAT = "yyyy-mm-dd h:mm"
Sheet11.Cells(i, 6).Value = creationDate
Sheet11.Cells(i, 8).NUMBERFORMAT = "@"
Sheet11.Cells(i, 8).Value = path
end if
Next i
<强>附录:强>
我发现你的源值可能是文本和数字的混搭。找到源行并使用它来拉取Range.Text property可能更合适。
x
答案 1 :(得分:2)
如果您不想格式化单元格,那么这是最简单的方法
Sheet11.Cells(i, 8).Value = "'" & path