删除导致 #REF 错误的行
Deleting of rows causing #REF errors
我有一个工作表,用户可以输入员工姓名和出生日期进行各种计算。一些用户正在删除导致#REF 计算错误的行,我正在寻找解决方案。间接或偏移是我正在考虑解决问题的选项。
这是我在 A 列中的数据:
- 鲍比·琼斯
- 理查德·哈登
- 斯科特·怀特
- 凡妮莎·安德森
H 列从单元格 100 开始我计算 trim 名字:
=IFERROR(RIGHT(A1,LEN(A1)-FIND(" ",A1,1)),"")
- 琼斯
- 哈登
- 白色
- 安德森
我的问题是,如果用户删除了 Richard Haden,例如,单元格 H101 会产生 #REF 错误。如何在 H 列的公式中添加 Indirect 或 Offset 函数,以消除删除行时出现 REF 错误的可能性?
我在上述场景中寻找的结果:
- 琼斯
- 白色
- 安德森
感谢您的帮助!
您可以使用 INDEX
到 return 列中行号交界处的单元格。
例如,INDEX($A:$A,1)
将始终 return 第 1 列第一个单元格中的值。INDEX($A:$A,2)
将始终 return 第二个单元格,依此类推。
所以:
=IFERROR(MID(INDEX($A:$A,1),FIND(" ",INDEX($A:$A,1))+1,LEN(INDEX($A:$A,1))),"")
如果删除现有行,将显示新的第一行。
注:
我通常使用 =MID(A1,FIND(" ",A1)+1,LEN(A1))
而不是 =RIGHT(A1,LEN(A1)-FIND(" ",A1))
但不知道哪个更快。
注2:使用ROW()-99
而不是H100中的1来[=44=]正确的行号。
=IFERROR(MID(INDEX($A:$A,ROW()-99),FIND(" ",INDEX($A:$A,ROW()-99))+1,LEN(INDEX($A:$A,ROW()-99))),"")
注 3: INDEX
是非易失性的,而 OFFSET
是(每 次重新计算 )。
您可以尝试这样的操作:
第一步:将 header 单元格添加到您的姓名列表(单元格 A1),例如 "Names"
第二步:在 F 列中添加来自 F100
的计数器(计数器即 1、2、3、4)
使用偏移量(来自单元格 H100):
=IFERROR(RIGHT(OFFSET($A,F100;0),LEN(OFFSET($A,F100;0))-FIND(" ",OFFSET($A,F100;0),1)),"")
快速参考如何使用 OFFSET
:https://exceljet.net/excel-functions/excel-offset-function。背后的逻辑:当你有计数器时,你总是会在 header 下面得到单元格 X 行。删除行不会改变任何内容。
您将看到此解决方案的一个问题是 trim-rows 随着其他行被删除而逐渐增加。这就是为什么我更喜欢将计算隐藏在单独的选项卡上。
但是,您可以将 OFFSET
与 ROW
组合起来表示 "The row that is as far from POSITION1 as I am from POSITION2"。如果我们使 POSITION1 = $A
(这意味着如果删除第 1 行将失败 - 最好有一个 header 行!)和 POSITION2 = $H0
,那么你可以说
OFFSET($A,ROW()-ROW($H0),0)
一些例子
Cell H100: Row() - Row($H0) = 100 - 100 = 0 | OFFSET($A, 0, 0)
= A1
Cell H101: Row() - Row($H0) = 101 - 100 = 1 | OFFSET($A, 1, 0)
= A2
Cell H110: Row() - Row($H0) = 110 - 100 = 10 | OFFSET($A, 10, 0)
= A11
现在,让我们删除第 2 行。这会将 H100 移动到 H99,将 H101 移动到 H100,将 H110 移动到 H109:
Cell H99: Row() - Row($H) = 99 - 99 = 0 | OFFSET($A, 0, 0)
= A1
Cell H100: Row() - Row($H) = 100 - 99 = 1 | OFFSET($A, 1, 0)
= A2
Cell H109: Row() - Row($H) = 109 - 99 = 10 | OFFSET($A, 10, 0)
= A11
(我在你的公式中看到的另一个问题是有两个 2 个名字的人,例如赛车 driver "Juan Pablo Montoya Roldán" - 他的名字是 "Juan Pablo",他的姓氏是 "Montoya Roldán")
我有一个工作表,用户可以输入员工姓名和出生日期进行各种计算。一些用户正在删除导致#REF 计算错误的行,我正在寻找解决方案。间接或偏移是我正在考虑解决问题的选项。
这是我在 A 列中的数据:
- 鲍比·琼斯
- 理查德·哈登
- 斯科特·怀特
- 凡妮莎·安德森
H 列从单元格 100 开始我计算 trim 名字:
=IFERROR(RIGHT(A1,LEN(A1)-FIND(" ",A1,1)),"")
- 琼斯
- 哈登
- 白色
- 安德森
我的问题是,如果用户删除了 Richard Haden,例如,单元格 H101 会产生 #REF 错误。如何在 H 列的公式中添加 Indirect 或 Offset 函数,以消除删除行时出现 REF 错误的可能性?
我在上述场景中寻找的结果:
- 琼斯
- 白色
- 安德森
感谢您的帮助!
您可以使用 INDEX
到 return 列中行号交界处的单元格。
例如,INDEX($A:$A,1)
将始终 return 第 1 列第一个单元格中的值。INDEX($A:$A,2)
将始终 return 第二个单元格,依此类推。
所以:
=IFERROR(MID(INDEX($A:$A,1),FIND(" ",INDEX($A:$A,1))+1,LEN(INDEX($A:$A,1))),"")
如果删除现有行,将显示新的第一行。
注:
我通常使用 =MID(A1,FIND(" ",A1)+1,LEN(A1))
而不是 =RIGHT(A1,LEN(A1)-FIND(" ",A1))
但不知道哪个更快。
注2:使用ROW()-99
而不是H100中的1来[=44=]正确的行号。
=IFERROR(MID(INDEX($A:$A,ROW()-99),FIND(" ",INDEX($A:$A,ROW()-99))+1,LEN(INDEX($A:$A,ROW()-99))),"")
注 3: INDEX
是非易失性的,而 OFFSET
是(每 次重新计算 )。
您可以尝试这样的操作:
第一步:将 header 单元格添加到您的姓名列表(单元格 A1),例如 "Names"
第二步:在 F 列中添加来自 F100
的计数器(计数器即 1、2、3、4)
使用偏移量(来自单元格 H100):
=IFERROR(RIGHT(OFFSET($A,F100;0),LEN(OFFSET($A,F100;0))-FIND(" ",OFFSET($A,F100;0),1)),"")
快速参考如何使用 OFFSET
:https://exceljet.net/excel-functions/excel-offset-function。背后的逻辑:当你有计数器时,你总是会在 header 下面得到单元格 X 行。删除行不会改变任何内容。
您将看到此解决方案的一个问题是 trim-rows 随着其他行被删除而逐渐增加。这就是为什么我更喜欢将计算隐藏在单独的选项卡上。
但是,您可以将 OFFSET
与 ROW
组合起来表示 "The row that is as far from POSITION1 as I am from POSITION2"。如果我们使 POSITION1 = $A
(这意味着如果删除第 1 行将失败 - 最好有一个 header 行!)和 POSITION2 = $H0
,那么你可以说
OFFSET($A,ROW()-ROW($H0),0)
一些例子
Cell H100: Row() - Row($H0) = 100 - 100 = 0 |
OFFSET($A, 0, 0)
= A1Cell H101: Row() - Row($H0) = 101 - 100 = 1 |
OFFSET($A, 1, 0)
= A2Cell H110: Row() - Row($H0) = 110 - 100 = 10 |
OFFSET($A, 10, 0)
= A11
现在,让我们删除第 2 行。这会将 H100 移动到 H99,将 H101 移动到 H100,将 H110 移动到 H109:
Cell H99: Row() - Row($H) = 99 - 99 = 0 |
OFFSET($A, 0, 0)
= A1Cell H100: Row() - Row($H) = 100 - 99 = 1 |
OFFSET($A, 1, 0)
= A2Cell H109: Row() - Row($H) = 109 - 99 = 10 |
OFFSET($A, 10, 0)
= A11
(我在你的公式中看到的另一个问题是有两个 2 个名字的人,例如赛车 driver "Juan Pablo Montoya Roldán" - 他的名字是 "Juan Pablo",他的姓氏是 "Montoya Roldán")