gpt4 book ai didi

excel - 读取 Excel 文件,检查格式和值是否正确

转载 作者:行者123 更新时间:2023-12-03 00:15:31 26 4
gpt4 key购买 nike

我在这里进行测试,读取 Excel 文件,检查单元格的格式和值。

我需要具体检查这些事情:

  • colA 有整数
  • colB 的整数格式为 0001、0012 等
  • 如果 ColC 为 1,则 colD 应该为整数
  • colE 应该有一个 4 位数字时钟,例如 0300

这里正确的方法是什么?

现在我正在制作用于检查整数的函数,例如:

Int(sheet.Cells(row, col)) = sheet.Cells(row, col)     

这将检查整数值,但是检查所有其他内容的最佳方法是什么?我听说过可以使用的验证器对象。

有人对这个问题有什么技巧吗?

最佳答案

此代码根据您的规则验证 ActiveSheet。对于 B 列,我理解您的意思是该值实际上是文本,而不是单元格的格式是前导零。

Sub Validate()
Dim lRow As Long
Dim lNumRows As Long
Dim bRowValid As Boolean
Dim bSheetValid As Boolean

With ActiveSheet
bSheetValid = True ' initial assumption is sheet is valid
lNumRows = .Cells(.Rows.Count, 1).End(xlUp).Row
For lRow = 2 To lNumRows
bRowValid = IsInteger(.Cells(lRow, 1).Value)
bRowValid = bRowValid And IsFormatted(.Cells(lRow, 2).Value)
If .Cells(lRow, 3).Value = 1 Then
bRowValid = bRowValid And IsInteger(.Cells(lRow, 4).Value)
End If
bRowValid = bRowValid And IsTime(.Cells(lRow, 5).Value)
bSheetValid = bSheetValid And bRowValid
If Not bRowValid Then
' do something here if you want to flag this row
End If
Next lRow
End With

If bSheetValid Then
' copy data to historical sheet
End If
End Sub
Function IsInteger(vValue As Variant) As Boolean
If VarType(vValue) = vbDouble Then
IsInteger = (Fix(vValue) = vValue)
Else
IsInteger = False
End If
End Function
Function IsFormatted(vValue As Variant) As Boolean
If VarType(vValue) = vbString Or VarType(vValue) = vbDouble Then
IsFormatted = vValue Like "[0-9][0-9][0-9][0-9]"
Else
IsFormatted = False
End If
End Function
Function IsTime(vValue As Variant) As Boolean
If IsFormatted(vValue) Then
IsTime = IsDate(Left$(vValue, 2) & ":" & Right$(vValue, 2))
Else
IsTime = False
End If
End Function

以下是您可能需要考虑的一些更改:

  • For...Loop 更改为 Do...Loop,以便在发现无效数据时立即停止。如果您不想知道哪些行无效,请执行此操作。
  • 如果您想查看错误,请突出显示无效数据。在 If Not bRowValid... block 中执行此操作。
  • Sub Validate 更改为将工作表作为参数并返回 boolean 的函数。 IOW,将验证与将数据复制到历史表的代码分开。

关于excel - 读取 Excel 文件,检查格式和值是否正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8430794/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com