Excel VBA 单元格值显示为整数
Excel VBA Cell Values showing up as intergers
我正在开发一个具有 Excel 的 VBA 功能的程序,但是 运行 出现了非常严重的 运行ge 逻辑错误。
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 或其他任何东西进行比较的。
这里是我为 sheet 的单元格设置值的地方。
.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
有人知道为什么会这样吗?
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
我正在开发一个具有 Excel 的 VBA 功能的程序,但是 运行 出现了非常严重的 运行ge 逻辑错误。
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 或其他任何东西进行比较的。
这里是我为 sheet 的单元格设置值的地方。
.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
有人知道为什么会这样吗?
Excel 将时间和日期存储为数字。每个整数代表一天,小时、分钟和秒被分解为当天的分数。 8:30 只是一个时间,所以没有整数,8.5/24 = 0.3541667.
您可以使用此代码对此进行测试,这可能会为您提供一种格式化输入的方法。在单元格 A1
中键入 8:30Sub 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