2014-09-26 8 views
2
на этой неделе

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

Dim lastweek As String 
lastweek = Format(Now - 7, "yyyymmdd") 
Dim thisweek As String 
thisweek = Format(Now, "yyyymmdd") 
Replace (lastweek,lastweek,thisweek) 

Кроме того, я использую правильную формулу на прошлой неделе, где я хочу вывести дату на 7 дней назад?

+0

Что вы делаете выше эквивалентно 'lastweek = thisweek'? Непонятно, что вы просите, пожалуйста, продумайте пример! – EvenPrime

+0

У меня есть формулы, которые извлекают данные из листов, сэкономленных еженедельно, поэтому каждую пятницу мне нужно обновить дату, заменив дату последних недель на сегодня. Поэтому сегодня я пытаюсь заменить «20140919» на «20140926», но я уже запустил макрос на листе, поэтому хочу, чтобы функция замены также была его частью. – DannyBland

+0

Я думаю, что вы можете неправильно понимать функцию «Заменить». Если я запустил 'Replace (« Это кошка »,« cat »,« dog »), результатом будет« Это собака ». Replace работает с строкой и возвращает строку. Если вы хотите применить его к диапазону ячеек, всего рабочего листа или даже всей книги, вам нужно сделать что-то немного другое. На самом деле, скорее всего, вы хотите использовать встроенную функцию поиска/замены Excel. – Blackhawk

ответ

2

Преобразовать последнюю неделю Дата и добавьте 7 дней к нему, чтобы получить на следующей неделе значение,

Function MyWeek(lastweek As String) As String 
lw = DateSerial(CInt(Left(lastweek, 4)), CInt(Mid(lastweek, 5, 2)), CInt(Right(lastweek, 2))) 
MyWeek = Format(lw + 7, "yyyymmdd") 
End Function 

Затем используйте,

=REPLACE(A1,SEARCH("2*]",A1,1),8,Myweek(MID(A1,SEARCH("2*]",A1,1),8))) 

заменить дату с новой датой, предполагая вашу строку для замены находится в ячейке A1

1

Вы также можете использовать опцию автофильтра в VBA. Просто вставьте следующий код в модуль следующим образом:

Sub date_change() 
Dim filter_column As Range 
Dim start_date As Date 
Dim end_date As Date 

With ActiveSheet 
    .AutoFilterMode = False 
    Set filter_column = .Range("j1") 'give the column which has the date that needs to be changed 
    end_date = Now - Weekday(Now, vbSunday) 
    end_date = DateSerial(Year(end_date), Month(end_date), Day(end_date)) 
    start_date = end_date - 6 
    start_date = DateSerial(Year(start_date), Month(start_date), Day(start_date)) 
    .Rows(1).AutoFilter Field:=filter_column.Column, Criteria1:=">=" & start_date, Operator:=xlAnd, Criteria2:="<=" & end_date 
    .Range(.Cells(2, filter_column.Column), .Cells(.Rows.Count, filter_column.Column).End(xlUp)).Select 

     If WorksheetFunction.Subtotal(3, Selection) <> 1 Then 
      Selection.ClearContents 
      Selection = Now 
     End If 

End With 

End Sub

Смежные вопросы