如果Excel中有单元格引用,如何在Excel中sorting表格?
我在表1的Excel中有一个Excel表中的数据表,其中引用了许多其他表中的各种不同的单元格。 当我尝试sorting或过滤工作表时,引用会在单元格移动时改变。 但是,我不想手动进入每个单元格,并在任何地方插入$符号,因为一些引用是连续的,我可能想要稍后自动填充。
例如,我的一个数据列使用工作表2,B列23:28,工作表2,列C 1:15等等。 使用工作表2的列B的列的部分在sorting之前都在相同的位置,每个其他部分也是如此。 如果我插入$符号,我将不能再插入空行,并使用自动填充新的数据。
总之,我想一个方法来保持我的单元格引用静态,而不使用$符号,但仅用于sorting/过滤的目的。 我目前的解决方法涉及复制表的值,粘贴在一个空的表,然后sorting。 我希望有一个更好的方法来做到这一点。
我很确定这可以通过indirect()
函数来解决。 这是一个简化的电子表格:
ABCD ... +------------------------------------------------------+- - - - - - - - - 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
,在您进行复杂sorting之前,它可以正常工作。 为了使其对sorting具有鲁棒性,请使用该单元格的行号构build自己的单元格引用,如下所示: =indirect("B"&row())*1.33
。
希望在你的情况下工作。 它解决了我遇到的类似问题。
你有几个select:
(1)当不使用静态引用时,单元格引用无法在sorting时被搞乱。 处理这个问题的最基本的方法是在sorting之前简单地复制和粘贴值,这可以通过一个简单的VBAmacros自动完成。
(2)如果您在公式中使用多个常用范围,则还可以尝试使用命名范围。 您可以将“Sheet2!B23:28”定义为“Range1”,并在公式中引用“Range1”。 在这种情况下,sorting显然不会影响指定范围,因为它是在别处定义的。
HTH
即使使用绝对引用,sort也不能正确处理引用。 相对引用指向与新行位置相同的相对偏移量(这显然是错误的,因为其他行不在相同的相对位置上)并且绝对引用不会改变(因为SORT省略了翻译绝对引用的步骤每行重排后)。 要做到这一点的唯一方法是手动将行(将转换的引用转换为绝对)逐个移动。 Excel然后做参考的必要的翻译。 Excelsorting是不足的,因为它不这样做。
对我来说,这工作如下 –
我在同一张表中有公式中的表名参考。 当我从公式中删除当前工作表名称并对其正确工作进行sorting。
我自己也遇到了麻烦,发现了最好,最简单的解决scheme。
- 将您想要的数据复制到一个表中,然后进行sorting。
- 粘贴在电子表格的其他位置
- 值会因您的单元格引用而改变,但我们不希望这样做,所以单击popup窗口执行“特殊粘贴”,然后select仅粘贴“值”。
- 把你的新数据变成一张表,把你的生活分开!
希望你find它的作品。 问候。
我们也在同样的问题上挣扎。
作为一个解决方法,我们使用macros来转换表列表,sorting列表,然后将列表转换回表。
这里请找一个示例macros
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
我也有同样的问题。 我有一个主表,这是工作簿中其他工作表上的信息摘要。
如果您只是想在存储数据的工作表中过滤/sorting,然后将其恢复到原始状态(无论您正在过滤/sorting),只需将第一列设置为“行项目编号”即可。
在初始filter/sorting之后,您可以通过“行项目编号”使其恢复正常。 注意:只有当您总是将新行按顺序添加到列表的末尾时,这才起作用。
最好的方法是将参考数据保留在工作表的一侧,并将工作表另一侧的所有公式保留。 然后在它们之间留下一个空白的列(如果你想隐藏它),那么你将只sorting参考数据,保持公式引用始终指向同一个地方。 下行是Excel每次你会重新计算。
一个非常简单的方法是将问题列保留在过滤的数据之外,但是在过滤的部分中添加一个列,并在其中引用单元格(简称“=”cell'“)。
这样的问题公式将保持不变,但过滤的数据将正确引用它们,所以你可以使用这些单元格进行相应的sorting
试试这个方法:
- 在要sorting的单元格左侧插入一列。
- 假设列B:G将基于B进行sorting
- 复制col B
- 将值粘贴到列A中
- 突出显示列B:G
- 用#符号replace=符号
- 根据Asorting列A:G
- 突出显示列B:G
- 用#号replace#号
- 删除col A.
- 瞧!
我需要使用引用对单元格进行sorting,并且确实需要避免粘贴值来处理。“数据透视表”完成了任务。
- 准备你的表与参考。
- select表(带引用)并插入数据透视表
- 在数据透视表中,select所需的filter以使数据透视表看起来像您的原始表(如果需要)。
- 根据需要进一步分类/过滤数据。
只要确保右键点击数据透视表,并在每次更改某些通用数据(在表中使用)时点击“刷新”。
希望它会有所帮助。 安德烈
不知道这是否会满足所有,但我find了一个简单的解决方法,为我解决了这个问题。 将所有引用的单元格/公式移动到不同的工作表,以便不引用工作表中要sorting的表格中的任何单元格。 如果你这样做,你可以分类!
这是一个很好的答案来弄清楚如何从另一个用户的sorting工作,我会添加我的笔记,以了解它是不是完全正确的,什么是正确的:
sorting后对公式的影响与复制相同。 sorting不移动行内容,它复制它们。 该公式可能(或可能不取决于abs /相对引用)使用新数据,就像复制的公式一样。
我的意思是,如果公式可以从1行复制到另一个,效果不会改变,sorting不会影响公式结果。 如果公式如此复杂并且依赖于位置,复制它们会改变相对内容,那么不要对它们进行sorting。
而我在实践中经历的logging:
上面的用户说的是正确的,但实际上它有一些例外:包含工作表名称(如sheet1!A1)的列公式的部分被视为绝对引用(尽pipe复制会改变引用,如果它们是相对的)的公式将被复制而不改变引用相对于改变公式的地方这包括当前表单元格完全解决像:sheet1!A2和将被视为绝对引用(仅用于sorting)我testing了这个excel 2010,我不认为这个问题在其他版本中解决。 解决方法是在另一个地方复制和过滤特殊值,然后使用sorting。
对我来说,答案是把数据分成两个网格,在它们之间有一个空白列。 左边的网格是您想要sorting的数据,右边的网格包含您想要计算的公式。 在sorting时,公式只是处理左侧网格中的行中的数据,并不会获得由sorting混淆的行引用。
最简单的方法是使用OFFSETfunction。 因此,对于原始示例,公式将为:= offset(c2,0,-1)* 1.33 =“使用当前单元格(c2)作为参考点,获取单元格在同一行上的内容,但向左一列(b2)乘以1.33“
作品一种享受。
我使用“另存为”将工作表复制到msdos文本格式的新文件。 这样做会删除公式,用计算的值replace单元格内容。 然后以制表符分隔的forms打开新文件,并在定义列之后进行sorting。 我需要通过里程日志的相关文本string(目的地)对计算值进行sorting,以便我可以总结每个目的地的里程数。
date开始结束距离目的地
在第2行和连续的行开始是前一行结束,距离结束减去开始。
创build两个选项卡,其中一个使用公式,然后粘贴链接整个表格。 第二个标签在sorting时应该没有问题!
将一个美元符号放在要保持不变的单元格的行和/或列的前面。
为我修好了!
简单的解决scheme – 从Excel复制并粘贴到谷歌表。 它将所有参考单元格复制为绝对单元格,以便您可以从头开始。 然后sorting并下载回Excel格式并重新格式化您的需求。
我希望能在这里find原因,但我认为答案比我们做得更简单。
单元格应sorting,而不pipe他们在工作簿中引用的页面。 是什么导致我们的问题是当前页面上的任何页面名称引用。
EX:我在“今日”工作簿中,并在不同的页面上引用销售代表的数据。
如果我的标准(代表姓名)在Today!C1(或者$ C1,$ c $ 1),我尝试sorting,工作表将不会识别该行为。 但是,如果您删除引用所在页面的名称(真的是冗余引用),则应该停止此问题。
所以SUMIFS('Sales'!C1,'Sales'!A1,Today!C1)现在是SUMIFS('Sales'!C1,'Sales'!A1,C1)
如果有人可以启发它为什么这样工作,这将是惊人的。