当我使用len公式去除1s空间时,每月切换一个月

时间:2017-04-24 09:49:01

标签: excel excel-vba vba

我真的不明白为什么会发生这种情况以及为什么会出现在我的工作表中。

要从某些单元格中删除第一个空格,请使用以下代码:

Sub RoundedRectangle5_Click()


Dim Cel As Range, Rng As Range
Set Rng = Range("B7:C37")
For Each Cel In Rng
    If IsEmpty(Cel.Value) = False Then
   Cel.Value = Right(Cel.Value, Len(Cel.Value) - 1)
    End If
Next Cel


End Sub

但是在我有数据的特定单元格中,使用此代码后,日期和月份切换如下:如果初始数据为10-04-2017,则代码更改为04-10-2017。我认为只有格式改变了,但数据实际上从4月10日变为10月4日。任何人都知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

以下是对代码的修改。

  • 测试以确保单元格中有数据
  • 数据是否为带有前导space的日期?
  • 如果是,请使用TextToColumns
  • 进行转换
  • 另请注意,对于非日期,使用MID函数,该函数在VBA中具有可选的length参数。
For Each Cel In Rng
    If IsEmpty(Cel.Value) = False Then
            If IsDate(Cel.Value) And _
            Left(Cel.Text, 1) = Chr(32) Then
                Cel.TextToColumns Destination:=Cel, DataType:=xlDelimited, _
                    Tab:=False, semicolon:=False, comma:=False, Space:=True, other:=False, _
                    fieldinfo:=Array(Array(1, xlSkipColumn), Array(2, xlDMYFormat))
            Else
                Cel.Value = Mid(Cel.Text, 2)
            End If
    End If
Next Cel

还有其他转换方法。如果您确定分隔符,则可以使用Split函数并使用Dateserial

进行组合

e.g:

Dim V as variant
For Each Cel In Rng
    If IsEmpty(Cel.Value) = False Then
            If IsDate(Cel.Value) Then
                V = Split(Mid(Cel.Text, 2), "-")
                Cel.Value = DateSerial(V(2), V(1), V(0))
            Else
                Cel.Value = Mid(Cel.Text, 2)
            End If
    End If
Next Cel