2015-12-07 3 views
1

У меня есть часть решения, но оно не работает, как я надеюсь, поэтому я пришел к вам за советом.Формат диапазона столбцов на основе их названия - Excel

Я регулярно получаю файлы Excel, где мне нужно изменить форматирование. Я пытаюсь изучить VBA, автоматизируя как можно больше этих процедур.

Один конкретный формат, который я заполняю, преобразует дату в «DDMMYYYY» (09091986), где он обычно приходит как 09/09/1986.

В моем рабочем листе есть три столбца, содержащие даты, все из которых нуждаются в том же форматировании, и все они имеют слово «DATE» в заголовке. Они не смежны друг с другом.

Я также должен быть осторожным, чтобы другие данные не пострадали, поскольку у меня есть имена и адреса, которые могут содержать символы «DATE».

Итак, фоном из пути ... Я пытаюсь выполнить поиск в первой строке, пока не найду слово «Дата», а затем отформатируйте это для каждой ячейки до последней строки, прежде чем переходить к следующему столбцу содержащий слово «DATE» и повторяя его до тех пор, пока все столбцы со словом «DATE» не будут отформатированы.

Уверен, у вас есть простое решение, но я не могу найти его сам.

Вот код, у меня есть ...

Sub Dateformat() 
    Dim LastRow As Integer 
    Dim FindCol As Integer 
    Dim C1 As Integer 

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

    FindCol = Cells.Find(What:="DATE", LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
     False, SearchFormat:=False).Column 

    For C1 = 2 To LastRow 
      Cells(C1, FindCol).NumberFormat = "DDMMYYYY" 
    Next C1 

End Sub 

Это работает для первого столбца, содержащего дату, но не переходить к следующему колонку.

Спасибо за помощь

С уважением, Адам

+0

Есть ли какие-либо другие ** заголовки столбцов **, которые могут содержать слово в них, кроме 3, которые вам нужно отформатировать? –

+0

Почему бы просто не использовать пользовательский формат: 'ddmmyy'? Нет необходимости в vba. Выделите нужные столбцы и примените собственный формат. –

+0

Нет, мы можем использовать «Date» для столбцов, так как не будет никаких других столбцов с заголовком, содержащим «Date». –

ответ

0

Как вы знаете, что вам нужно перебрать и найти каждую строку заголовка с DATE

Вот один из способов сделать это.

Sub Dateformat() 

    Dim wks As Worksheet 
    Dim LastRow As Integer 
    Dim rFound As Range 
    Dim sAdd As String 

    Set wks = ThisWorkbook.Sheets("Sheet1") ' adjust as needed 

    With wks 

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

     'find first instance where DATE exists in row 1 (headers) 
     Set FindCol = .Rows(1).Find(What:="DATE", LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _ 
        False, SearchFormat:=False) 

     'store address of first found instance (to check in loop) 
     sAdd = FindCol.Address 

     Do 

      'format column (row 2 to last used row) 
      .Range(.Cells(2, FindCol.Column), .Cells(LastRow, FindCol.Column)).NumberFormat = "DDMMYYYY" 
      'this line works as well and is a bit cleaner 
      '.Cells(2, FindCol.Column).Resize(LastRow - 1, 1).NumberFormat = "DDMMYYYY"     

      'find next instance (begin search after current instance found) 
      Set FindCol = .Cells.FindNext(After:=FindCol) 

     'keep going until nothing is found or the loop finds the first address again (in which case the code can stop) 
     Loop Until FindCol Is Nothing Or FindCol.Address = sAdd 

    End With 

End Sub 
+0

Большое вам спасибо. Это достигается именно тем, на что я надеялся, и аннотация идеально подходит для кого-то вроде меня, который пытается узнать VBA. Действительно ценю это. –

+0

Отлично. Рад помочь @AdamBlunt! Если это решило вашу проблему, отметьте как ответ. –

+0

Готово. Если бы у меня была лучшая репутация, я бы тоже ее поместил. –