Excel VBA 单元格值显示为整数

Posted

技术标签:

【中文标题】Excel VBA 单元格值显示为整数【英文标题】:Excel VBA Cell Values showing up as intergers 【发布时间】:2015-07-10 06:47:01 【问题描述】:

我正在开发一个具有 Excel 的 VBA 功能的程序,但遇到了一个非常奇怪的逻辑错误。

For SheetIndex = 1 To 6
    With ActiveSheet
    For ColIndex = 2 To 6
        For DateIndex = 0 To MinLimit

        datethingy = .Cells(1, ColIndex).Value

        If (.Cells(1, ColIndex).Value = Date_Array(DateIndex, 1)) Then

            For RowIndex = 2 To 11

'           Compare every time slot value here to every time slot value in the array
            datethingy = Trim(CStr(.Cells(RowIndex, 1).Value)) 'ERROR OCCURS HERE

            If (Trim(CStr(.Cells(RowIndex, 1).Value)) = Date_Array(DateIndex, 2)) Then
                .Cells(RowIndex, ColIndex).Value = "Checked"
            End If

            Next
        End If
        Next
    Next
    End With

    SheetIndex = SheetIndex + 1
    Application.Worksheets(SheetIndex).Activate
Next

因此,在上面的代码中,我检查了一系列单元格值,并与数组中已有的值进行比较。但是,当我从单元格中绘制值而不是“8:30”时,它会显示为“0.354166666...7”。我不知道它为什么会这样出现,我什至确保它被比较为一个字符串而不是一个 int 或其他任何东西。

这里是我为工作表的单元格设置值的地方。

.Cells(2, 1).Value = "8:30"
.Cells(3, 1).Value = "9:00"
.Cells(4, 1).Value = "10:15"
.Cells(5, 1).Value = "11:30"
.Cells(6, 1).Value = "12:30"
.Cells(7, 1).Value = "13:30"
.Cells(8, 1).Value = "14:45"
.Cells(9, 1).Value = "16:00"
.Cells(10, 1).Value = "17:15"
.Cells(11, 1).Value = "18:15"

With Range("A2", "A11")
    .HorizontalAlignment = xlCenter
    .Font.Bold = True
    .ColumnWidth = 15
End With

ActiveSheet.Cells.Rows.AutoFit

有谁知道为什么会发生这种情况?

【问题讨论】:

检查单元格的格式,当输入的是“日期/时间”时,单元格的格式可以是“数字”,把你的时间变成数字表示 【参考方案1】:

Excel 将时间和日期存储为数字。每个整数都是一天,小时、分钟和秒被分解为当天的分数。 8:30 只是一个时间,所以没有整数,8.5/24 = 0.3541667。

您可以使用此代码对此进行测试,这可能会为您提供一种格式化输入的方法。在单元格 A1 中键​​入 8:30

Sub test()
    Debug.Print sheet1.Range("A1").Value = "8:30" 'returns false
    Debug.Print Format(sheet1.Range("A1").Value, "h:mm") = "8:30" 'returns true
    Debug.Print Sheet1.Range("A1").Text = "8:30" 'return true
End Sub

【讨论】:

你是对的!那么,我可以将其转换为字符串吗?还是我必须将字符串转换为日期才能进行比较? 格式化函数会返回一个字符串。我不确切知道您要比较什么,以便确定您是否需要进行转换。我想到了另一种从您的工作表中获取数据并将其编辑为答案的方法。我认为这让事情变得更简单了。 老实说,如果我知道有一个 .Text 属性,那将是我尝试的第一件事。现在一切正常,谢谢!

以上是关于Excel VBA 单元格值显示为整数的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA:复制增量单元格值

计算单元格excel中显示的空行数

访问 VBA - 在大范围内更改 Excel 单元格值的更快方法?

使用 VBA 进行颜色填充,以单元格值为条件

Excel-VBA 读取单元格颜色

vb6.0 或者VBA 实现 改变excel 单元格格式为文本型(急急急急~!!)