Excel VBA - 输入单元格时存储的值更改格式

时间:2016-09-23 04:17:29

标签: excel vba excel-vba

我有一个表,我需要根据客户端作业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,而有些则保留了原始格式。

有人可以帮我保留日期中的所有信息,并防止存储为字符串的路径成为数字吗?

2 个答案:

答案 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
相关问题