在excel格式列与VBAdate格式

我想重置我的Excel表的格式,问题是我有4列应该是date格式。 如何查找标题中包含“DATE”的所有列(例如:最后加工date,assemblydate,订单date等)并将此格式更改为最新? 注意:需要dynamic,因为将来可能会从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 

只需像这样迭代你的列,检查它们的名字是否包含"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 

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

一个更长的编码选项,但使用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 
 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 

从这里开始,您可以稍后存储循环的单元格/列号,或者立即在此列中循环单元格….

这应该让你开始回来,如果你需要更多的帮助。