VBA将1添加到整个列的公式内的值

时间:2018-02-23 16:22:37

标签: excel-vba vba excel

我是VBA的新手,并尝试自动化某些东西。

目前,我选择整个"列F",然后使用查找和替换更新到下周,因此,在我已包含的示例中,我找到了201751,以及将所有内容替换为201752. F列中的公式已构建,以便根据新周更新数据。我为几十个标签做了这个。但如果我能学会如何自动化1,我可以做其余的事。

我试图录制一个宏,我手动执行此操作,但最终发生的一切是我用201752"替换" 201751。我真正喜欢的是创建一个宏来为包含在F列中的2017或2018的每个值添加1,所以用F1 + 1代替F1,用于F中包含的所有公式。

我对任何解决方案持开放态度,并且我确信有一个更好的解决方案,我只是不知道。非常感谢你的帮助。如果我还不清楚,请告诉我!

示例:

enter image description here

3 个答案:

答案 0 :(得分:0)

如下所示,它将从单元格F1获取值,并向其中添加一个,然后用新值替换F列中的所有公式,它还将确保它不会转到201753,而是它会进入201801的下一次迭代:

Sub foo()
    Dim ws As Worksheet: Set ws = Sheets("SS Lookup")
    'declare and set your worksheet, amend as required
    Findtext = ws.Range("F1")
    ReplaceText = Val(ws.Range("F1")) + 1

    If Right(ReplaceText, 2) = 53 Then
        ValueNew = Val(Left(ReplaceText, 4)) + 1
        ReplaceText = ValueNew & "01"
    End If
    ws.Columns("F").Replace what:=Findtext, replacement:=ReplaceText, lookat:=xlPart
End Sub

<强>更新

要使用多个表格的代码,您可以按如下方式循环使用它们,在下面的示例中,除了一个名为“Main”的表格之外,它将运行所有表格,您可以向IF语句添加更多工作表名称以排除它们:

Sub AllSheets()
For Each ws In ActiveWorkbook.Worksheets
    If ws.Name <> "Main" Then 'exclude Sheet named "Main"
        Findtext = ws.Range("F1")
        ReplaceText = Val(ws.Range("F1")) + 1
        If Right(ReplaceText, 2) = 53 Then
            ValueNew = Val(Left(ReplaceText, 4)) + 1
            ReplaceText = ValueNew & "01"
        End If
        ws.Columns("F").Replace what:=Findtext, replacement:=ReplaceText, lookat:=xlPart
    End If
Next ws
End Sub

答案 1 :(得分:0)

这个宏将从列(F:F Sheet2)中清除(删除)公式,然后在单元格F1中重写“Vlookup”公式,将一(1)个加到“Vlookup”结果中,然后一直到最后列“A”并填写“F”列中的公式。您需要用自己的“Vlookup”语句替换它。 “A”列不得有任何空白单元格。

enter image description here

代码:

Sub addone()

    Dim ws2 As Worksheet
    Set ws2 = Worksheets("Sheet2")
    Application.ScreenUpdating = False
    ws2.Activate
    ws2.Range("F:F").ClearContents
    ws2.[F1].Select
    ActiveCell.Value = "=VLOOKUP(A1,Sheet1!A1:B6,2,0)+1"
    ActiveCell.Offset(0, -5).End(xlDown).Select
    ActiveCell.Offset(0, 5).Select
    Range(Selection, Selection.End(xlUp)).FillDown

End Sub

答案 2 :(得分:0)

除了我关于使用INDIRECT函数的评论之外,我的建议是修改col F中单元格中的公式。公式将使用INDIRECT重新编码,用于外部工作表的范围引用,引入单元格F1中的Year / Week值进入工作簿和工作表名称。因此,对于单元格F7(根据OP提供的屏幕截图),公式为:

=VLOOKUP(A7,INDIRECT("'C:\Users\behess\Documents\COLOR CASE PULL Project\RL CASE PULLS\[" & $F$1 & ".xls]" & $F$1 & "'!$A20:$H$500"), COLUMN(H:H))

现在,当您更改单元格F1中的值时,INDIRECT函数会重新计算表示为字符串的范围引用,并将从新引用的工作簿中获取范围。这避免了需要使用任何宏代码来搜索和替换公式中的文本。

INDIRECT的缺点,以及我对使用它的警惕的原因是,Excel无法通过公式跟踪先例或跟踪依赖。但是,在这种情况下,引用是指外部工作簿,因此无论如何这些功能都不太有用。