如果Excel中有单元格引用,如何在Excel中对表进行排序?

时间:2011-11-02 11:58:48

标签: excel

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

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

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

22 个答案:

答案 0 :(得分:17)

我很确定这可以通过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

希望在您的情况下有效。它解决了我遇到的类似问题。

答案 1 :(得分:11)

对我而言,这就像下面一样 -

我在同一张纸的公式中有纸张名称参考。当我从公式中删除当前工作表名称并对其进行排序时,工作正常。

答案 2 :(得分:7)

即使使用绝对引用,sort也不能正确处理引用。相对引用指向与新行位置相同的相对偏移(这显然是错误的,因为其他行不在相同的相对位置)并且绝对引用不会更改(因为SORT省略了转换绝对引用的步骤在每次重新安排之后)。执行此操作的唯一方法是逐个手动移动行(将引用转换为绝对)。 Excel然后进行必要的引用翻译。 Excel SORT有缺陷,因为它没有这样做。

答案 3 :(得分:6)

您有几个选择:

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

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

HTH

答案 4 :(得分:3)

我自己遇到了麻烦,找到了最好最简单的解决方案......

  1. 将您要制作的数据复制到表格中,然后排序。
  2. 粘贴位于电子表格中的其他位置
  3. 由于您的单元格引用,值会发生变化,但我们不希望如此,请点击弹出窗口进行“粘贴特殊”并选择仅粘贴“值”。
  4. 将您的新数据变成一张桌子并将您的生活排除在外!!!
  5. 希望你发现它有效。问候。

答案 5 :(得分:1)

我需要使用引用对单元格进行排序,并且确实需要避免粘贴值以使用..“数据透视表”可以解决问题。

  1. 使用参考文献准备表格。
  2. 选择表格(带参考)并插入数据透视表
  3. 在数据透视表中,选择所需的过滤器,使数据透视表看起来像原始表(如果需要)。
  4. 根据需要进一步对数据进行排序/过滤。
  5. 每次更改某些通用数据(在表格中使用)时,请务必右键单击数据透视表并点击“刷新”。

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

答案 6 :(得分:0)

最好的方法是将参考数据保存在纸张的一面,将所有公式保存在纸张的另一面。然后在它们之间留下一个空白列(如果你愿意,可以隐藏它)然后你只需要对参考数据进行排序,使公式引用始终指向同一个地方。下行是Excel将在每次排序时重新计算。

答案 7 :(得分:0)

将工作表名称添加到使引用成为绝对值的公式中。 例如,如果单元格引用为= T7,则将其设置为= Sheet1!T7。 粘贴链接将执行相同的操作,除了仅粘贴到另一张纸上时。如果您粘贴到同一张纸,则粘贴链接将无法正常工作。

答案 8 :(得分:0)

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

答案 9 :(得分:0)

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

答案 10 :(得分:0)

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

日期开始结束距离目的地

其中第2行和连续行的开头是前一行结束,距离是结束减去开始。

答案 11 :(得分:0)

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

工作一种享受。

答案 12 :(得分:0)

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

答案 13 :(得分:0)

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

答案 14 :(得分:0)

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

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

请在此处找到示例宏

    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

答案 15 :(得分:0)

试试这个方法:

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

答案 16 :(得分:0)

一种非常简单的方法是将问题列保留在已过滤的数据之外,但是将一列添加到已过滤的部分,并对其进行单元格引用(只需" =' cell'&#34 ;)

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

答案 17 :(得分:0)

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

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

在初始过滤/排序后,您可以通过“行项目编号”来恢复所有内容。注意:仅当您始终按顺序将新行添加到列表末尾时才有效。

答案 18 :(得分:0)

这是一个很好的答案,可以弄清楚排序是如何从其他用户处理的,我会添加我的笔记,以了解它是如何完全正确的以及正确的:

  

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

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

我在实践中经历过的笔记:

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

答案 19 :(得分:-1)

我希望能在这里找到原因,但我认为答案比我们做的更简单。

无论您在工作簿中引用哪个页面,单元格都应该排序。导致问题的原因是当前页面上的任何页面名称引用。

EX:我在今天的工作簿中,我在另一个页面上引用销售代表的数据。

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

所以SUMIFS('销售'!C1,'销售'!A1,今天!C1)现在将是SUMIFS('销售'!C1,'销售'!A1,C1)

如果有人可以启发,为什么它以这种方式工作,那将是惊人的。

答案 20 :(得分:-3)

在要保持不变的单元格的行和/或列前放置一个美元符号。

为我修好了!

答案 21 :(得分:-3)

简单的解决方案 - 从Excel中复制并粘贴到Google表格中。它将所有参考单元格复制为绝对单元格,以便您可以从头开始。然后排序并下载为excel网格并重新格式化以满足您的需求。