【问题标题】:Format column in excel with vba to date format使用vba将excel中的列格式化为日期格式
【发布时间】:2016-04-14 08:45:57
【问题描述】:

我正在尝试重置我的 Excel 工作表的格式,问题是我有 4 列应该是日期格式。如何找到标题中包含“DATE”的所有列(例如:最后加工日期、装配日期、订单日期等)并将此格式更改为日期?注意:需要动态,因为它可能会在将来从 C:C 更改为 E:E 或添加更多列。

Sub formatTable(ws As Worksheet)
    On Error Resume Next
    Dim lo As ListObject
    Set lo = ws.ListObjects("FilterParts")

    'Format the table
    ws.UsedRange.Font.Bold = False
    ws.UsedRange.Style = "Normal"

    lo.TableStyle = "TableStyleMedium9"
    'Format every column that has "DATE" in its header to a date column
    'ws.Range("C:C").NumberFormat = "dd/mm/yyyy" and so on


End Sub

【问题讨论】:

  • 标题行到底是什么?它们都包含“日期”这个词吗?或者也许标题行中的所有日期都包含“/”?
  • 标题位于第 2 行,标题行如下所示(由 , 分隔)ID、最后加工日期、图纸编号、预计小时、PDF、TXT .....

标签: vba excel date


【解决方案1】:

只需像这样遍历您的列,检查它们的名称是否包含"Date",如果是,则格式化它们:

Set lo = ws.ListObjects("FilterParts")
For Each dataColumn In lo.ListColumns
    If InStr(dataColumn.Name, "Date") > 0 Then
        dataColumn.DataBodyRange.NumberFormat = "dd/mm/yyyy"
    End If
Next dataColumn

每次添加新列时运行此宏。

【讨论】:

    【解决方案2】:

    更长的编码选项,但使用Find 来避免循环遍历范围。

    Dim ws As Worksheet
    Dim lo As ListObject
    Dim rng1 As Range
    Dim StrAddress As String
    
    Set ws = ActiveSheet
    Set lo = ws.ListObjects("FilterParts")
    
    Set rng1 = lo.Range.Rows(1).Find("Date", , , xlPart)
    
    If Not rng1 Is Nothing Then
        StrAddress = rng1.Address
        rng1.Offset(1, 0).Resize(lo.ListRows.Count, 1).NumberFormat = "dd/mm/yyyy"
        Do
        Set rng1 = lo.Range.Rows(1).Find("Date", rng1, , xlPart)
        rng1.Offset(1, 0).Resize(lo.ListRows.Count, 1).NumberFormat = "dd/mm/yyyy"
        Loop While StrAddress <> rng1.Address
    End If
    

    【讨论】:

      【解决方案3】:
      Dim HdrRow as range
      Dim Cl as Range
      Set HdrRow = ActiveSheet.UsedRange
      Set HdrRow = HdrRow.Row(1) 'assuming row 1 of the data contains headers
      
      For Each Cl In HdrRow.cells
          If Instr(lCase(Cl.Value), "date") > 0 then 'This column has "date" in the header text
      enter code here
      Next Cl
      

      从这里您可以存储单元格/列号以供以后循环使用,也可以立即循环该列中的单元格....

      如果您需要更多帮助,这应该可以帮助您开始回复。

      【讨论】:

        【解决方案4】:

        试试:

        Range("A1","A50000").NumberFormat = "dd\/mm\/yyyy"
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-11-17
          • 2015-08-31
          • 2023-03-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多