【问题标题】:How do I sort a table in Excel if it has cell references in it?如果 Excel 中有单元格引用,如何对表格进行排序?
【发布时间】:2011-11-02 11:58:48
【问题描述】:

我在工作表 1 中有一个 Excel 数据表,它引用了许多其他工作表中的各种不同单元格。当我尝试对工作表进行排序或过滤时,单元格移动时引用会发生变化。但是,我不想手动进入每个单元格并在任何地方插入 $ 符号,因为有些引用是连续的,我可能想稍后自动填充。

例如,我的数据列之一使用工作表 2、B 列 23:28、工作表 2、C 列 1:15 以及其他一些。使用工作表 2 的 B 列的列部分在排序之前都在同一个位置,其他部分也是如此。如果我插入 $ 符号,我将无法再插入空行并使用自动填充新数据。

总之,我想要一种方法来保持我的单元格引用静态而不使用 $ 符号,但仅用于排序/过滤目的。我目前的解决方法包括复制表的值,粘贴到空表中,然后进行排序。我希望有更好的方法来做到这一点。

【问题讨论】:

  • 我只想要数字/字符串,不是引用。因此,点击要排序/过滤的列/行的副本然后右键单击要编辑它们的位置,转到粘贴区域(填充符号)。如果不点击某些东西,您会发现一些粘贴选项,它在粘贴符号正下方的箭头上还有更多内容。选择你的工作并快速完成工作。 注意:我使用的是 excel 365(或 2016)

标签: excel


【解决方案1】:

我很确定这可以通过indirect() 函数解决。这是一个简化的电子表格:

            A         B                       C                         D    ...
       +------------------------------------------------------+- - - - - - - - -
     1 |CITY     |Q1-Q3 SALES|ANNUALIZED SALES:(Q1+Q2+Q3)*1.33|
       +======================================================+- - - - - - - - -
     2 |Tampa    | $23,453.00|                      $31,192.49|
       +------------------------------------------------------+
     3 |Chicago  | $33,251.00|                      $44,223.83|
       +------------------------------------------------------+
     4 |Portland | $14,423.00|                      $19,182.59|
       +------------------------------------------------------+
    ...|   ...   |    ...    |              ...               |

通常,单元格 C2 中的公式为 =B2*1.33,在您进行复杂排序之前它可以正常工作。为了使其对排序具有鲁棒性,请使用该单元格的行号构建您自己的单元格引用,如下所示: =indirect("B"&row())*1.33。

希望这适用于您的情况。它解决了我遇到的类似问题。

【讨论】:

  • 这个解决方案为我解决了问题;现在,无论我使用什么版本的 Excel,我所做的排序有多复杂,它都会总是是正确的。 :-D
  • 这个解决方案为我解决了这个问题,但需要注意的是:不能在间接中使用 $ 引用。我不知道为什么,这可能只是我使用它的方式,但 INDIRECT("B2") 与 INDIRECT("$B2") 不同 - 这很奇怪,因为它应该意味着同样的事情?跨度>
  • 如果您的公式引用了同一行,这将起作用。如果您的公式引用了其他行,则将不起作用。
【解决方案2】:

对我来说,这就像下面一样 -

我在同一张工作表的公式中引用了工作表名称。当我从公式中删除当前工作表名称并对其进行排序时,它工作正常。

【讨论】:

  • 我刚遇到和原帖一样的问题,这个答案完全解决了这个问题。
  • 这对我来说非常有效。想知道为什么工作表名称会影响排序处理单元格引用的方式吗?
  • 也解决了我的问题
【解决方案3】:

你有几个选择:

(1) 在不使用静态引用的情况下,在排序时单元格引用不会混乱。处理此问题的最基本方法是在排序前简单地复制和粘贴为值,这可以通过简单的 VBA 宏自动完成。

(2) 如果您在公式中使用多个常见范围,您也可以尝试使用命名范围。您可以将“Sheet2!B23:28”定义为“Range1”并在公式中引用“Range1”。在这种情况下,排序显然不会影响指定的范围,因为它是在别处定义的。

HTH

【讨论】:

  • 我对此投了反对票,因为@Alex Svetlev 的回答表明单元格引用周围有问题 - 使用 INDIRECT("cellref")
  • user3601903 下面的解决方案为我解决了上述问题
【解决方案4】:

即使使用绝对引用,sort 也不能​​正确处理引用。相对引用指向与新行位置相同的相对偏移量(这显然是错误的,因为其他行不在相同的相对位置)并且绝对引用不会改变(因为 SORT 省略了翻译绝对引用的步骤在每行重新排列之后)。做到这一点的唯一方法是手动移动行(已转换为绝对引用)。 Excel 然后对参考资料进行必要的翻译。 Excel SORT 有缺陷,因为它不这样做。

