Excel 工作表功能。修剪删除前导零

Excel 工作表功能。修剪删除前导零,excel,vba,Excel,Vba,我看到很多关于如何删除前导零的问题,但为了保留我的前导零,我有点左右为难 我正在尝试在一系列具有混合数据类型的不同工作表上运行通用Application.WorksheetFunction.Trim宏。其中一列将有不同长度的数字,其中一些有前导零,我有一列日期。运行时,我可以通过将每个单元格格式化为文本来保留零,但这似乎会破坏我的日期。我一直没有成功,只是在单元格不包含日期时将其转换为文本,我尝试过: If Cell.NumberFormat <> "d-mmm-yy" Or Cel

我看到很多关于如何删除前导零的问题,但为了保留我的前导零,我有点左右为难

我正在尝试在一系列具有混合数据类型的不同工作表上运行通用Application.WorksheetFunction.Trim宏。其中一列将有不同长度的数字,其中一些有前导零,我有一列日期。运行时,我可以通过将每个单元格格式化为文本来保留零,但这似乎会破坏我的日期。我一直没有成功,只是在单元格不包含日期时将其转换为文本,我尝试过:

If Cell.NumberFormat <> "d-mmm-yy" Or Cell.NumberFormat <> "dd-mmm-yy" Then
    Cell.NumberFormat = "@"
End If
但我似乎运气不太好。我正试图构建一个一应俱全的解决方案,它不需要在其他用户添加更多信息时更改电子表格中的任何内容

编辑:是否有方法检测单元格是否已格式化为日期,如果是,请避免将其改写为文本?作为一个延续,为了节省时间,只有当它还没有并且也不是日期时,才将它标记为文本

编辑2:示例-一个工作表将有如下行
ABCD'012345 TL PT1234 NS CA
ABCD 112345 TL PT1235纳秒CA
ACBD 0890 TL PT1238 NS CA

而另一个看起来更像


ABCD ROBB Bob Robertson博士护照CA M 1/12/1990(显示为1990年12月1日)AA1234501 CA ROBER0123456789 NS CA

可能存在其他问题并提供样本数据wpul;I’我会帮你解释你的情况,但我会从以下几点开始

If Cell.NumberFormat <> "d-mmm-yy" Or Cell.NumberFormat <> "dd-mmm-yy" Then
    Cell.NumberFormat = "@"
End If
以上说明,数字格式不能为“d-mmm-yy”或“dd-mmm-yy”

但是,单元格的.NumberFormat属性可以是通用的,并且仍然是真实的日期。为了绕过这个缺点,已经提到了
IsDate
函数。这取决于附加到单元格默认
.Value
属性(而不是
.Text
.Value2
属性)的区域信息

我发现,
IsDate
即使在测试只看起来像日期的文本时也相当可靠


Q.如果带有前导零的单元格未格式化为文本,并且没有强制前导零的自定义数字格式,那么首先是什么让前导零保留在那里?

可能存在其他问题,并提供样本数据wpul;I’我会帮你解释你的情况,但我会从以下几点开始

If Cell.NumberFormat <> "d-mmm-yy" Or Cell.NumberFormat <> "dd-mmm-yy" Then
    Cell.NumberFormat = "@"
End If
以上说明,数字格式不能为“d-mmm-yy”或“dd-mmm-yy”

但是,单元格的.NumberFormat属性可以是通用的,并且仍然是真实的日期。为了绕过这个缺点,已经提到了
IsDate
函数。这取决于附加到单元格默认
.Value
属性(而不是
.Text
.Value2
属性)的区域信息

我发现,
IsDate
即使在测试只看起来像日期的文本时也相当可靠


Q.如果带有前导零的单元格未格式化为文本,并且没有强制前导零的自定义数字格式,那么首先是什么将前导零保留在那里?

包含前导零的单元格的数据类型是什么?如果要在数字中保留前导零,只需确保单元格的自定义格式为
0000
(根据需要设置尽可能多的零)。@AAA General with'leads and Text without,但其他用户可能不会将新条目格式化为文本,我不希望数字被意外删除。@MichalRosa遗憾的是,零的数量(和位数)从一到十四不等。我还担心对于混合数据,直接格式可能会导致问题。您也可以尝试VBA中提供的IsDate函数来检查单元格是否包含日期,而不是像您所问的那样尝试不同的格式。包含前导零的单元格的数据类型是什么?如果您想在数字中保留前导零,只需确保单元格的自定义格式为
0000
(需要多少个零)。@AAA General with'leads and Text without,但是新条目可能不会被其他用户格式化为文本,我不希望数字被意外删除。@MichalRosa不幸的是,0的数量(和位数)在1到14之间的任何地方都有变化。我还担心对于混合数据,直接格式可能会导致问题。您也可以尝试VBA中提供的IsDate函数来检查单元格是否包含日期,而不是像您所问的那样尝试不同的格式。对于大多数条目来说,它似乎只是在第一个零之前输入的一个。当宏使用修剪在单元格的值上运行时,撇号会因任何原因被删除,后面跟着零。IsDate和.NumberFormat检查可以结合成防弹的东西吗?谢谢你的帮助!对于大多数条目来说,它似乎只是在第一个零之前输入的一个。当宏使用修剪在单元格的值上运行时,撇号会因任何原因被删除,后面跟着零。IsDate和.NumberFormat检查可以结合成防弹的东西吗?谢谢你的帮助!
If Cell.NumberFormat <> "d-mmm-yy" AND Cell.NumberFormat <> "dd-mmm-yy" Then
    Cell.NumberFormat = "@"
End If
If NOT ISDATE(Cell.Value) Then
    Cell.NumberFormat = "@"
End If