首页 > 解决方案 > vba循环文本到列日期格式

问题描述

我是自学成才,对 VBA 比较陌生!我从你的网站学到了很多东西,但现在我被困住了。

我收到多个文件,其中包含多列应该是日期的内容。这些文件最初以 CSV 格式导出并在 excel 中打开。在 Office 365 之前的任何版本的 excel 中打开时,只有“日”小于 12 的那些日期被识别为日期,因为日期被写为月份。我已经想出如何将文本运行两次以更正正在导入的日期(根据下面的 VBA)

Columns("E:E").Select
Selection.TextToColumns Destination:=Range("E1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 4), TrailingMinusNumbers:=True
Columns("E:E").Select
Selection.TextToColumns Destination:=Range("E1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 3), TrailingMinusNumbers:=True

但是,我必须指定包含日期的列,这是我试图避免的,假设在某些时候特定列可能会发生变化。我发现了一些 VBA 将循环遍历并基于标题突出显示列 - 但是我无法弄清楚如何将文本应用到它找到的包含日期的列的列。我一直在处理我在这个网站和其他网站上找到的各种代码片段,但现在卡住了......

下面的这段代码可以很好地找到列并对它们做一些事情,但我需要做的是使用上面的代码而不是我在下面的代码中加粗的代码......因为我不确定它做了什么,但它会替换正确识别的列中的值

我认为我需要替换的行如下: mycell.Value = Val(mycell.Value) 因为它做了一些事情并用一些值替换了适当的列,但没有做我想要的,即获取列并运行文本到列两次。原来写的代码如下:

Sub FindAndConvert()
    Dim i           As Integer
    Dim lastRow     As Long
    Dim myRng       As Range
    Dim mycell      As Range
    Dim MyColl      As Collection
    Dim myIterator  As Variant

    Set MyColl = New Collection

    MyColl.Add "Birthdate"
    MyColl.Add "Collection Date"

    lastRow = ActiveSheet.Cells.Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row

    For i = 1 To 200
        For Each myIterator In MyColl
            If Cells(1, i) = myIterator Then
                Set myRng = Range(Cells(2, i), Cells(lastRow, i))
                For Each mycell In myRng


                    **mycell.Value = Val(mycell.Value)**


                Next
            End If
        Next
    Next
End Sub

标签: excelvbafor-loopformatdatetimetext-to-column

解决方案


推荐阅读