我在表1中的excel中有一个数据表,它引用了许多其他表中的各种不同单元格。当我尝试对工作表进行排序或过滤时,引用会在单元格移动时发生变化。但是,我不想手动进入每个单元格并在任何地方插入$符号,因为有些引用是连续的,我可能想稍后自动填充。
例如,我的一个数据列使用表2,B列23:28,表2,C列1:15和其他一些。使用表2的列B的列的部分在排序之前都在同一位置,每个其他部分也是如此。如果我插入$符号,我将无法再插入空行并使用自动填充来获取新数据。
总之,我想要一种方法来保持我的单元格引用静态而不使用$符号,但仅用于排序/过滤目的。我目前的解决方法涉及复制表的值,粘贴在空白表中,然后排序。我希望有更好的方法来做到这一点。
答案 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)
我自己遇到了麻烦,找到了最好最简单的解决方案......
希望你发现它有效。问候。
答案 5 :(得分:1)
我需要使用引用对单元格进行排序,并且确实需要避免粘贴值以使用..“数据透视表”可以解决问题。
每次更改某些通用数据(在表格中使用)时,请务必右键单击数据透视表并点击“刷新”。
希望它会有所帮助。 安德烈
答案 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)
试试这个方法:
答案 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网格并重新格式化以满足您的需求。