Excel vba循环文本到列日期格式

Excel vba循环文本到列日期格式,excel,vba,for-loop,formatdatetime,text-to-column,Excel,Vba,For Loop,Formatdatetime,Text To Column,我自学成才,对VBA比较陌生!我从你的网站学到了很多东西,但现在我被卡住了 我收到了多个文件,其中有多列应该是什么日期。文件最初以CSV格式导出,并在excel中打开。在Office 365之前的任何版本的excel中打开时,只有“天”小于12的日期。。。它们是否被识别为日期,因为日期被写为月份。我已经了解了如何两次运行文本到列,以便更正正在导入的日期(根据下面的VBA) 但是,我必须指定包含日期的列,这是我试图避免的,假设在某个时候特定的列可能会更改。我发现了一些VBA,它可以循环浏览并根据标

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

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

但是,我必须指定包含日期的列,这是我试图避免的,假设在某个时候特定的列可能会更改。我发现了一些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

它有助于标记最相关的信息,在本例中为EXCEL。只有到那时,专家们才会看到这个问题。大多数人根据自己感兴趣的标签过滤问题列表。请查看“数据”选项卡上的电源查询!在这种情况下,这将对你有很大帮助谢谢Cindy-会的!嗨,山姆-不确定在数据选项卡上的哪里可以找到电源查询?
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