2016-04-14 3 views
0

私のExcelシートの書式設定をリセットしようとしていますが、問題は4つの列が日付形式であることです。ヘッダーに "DATE"が含まれている列をすべて検索するにはどうすればいいですか(最後の機械加工日付、アセンブリ日付、注文日など)、この形式を現在の日付に変更しますか?注:将来的にC:CからE:Eに変更される可能性があるため、動的に変更する必要があります。フォーマットの列がExcelのvbaから日付形式

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 
+0

正確にヘッダ行には何ですか?それらはすべて「日付」という言葉を含んでいますか?ヘッダー行のすべての日付に「/」が含まれているとしますか? – Will

+0

ヘッダーは2行目にあり、ヘッダー行は次のようになります(ID、LAST MACHINED DATE、図番号、推定時間、PDF、TXTなど)。 – skatun

答えて

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 

実行このマクロは、新しい列を追加するたびに。ここから

0
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 

後でループまたはループすぐにこの列のセルのためのセル/列番号を格納することができますいずれか....

これはあなたが必要な場合だけでポストバック始める必要がありますもっと助けてください。

1

より長いコーディングオプションですが、範囲をループしないようにするには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 
-1

試してみてください。

Range("A1","A50000").NumberFormat = "dd\/mm\/yyyy" 
関連する問題