【问题标题】:Linking two different Excel tables and auto-populate one when populate another链接两个不同的 Excel 表并在填充另一个时自动填充一个
【发布时间】:2021-03-15 11:03:57
【问题描述】:

我有两个不同的 excel 格式的表格,彼此相邻。第一个表(绿色标题)是我必须在 A 列中添加一些化学式的表,B 列将是我将从第二个表(黄色标题)添加的所有化合物的总和,它代表元素周期系统!

我在表 2(黄色标题)中用于计算化合物的公式是这样的:

=C$2*MAX(IFERROR(IF(FIND(C$1&ROW($1:$99);MolM.[@[Mol. Formula]]);ROW($1:$99);0);0);IFERROR(IF(FIND(C$1&CHAR(ROW($65:$90));MolM.[@[Mol. Formula]]&"Z");1;0);0)) (CSE formula)

我通常对新化合物进行更新的内容和方式是,我在 A 列中手动添加新的化学式(没关系),然后拖动表 2(黄色标题)中的主公式来计算所有元素,以及然后在 B 列中求和以获得主要结果!

我的问题是,是否有可能更加自动化,只是当我在 A 列中键入新化合物时,它会像普通表一样扩展,但也会自动扩展和计算其余化合物,而无需我拖动手动公式..?

希望这已经足够清楚了。

有没有可能做到这一点?是唯一的解决方案 Power Query 还是?

【问题讨论】:

  • 要弄清楚你到底想要做什么(或者更确切地说是如何做)有点困难,但几乎任何事情都可以用 VBA 完成。甚至可以使用工作表函数。
  • 因为如果插入新行则不会触发任何事件,我看到的唯一方法是拥有一个在两个表中添加行的按钮或一个从表一复制到表二的按钮。 • 您的问题过于宽泛,无法给出更准确的答案。
  • @Pᴇʜ 是的,我也在考虑,但我应该不使用 VBA,因为共享。
  • @ChristoferWeber 这很简单,我想连接两个几乎不同的表,给我使用两者的结果。但我认为这是针对 VBA 的。
  • @Pᴇʜ 但是等一下,我实际上在第二个表(黄色标题)中得到了一些公式,在那里我计算了摩尔质量 pro/molecule(化合物)。它可以作为触发器有帮助吗?

标签: excel vba excel-formula excel-2016


【解决方案1】:

我在这里做一个疯狂的猜测。 假设您在A3 中写入NH3,然后在I3 中打印I2(“N”的值),并在C2 * 3(“H”乘以3,“H3”的值)中C3。然后让B3 使用 =SUM() 或类似方法计算总值。

您可以有一个 VBA 子程序来查找值并打印它。 这是一个原型:

Sub molFunc(chem As String, formRow As Long)
Dim i As Long, c As String, atoms As Range, a as Range

Set atoms = Range("C1", Cells(1, Columns.count).End(xlToLeft))    
For i = 1 To Len(chem)

    If Not Mid(chem, i + 1, 1) = UCase(Mid(chem, i + 1, 1)) Then 
        c = Mid(chem, i, 2)
        i = i + 1
    Else
        c = Mid(chem, i, 1)
    End If
    
    For Each a In atoms
        If a.Value = c Then
            If IsNumeric(Mid(chem, i + 1, 1)) Then
                a.Offset(formRow - 1).Value = a.Offset(1) * Mid(chem, i + 1, 1)
            Else
                a.Offset(formRow - 1).Value = a.Offset(1)
            End If
        End If
    Next a
Next i
End Sub

然后您可以从您选择的工作表中的Worksheet_Change 事件中调用它。

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing And Target.count = 1 Then
        Application.EnableEvents = False
        Call molFunc(Target.Value, Target.Row)
        Application.EnableEvents = True
    End If
End Sub

【讨论】:

  • 如果您从Worksheet_Change 事件开始修改单元格a.Offset(formRow - 1).Value = 的值,您应该关闭Application.EnableEvents,否则您很容易让事件循环运行。
  • 好吧,“不应该”有任何循环,这要归功于 Intersect 检查,并且宏不应该触及A。但是,是的。在删除大型选择等时,还应该进行检查以防止工作表中出现错误。
  • @ChristoferWeber 是的,伙计!漂亮的gif,正是我想要的!会测试它,我会写我的报告!
  • @Mirza 如果你已经有公式,这可能有点过头了,只需将公式复制到一行就足够了。
  • @ChristoferWeber 但是不要忘记你有 118 个元素,我必须先滚动到最后一列,然后将其复制下来......这太过分了:D
猜你喜欢
  • 2020-10-29
  • 2023-01-14
  • 2013-09-02
  • 2020-05-25
  • 1970-01-01
  • 1970-01-01
  • 2010-10-10
  • 2011-02-25
  • 2011-08-10
相关资源
最近更新 更多