【问题标题】:Compare two tables with cartesian coordinates and compute difference比较两个具有笛卡尔坐标的表并计算差异
【发布时间】:2020-10-11 17:45:41
【问题描述】:

我有两个包含指定命名点的笛卡尔坐标的表格。

Table1 有类似PX_<number>P_<number> 的点。表 2 有只有数字的点。点的顺序可能是随机的,可能会出现表1或表2中缺少一个或多个点的情况。

我想通过将这两个表合并到第三个表中来比较这两个表,该表将包含配对点和每个坐标的计算(绝对)距离。

它还应该对某些单元格中的差异大于用户期望的单元格进行着色(例如 0,1)。示例:

我想通过 Power Query 来完成,但每次点发生变化时我都需要选择表(它们将从外部源粘贴)。所以我决定通过 VBA 宏来实现,同时通过条件格式为单元格着色。

我对两个表的匹配点有疑问。因此,我决定使用 VBA 中的以下脚本从点中删除不必要的前缀(PX_P_),这可能有助于对它们进行排序和配对。但是,考虑到 Table1 或 Table2 中可能缺少点,我该如何分别配对和列出它们?

Private Sub Filter_points_Click()
    Dim searchRow As Range
    Dim lastRow As Long
    Dim allPoints As Range
    
'   Find lastRow in column B
    Set searchRow = Range("B3:B" & Cells(Rows.Count, "B").End(xlUp).Row)
    lastRow = searchRow.Find("*", , xlValues, , xlByRows, xlPrevious).Row

'   Set Range of existing points
    Set allPoints = Range("B3:B" & lastRow)
    
'   Replace P_ & PX_
    allPoints.Replace What:="P_", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, SearchFormat:=False, ReplaceFormat:=False
    
    allPoints.Replace What:="PX_", Replacement:="", LookAt:=xlPart, _
    SearchOrder:=xlByRows, SearchFormat:=False, ReplaceFormat:=False
End Sub

提前谢谢你。

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    也许你可以在没有 VBA 的情况下解决它。 对不起,我用的是HUN版的Excel,所以我只是尝试正确猜测英文功能。

    1. 在每个表的左侧添加一列,这将是“点”值的“键”。 它们在 T1 和 T2 中的格式相同,因此您可以轻松 VLOOKUP 查找匹配项。 像这样在单元格中使用 sg 函数:

    在 A3 中(用于 T1):

    = "L" & MID(B3,TEXT.FIND("_",B3)+1,100)
    

    在 A10 中(用于 T2):

    ="L" & B10
    

    因此结果表 (T1-T2) 将包含以下内容: 在 C15 中:

    =IFERROR(VLOOKUP($A10,$A$3:$E$5,4,0)-C10,"N.A")
    

    第三张表 (B15..17) 中的 B 列只是指向 T2 (A10..A12) 的简单链接

    结果将如下所示(使用较小的 T1 和 T2 表): enter image description here

    【讨论】:

    • 非常感谢您的回答和想法。看着你的屏幕,你可能有 col_index 的小错字。只有当 T2 包含 T1 中缺少的点时,经过小修复后才可以正常工作。如果 T1 有 T2 中的积分不可用怎么办?在你的情况下,第 3 行的 L5?它也应该列出来。
    • 哇,col_index 打错了,很好 :) 要解决“L5”问题,您需要将行添加到“T1-T2”表,其中 B 单元格相应地链接到 T1 表,并且在表的其余部分产生类似的 IFERROR (VLOOKUP... 函数。这样您将获得重复的行,但如果在 B 列中添加 IF(COUNTIF... 组合,则可以避免它们(因此您可以在如果点 ID 已经出现在 B15-B17 中,则为 B 单元格)。这个简短的评论不是向您深入描述它的正确方式,但我相信您会发现它。:)
    • 感谢链接@ASH。不幸的是,它只比较单列,我需要按点名称将它们一起比较,因为不同的点可以具有相同的单个坐标。
    • @Apafey 遗憾的是我无法让它工作:(。每个单元格都应该有额外的条件以避免重复,而不仅仅是链接到 T2,然后是 T1,因为两个表中的点数可能会有所不同。另外xyz 单元格应该有规则来计算点之间的差异,如果“T1-T2”中的某个点来自 T1,而不是 T2,那么 xyz 单元格中的规则“=IFERROR(VLOOKUP...)”也应该被修改。你能解释一下如何做得更彻底?
    猜你喜欢
    • 1970-01-01
    • 2021-10-03
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-20
    相关资源
    最近更新 更多