【问题标题】:VBA Macro to find range of cells with data on Sheet1 use that range to enter formula in range on Sheet2VBA宏在Sheet1上查找具有数据的单元格范围使用该范围在Sheet2的范围内输入公式
【发布时间】:2020-10-04 20:46:46
【问题描述】:

Excel 2016

我对 VBA 不是很精通,我正在努力学习。

我有一个包含两个工作表的工作簿,Sheet_1Sheet_2

我正在尝试编写一个 VB 宏,如果在 Sheet_1 上满足条件 Is not blank,它将插入 a formula into a specific range of cells on Sheet_2 worksheet

我希望它的工作方式是宏在“工作表 1”A 列中找到第一个和最后一个具有数据的单元格,并使用它来指定“工作表 2”A 列上的范围,在该范围内输入复制下来的公式由“Sheet_1”的范围标识的行数。

因此,如果“表 1”A 列在单元格 A1 – A100 中有数据,则 VB 宏在“表 2”A 列单元格 A2 – A101 中输入公式,并且公式应以相同的方式自动编号数字引用如果它是手动复制下来的。 “Sheet 2”有一个标题行,因此有一行偏移量 (A2 – A101)。

我试图发布一张图片,说明公式应该如何工作,但网站不允许我这样做,但这里是 postimage 上的链接。

Formula Workflow

到目前为止,这是我的宏代码...

Sub InsertFormulasTest()
    Dim Answer As VbMsgBoxResult
    Dim xRow As Long
    Dim xDirect$
    Dim ws As Worksheet: Set ws = Sheets("Sheet_1")
    Dim ws2 As Worksheet: Set ws2 = Sheets("Sheet_2")
    Answer = MsgBox("Insert Formula", vbYesNo, "Insert formula test")
    If Answer = vbYes Then
        Application.ScreenUpdating = False
        xRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
        If xDirect$ <> "" Then
        ws2.Range("A1").CurrentRegion.ClearContents
        xRow = 1
        ws2.Range("A2").Formula = "=IF(Sheet_1!A1>"""", ""Has Data"",""No Data"")"
        End If
    End If
End Sub

【问题讨论】:

    标签: excel vba excel-formula


    【解决方案1】:

    使用您的最后一行 (+1),在 ws2 上,您可以使用最后一行填充公式,如下所示(我刚刚更改了最后一行):

    If Answer = vbYes Then
        Application.ScreenUpdating = False
        xRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
        If xDirect$ <> "" Then
            ws2.Range("A1").CurrentRegion.ClearContents
            xRow = 1
            ws2.Range("A2:A" & xRow).Formula = "=IF('Sheet1'!A1 > """", ""Has Data"",""No Data"")"
        End If
    End If
    

    虽然我不知道 xDirect$ 是什么以及您检查它的目的。


    再试一次

    If Answer = vbYes Then
        xRow = ws.Cells(Rows.Count, 1).End(xlUp).Row + 1
        ws2.Range("A2:A" & xRow).ClearContents
        xRow = 1
        ws2.Range("A2:A" & xRow).Formula = "=IF('Sheet1'!A1 > """", ""Has Data"",""No Data"")"
    End If
    

    【讨论】:

    • 您好,谢谢,但遗憾的是它没有用。是没有提示打开,并且当yes选择它似乎运行时,但它不清楚现有数据,它不会将公式粘贴到任何单元格中。 xDirect$ 来自我在网络搜索中找到的旧代码,我的代码基于该代码在列中找到下一个空单元格,因此我将其用作起点。不理想,但 VBA 技能也不理想。
    • 我已经加入了第二个版本。去掉direct$它什么都不做,要清除的范围也没有重新定义
    • 知道了,如果我用你的代码替换我的代码,然后删除Dim xDirect$ 和` If xDirect$ " " 那么`它可以工作!!谢谢,很开心。
    • 认为我们同时发布了答案。太棒了,谢谢。
    • 刚刚对其进行了测试,尽管它确实有效,但它并没有计算 Sheet1 中的单元格数量,然后将公式添加到 Sheet 2 上的单元格数量中
    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多