微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

链接两个不同的 Excel 表并在填充另一个时自动填充一个

如何解决链接两个不同的 Excel 表并在填充另一个时自动填充一个

我有两个不同的 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 列中输入新化合物时,它会像普通表格一样展开,但也会自动展开并计算其余化合物,而无需拖动手动公式..?

希望这已经足够清楚了。

Table 1 (Green) and Table 2 (Yellow)

Tables "break line"

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

解决方法

我在这里胡乱猜测。 假设您在 A3 中写入 NH3,然后让它在 I2 中打印 I3(“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,1)) Then 
        c = Mid(chem,i,2)
        i = i + 1
    Else
        c = Mid(chem,1)
    End If
    
    For Each a In atoms
        If a.Value = c Then
            If IsNumeric(Mid(chem,1)) Then
                a.Offset(formRow - 1).Value = a.Offset(1) * Mid(chem,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

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。