【问题标题】:Excel VBA : assign formula to multiples dynamic range table in same sheetExcel VBA:将公式分配给同一工作表中的多个动态范围表
【发布时间】:2017-09-10 15:04:27
【问题描述】:

我是新手,正在学习 Excel VBA。我现在遇到了这个问题

  1. 一个工作表中的表超过10个(表数不一致)
  2. 列数一致但各表行数不一致
  3. 我想在每个表的末尾应用一个总行
  4. 之后,我会将相同的公式应用于每个表格,并将结果放在每个表格的右侧

这可能很容易,但核心问题是范围未知。 - 由于它不是 Excel 中的实际表格,所以我尝试首先通过为其创建表格来定义数据的范围,然后再次,我不知道如何在不知道范围的情况下创建表格。

下面是我想出的东西(不是很“动态”)

Sub plsWork()

Set u = ThisWorkbook.Worksheets("Sheet2")
Set f = u.Range("A").Find(what:="Name", lookat:=xlPart)
a = f.Address

Set sht = u.Range(a)

'trying to insert this at the end of the table
Total = Sum(u.Offset(2, 1) + u.Offset(3, 1) + u.Offset(4, 1))

If Cells(i, 2) = vbNullString Then 'this is already not applicable as the top 2 row in colB has null string
u.Offset(i, 1).Value = Total

'putting the table name at F2
u.Offset(-2, 5).Value = u.Offset(-3, 0).Value
u.Offset(-2, 6).Value = Total

u.Offset(-1, 5).Value = u.Offset(2, 0).Value
u.Offset(-1, 6).Value = Sum(u.Offset(2, 1) + u.Offset(2, 2) + u.Offset(2, 3))

u.Offset(0, 5).Value = u.Offset(3, 0).Value
u.Offset(0, 6).Value = Sum(u.Offset(3, 1) + u.Offset(3, 2) + u.Offset(3, 3))

u.Offset(1, 5).Value = u.Offset(4, 0).Value
u.Offset(1, 6).Value = Sum(u.Offset(4, 1) + u.Offset(4, 2) + u.Offset(4, 3))

End Sub

哦,当我运行上面的代码时,“SUM”上出现错误“Sub or Function not defined”

Here is the image of the tables in a sheet
黄色突出显示的是执行子后将出现的内容。

在 Excel 工作表中应用公式并将公式复制粘贴到每个表格非常容易,
但这很乏味,所以我尝试提供一个 vba 代码来提供帮助,以便宏可以按计划运行。

这两天我一直在摸索着来回寻找, 我仍然不知道如何编码。
那么有专家可以告诉我这是否可能吗?喜欢不知道范围?
如果是这样,你们能否告诉我一些关于如何实现这一目标的信息?
谢谢你。我真的很想知道这是否可以做到。

Here is an image of my attempt using provided answer

【问题讨论】:

    标签: vba excel excel-formula


    【解决方案1】:

    你可以试试这样的……

    下面的代码将为每个包含多于一行和四列的表插入一个总行。

    Sub InsertTotalInEachTable()
    Dim ws As Worksheet
    Dim rng As Range
    Dim i As Integer, r As Long, j As Long
    
    Application.ScreenUpdating = False
    
    Set ws = ActiveSheet
    
    For Each rng In ws.UsedRange.SpecialCells(xlCellTypeConstants, 3).Areas
        If rng.Rows.Count > 1 And rng.Columns.Count = 4 Then
            j = 2
            r = rng.Cells(rng.Rows.Count, 1).Row + 1
            Cells(r, rng.Columns(1).Column).Value = "Total"
            For i = rng.Columns(2).Column To rng.Columns(2).Column + 2
                Cells(r, i).Formula = "=SUM(" & rng.Columns(j).Address & ")"
                j = j + 1
            Next i
        End If
    Next rng
    Application.ScreenUpdating = True
    End Sub
    

    【讨论】:

    • 嗨@sktneer,谢谢你的回答!有效!但是我并不完全理解代码,我去谷歌搜索了一些语句,我已经上传了一个截图,我的假设和对代码进行一些调整后失败的尝试。你介意看看吗?如果我要在表格右侧添加一个带有表格名称的不同总数,那么 Offset 是唯一的方法吗? (示例在第一张图片中)Tq
    • 代码循环遍历称为区域的单元格集合,其值为文本或数字,并检查该区域中的行数是否大于 1,列数是否为 4,然后放置求和公式在每个表格或区域下动态显示。另外,请花点时间接受将您的问题标记为已解决的答案。并且不要忘记也为答案投票。 :)
    • 另外关于您的新要求,请打开一个新问题。
    • 嗨@sktneer :) 你的意思是我应该为新上传的图片打开一个新问题吗?这显示了我在进行一些代码调整后遇到的问题?
    • 嗨@sktneer,我提出了一个新问题。 :D 我可以知道你的代码中的 j 代表什么吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-06-14
    • 1970-01-01
    • 2016-02-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    相关资源
    最近更新 更多