2014-09-26 26 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

你在上面干什么等同于'过去一周= thisweek'?目前还不清楚你在问什么,请用实例详细说明! – EvenPrime 2014-09-26 13:16:24

+0

我有从每张表格中保存下来的数据的公式,所以每个星期五我都需要通过用今天替换上周的日期来更新日期。所以今天我试图用'20140926'代替'20140919',但是我已经在工作表上运行了一个宏,所以我想替换函数也是它的一部分 – DannyBland 2014-09-26 13:24:12

+0

我想你可能会误解'Replace'函数。如果我运行了'Replace(“这是一只猫”,“猫”,“狗”)',结果将会是''这是一只狗。 Replace对String进行操作并返回一个String。如果你想把它应用到单元格范围,整个工作表或者整个工作簿,你需要做一些不同的事情。事实上,您可能想使用Excel的内置查找/替换功能。 – Blackhawk 2014-09-26 13:26:18

回答

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 

末次

相关问题