Excel 使用笛卡尔坐标比较两个表并计算差异

Excel 使用笛卡尔坐标比较两个表并计算差异,excel,vba,Excel,Vba,我有两个表,其中包含指定命名点的笛卡尔坐标 表1中的点的名称类似于PX\u或p\u。表2列出了只有数字的点。点的顺序可能是随机的,可能会出现表1或表2中缺少一个或多个点的情况 我想通过将这两个表合并到第三个表来比较这两个表,第三个表将包含成对的点和每个坐标的计算(绝对)距离 此外,当用户在某些单元格(例如0,1)中的差值大于用户期望值时,它还应为单元格着色。例如: 我想通过Power查询来实现这一点,但每次点发生变化时,我都需要选择表(它们将从外部源粘贴)。所以我决定通过VBA宏实现,同时通

我有两个表,其中包含指定命名点的笛卡尔坐标

表1中的点的名称类似于
PX\u
p\u
。表2列出了只有数字的点。点的顺序可能是随机的,可能会出现表1或表2中缺少一个或多个点的情况

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

此外,当用户在某些单元格(例如0,1)中的差值大于用户期望值时,它还应为单元格着色。例如:

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

我对两个表中的匹配点有问题。因此,我决定用VBA中的以下脚本删除不必要的前缀(
PX_
P_
),这可能有助于对它们进行排序和配对。但是,考虑到表1或表2中可能缺少点,我如何将它们配对并分别列出

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

提前感谢您。

也许您可以在没有VBA的情况下解决此问题。 对不起,我使用的是HUN版本的Excel,所以我只是想正确地猜测英文函数

  • 在每个表的左侧添加一列,这将是“点”值的“键”。 它们在T1和T2中的格式相同,因此您可以轻松地对它们进行VLOOKUP以查找匹配项。 在单元格中的功能如下:
  • 在A3中(对于T1):

    在A10中(对于T2):

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

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

    结果如下所示(T1和T2表较小):

    非常感谢您的回答和想法。看看你的屏幕,你可能有小字体和颜色索引。在小的修复之后,仅当T2包含T1中缺少的点时,is才开始工作。如果T1中的点在T2中不可用,该怎么办?你的情况是第3排的L5?它也应该被列出。哇,col_索引输入错误,太棒了:)要解决“L5”问题,您需要在“T1-T2”表中添加行,其中B单元格相应地链接到T1表,并在表的其余部分创建类似的IFERROR(VLOOKUP…函数。这样您将获得重复的行,但如果添加if,则可以避免它们(B列中的COUNTIF…组合(因此,如果点ID已出现在B15-B17中,则可以在B单元格中使用“”)。此简短注释不是向您深入描述它的适当方式,但我相信您会找到它。:)也许:谢谢链接@ASH。不幸的是,它只比较了单个列,我需要按点名称将它们比较在一起,因为不同的点可以有相同的单个坐标。@Apafey很遗憾,我无法让它工作:(.每个单元格都应该有额外的条件以避免重复,而不仅仅是链接到T2,然后是T1,因为两个表中的点的数量可能不同。此外,如果“T1-T2”中的某个点来自T1,而不是T2,则xyz单元格应该有规则来计算点之间的差异,因此规则“=IFERROR(VLOOKUP…)在xyz中,单元格也应该修改。您能解释一下如何更彻底地修改吗?
    = "L" & MID(B3,TEXT.FIND("_",B3)+1,100)
    
    ="L" & B10
    
    =IFERROR(VLOOKUP($A10,$A$3:$E$5,4,0)-C10,"N.A")