2016-07-21 3 views
-1

У меня есть тонна листов Excel, каждая из которых имеет 3 вкладки рабочей книги excel. На последнем будет тонна данных, но один столбец будет столбцом даты с рядом разных дат внизу. Формат даты будет ММ/ДД/ГГГГ. Мне нужно продвигать каждую дату вперед на 4 года.Excel Macro To Advance Date

Я предполагаю, что мне нужно будет выбрать нужную книгу, найти конкретный столбец, а затем цикл, чтобы перебирать каждое значение под этим столбцом для его продвижения, но сам день должен оставаться неизменным. Например, если его 10/05/2017, он должен быть 10/05/2021. Любые предложения или помощь были бы замечательными. Заранее спасибо.

Благодарим за помощь, я понимаю, что я не очень помог с моим вопросом. Я очень новичок в VB-скрипте и excel-макросах в целом. Я не получил поиск самого столбца, так как мне бы хотелось, чтобы он нашел столбец независимо от значения столбца (возможно, для поиска ячейки, которая говорит «Дата» по всему листу?), Я просто пытался добавить на 4 года, чтобы начать и не может найти функцию мне нужно. Это то, что я должен был от того, что я получен и кажется, что это очень неправильно га.

Do до IsEmpty (ActiveCell)

Set ThisCell = ActiveCell 

    ThisCell = DateAdd("yyyy", 4, ColumnValueHere) 

    ' Step down 1 row from present location. 
    ActiveCell.Offset(1, 0).Select 

    Loop 
+4

Мне нужно будет увидеть ваш конкретный код, но простой алгоритм должен принять это значение даты и использовать 'dateadd (« yyyy », 4, ColumnValueHere)' взято из [здесь] (http: //www.techonthenet. com/excel/formula/dateadd.php) –

+3

Предложение: Открыть Excel, открыть окно VBA, написать код, вернуться с вопросом, когда вы застряли. Кроме того, по крайней мере, некоторые полезные советы из этого комментария см. Здесь: http://stackoverflow.com/questions/16259166/add-x-number-of-days-to-a-date-with-vba-in-excel и здесь: http://www.techonthenet.com/excel/formulas/dateadd.php – OpiesDad

ответ

0

Вы будете хотеть функция DateAdd

попробовать что-то вроде этого:

Sub AddDates() 

Dim lastRow as integer 
Dim theSheetImWorkingOn as worksheet 
Dim theColumnNumberForTheDates as integer 

theColumnNumberForTheDates = 5 ' change this to be the column number you want 
Set theSheetImWorkingOn = Sheets("Put your sheet name here") 

lastRow = theSheetImWorkingOn.Cells(1000000, theColumnNumberForTheDates).End(xlUp).row 

For x = 2 to lastRow ' assuming your data starts on row 2 

    theSheetImWorkingOn.Cells(x, theColumnNumberForTheDates) = DateAdd("yyyy", 4, theSheetImWorkingOn.Cells(x, theColumnNumberForTheDates)) 

Next x 

End Sub 
+0

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

+0

Я предоставил вам целое решение. Что вам не хватает? – Absinthe

+0

Спасибо, я посмотрю на это. Из того, что я читаю, это означает, что значение столбца и значение строки должны быть указаны в макросе. Есть ли в любом случае, чтобы он искал лист для значения «Дата» в одной ячейке и затем начал продвигать дату каждой ячейки под ним, пока ячейка не будет пуста? Таким образом, не имеет значения, в каком столбце или строке начинались даты? –