【讨论】:

    【解决方案5】:

    我自己也遇到过这个问题,并找到了最好和最简单的解决方案......

    1. 将要制作的数据复制到表格中,然后排序。
    2. 粘贴在电子表格的其他位置
    3. 值会因您的单元格引用而改变,但我们不希望这样,因此请单击弹出窗口执行“特殊粘贴”并选择仅粘贴“值”。
    4. 将您的新数据转换为表格,整理您的生活!!!

    希望您发现它有效。问候。

    【讨论】:

    • 我经常使用粘贴值。它的问题是它失去了与源单元格的链接。如果源值发生变化,那么您粘贴的值不会改变
    【解决方案6】:

    我需要使用引用对单元格进行排序,并且确实需要避免粘贴要使用的值。“数据透视表”起到了作用。

    1. 用参考资料准备表格。
    2. 选择表(带引用)并插入数据透视表
    3. 在数据透视表中,选择所需的过滤器以使数据透视表看起来像您的原始表(如果需要)。
    4. 根据需要进一步排序/过滤数据。

    每次更改一些通用数据(用于表中)时,请务必右键单击数据透视表并点击“刷新”。

    希望它会有所帮助。 安德烈

    【讨论】:

      【解决方案7】:

      我们也在努力解决同样的问题。

      作为一种解决方法,我们使用宏将表转换为列表,对列表进行排序,然后将列表转换回表。

      请在此处找到示例宏

          Sub Sort_Table()
      
          'change table name to "table1"
          ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$c$4"), , xlYes).Name = _
          "Table1"
          ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2"
      
      
          Dim oSh As Worksheet
          Set oSh = ActiveSheet
        'remove table or list style
         oSh.ListObjects("Table1").Unlist
      
       'Sort List
        Range("B2").Select
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("A2:A4"), _
          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
      With ActiveWorkbook.Worksheets("Sheet1").Sort
          .SetRange Range("A1:C4")
          .Header = xlYes
          .MatchCase = False
          .Orientation = xlTopToBottom
          .SortMethod = xlPinYin
          .Apply
      End With
       'Change list back to table again
        ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$c$4"), , xlYes).Name = _
          "Table1"
        ActiveSheet.ListObjects("Table1").TableStyle = "TableStyleLight2"
        End Sub
      

      【讨论】:

        【解决方案8】:

        我也有同样的问题;我有一个主表,它是我工作簿中其他工作表信息的摘要。

        如果您只想在存储数据的工作表中进行过滤/排序,然后将其返回到其原始状态(无论您按什么过滤/排序),只需将第一列设为行项目编号。

        在您进行初始筛选/排序后,您只需使用“行项目编号”即可将一切恢复正常。注意:这仅在您始终按顺序将新行添加到列表末尾时才有效。

        【讨论】:

          【解决方案9】:

          最好的方法是将参考数据放在工作表的一侧,将所有公式放在工作表的另一侧。然后在它们之间留下一个空白列(如果需要,将其隐藏)然后您将只对参考数据进行排序,使公式参考始终指向同一位置。缺点是每次排序时 Excel 都会重新计算。

          【讨论】:

            【解决方案10】:

            一种非常简单的方法是将问题列排除在过滤数据之外,但将一列添加到过滤部分,并带有对它们的单元格引用(简单地说“='cell'”)。

            这样,问题公式将保持不变,但过滤后的数据将正确引用它们,因此您可以使用这些单元格进行相应的排序

            【讨论】:

              【解决方案11】:

              试试这个方法:

              1. 在要排序的单元格左侧插入一列。
              2. 假设 cols B:G 将基于 B 进行排序
              3. 复制col B
              4. 将值粘贴到列 A
              5. 突出显示列 B:G
              6. 将 = 符号替换为 # 符号
              7. 根据 A 对列 A:G 进行排序
              8. 突出显示列 B:G
              9. 用 = 符号替换 # 符号
              10. 删除列 A。
              11. 瞧!

              【讨论】:

                【解决方案12】:

                不确定这是否能让所有人满意,但我找到了一个简单的解决方法,为我解决了这个问题。将所有引用的单元格/公式移动到不同的工作表,这样您就不会引用工作表中具有要排序的表格的任何单元格。如果你这样做,你就可以解决了!

                【讨论】:

                  【解决方案13】:

                  这是从另一个用户那里弄清楚排序如何工作的一个很好的答案,我将添加我的注释以了解它是如何不完全正确以及什么是正确的:

                  排序后对公式的影响与复制相同。排序不会移动行内容,它会复制它们。该公式可能(也可能不取决于绝对/相对引用)使用新数据,就像复制的公式一样。

                  我的观点是,如果公式可以从 1 行复制到另一行并且效果不变,则排序不会影响公式结果。如果公式非常复杂并且依赖于位置以致于复制它们会更改相对内容,则不要对它们进行排序。

                  还有我在实践中经历的笔记:

                  上面的用户说的对,但实际上它有一些例外: 包含工作表名称的列公式的一部分(如 sheet1!A1)被视为绝对引用(尽管复制会更改引用,如果它们是相对的) 以便在不更改相对于更改公式位置的引用的情况下复制公式的一部分 这包括当前的工作表单元格完全像:sheet1!A2 并将被视为绝对引用(仅用于排序) 我测试了excel 2010的这个,我认为这个问题在其他版本中无法解决。 解决方案是在另一个地方复制并粘贴 special 作为值,然后使用排序。

                  【讨论】:

                    【解决方案14】:

                    我的答案是将数据分成两个网格,它们之间有一个空白列。左边的网格是您希望能够排序的数据,右边的网格包含您要计算的公式。排序时,公式只对左侧网格中的行中的数据起作用,而不会因排序而混淆行引用。

                    【讨论】:

                      【解决方案15】:

                      最简单的方法是使用 OFFSET 函数。因此,对于原始示例,公式为: =偏移量(c2,0,-1)*1.33 ="以当前单元格(c2)为参考点,获取同一行但左边一列的单元格内容(b2)并乘以1.33"

                      工作是一种享受。

                      【讨论】:

                      • 这并没有解决原题中的排序问题。
                      【解决方案16】:

                      我使用“另存为”将工作表复制为 msdos 文本格式的新文件。 这样做会删除公式,仅用计算值替换单元格内容。然后以制表符分隔打开新文件,并在定义列后进行排序。我需要按里程日志的关联文本字符串(目的地)对计算值进行排序,以便总结每个目的地的里程。

                      日期开始结束距离目的地

                      在第 2 行和后续行的开头是前一行的结尾,距离是结尾减去开头。

                      【讨论】:

                        【解决方案17】:

                        创建两个选项卡,一个带有公式,另一个用于粘贴链接整个表格。第二个标签在排序时应该没有问题!

                        【讨论】:

                          【解决方案18】:

                          我希望在这里找到一个原因,但我认为答案比我们提出的要简单。

                          无论单元格在您的工作簿中引用哪个页面,都应进行排序。对我们造成问题的是当前页面上的任何页面名称引用。

                          EX:我在 Today 工作簿中,我正在为不同页面上的销售代表引用数据。

                          如果我的标准(代表姓名)在 Today!C1(或 $C1、$c$1)中,并且我尝试排序,工作表将无法识别该操作。但是,如果您删除引用您所在页面的名称(实际上是冗余引用),则此问题应该停止。

                          所以 SUMIFS('Sales'!C1,'Sales'!A1,Today!C1) 现在将是 SUMIFS('Sales'!C1,'Sales'!A1,C1)

                          如果有人能启发它为什么会这样工作,那就太棒了。

                          【讨论】:

                            【解决方案19】:

                            另一个解决方案是: (1) 复制整个表格 - 粘贴为链接在同一个电子表格中,从现在开始只在“链接表格”上工作 (2) 复制包含要排序的值的列,然后将 values only 粘贴到要排序的表旁边 (3) 选择表格并将所有 = 替换为例如#,这将改变静态文本中的引用 (4) 按粘贴值对表格进行排序 (5) 将所有#替换为=,引用返回 完毕! 使用 excel 快捷方式时速度非常快

                            【讨论】:

                              【解决方案20】:

                              将工作表名称附加到使引用成为绝对引用的公式中。 例如,如果单元格引用为 =T7,则将其设为 =Sheet1!T7。 粘贴链接会做同样的事情,除了粘贴到另一张纸上。如果您粘贴到同一张工作表中,粘贴链接将无法正常工作。

                              【讨论】:

                                【解决方案21】:

                                在您希望保持不变的单元格的行和/或列前面放一个美元符号。

                                帮我修好了!

                                【讨论】:

                                • OP 已经说明了他不喜欢使用美元符号的几个原因。因此,这个答案没有帮助。
                                【解决方案22】:

                                简单的解决方案 - 从 excel 复制并粘贴到 Google 表格中。它将所有参考单元格复制为绝对单元格,因此您可以从头开始。然后以 excel 网格的形式排序并下载回来,并根据您的需要重新格式化。

                                【讨论】:

                                • 如果你想这样做,为什么还要去谷歌表格?只需在 Excel 中粘贴“仅值”即可。
                                猜你喜欢
                                • 1970-01-01
                                • 1970-01-01
                                • 2013-03-18
                                • 2021-10-08
                                • 1970-01-01
                                • 1970-01-01
                                • 2016-12-22
                                • 1970-01-01
                                • 1970-01-01
                                相关资源
                                最近更新 更多