
我有一些电子表格(不是我创建的),其中一列中有一些空白条目,而实际上应该有数据。我想取出每个空单元格,并用最近值高于它。我希望尽可能减少手动干预,因为我必须反复进行此操作。
我以为 Excel 的某个旧版本,或者可能是很久以前的其他电子表格会默认这样做——也就是说,如果您选择了包含 foo 和 bar 的列,并选择了相当于“向下填充”的操作,那么您将获得 WANT 列中的内容。我在 Excel 中实际获得的是 GET 列。
HAVE: WANT: GET:
foo 1 foo 1 foo 1
2 foo 2 foo 2
bar 1 bar 1 foo 1
2 bar 2 foo 2
3 bar 3 foo 3
我担心这可能需要宏才能正确完成。我以前是 Excel 宏方面的专家,但突然间它们全都变成了 VB。
我的退路是将整个内容转储到 CSV 并编写 Python 脚本,但如果有办法在 Excel 中执行此操作,那就更好了。即使它涉及几个不同的手动步骤,也可以;只是不要每组行都执行一个步骤。也就是说,“复制列,对其进行 X 操作,剪切并粘贴回去”的过程可以工作,但“对每次出现的 foo 或 bar 执行 X 操作”则不行。文件太大了。
任何想法都值得赞赏!
答案1
Excel先生有适用于 Excel 的 Ribbon 之前版本的答案。以下是 Excel 2007 的说明。其中 A 列为 foo/bar,B 列为数据:
- 从上到下选择 A 列中的所有数据。
- 点击主页->查找并选择->转到特殊
- 单击“空白”并点击“确定”。(此时,应选择该列中的所有空白,并且单元格 A2 应为活动单元格。)
- 按“=”,然后按向上键选择单元格 A1。
- 按下CtrlEnter将公式复制到所有选定的单元格中。
可选步骤 7:如果您只需要值,请复制整列并“选择性粘贴”顶部的值。
答案2
手动操作:
在 foo-bar 列(例如 A)和数字列(现在是 C)之间添加一列(B)。
B1 中的公式类似于=A1
B2 中的(并复制到数据末尾)=if(A2="",B1,A2)
。B 列现在几乎具有您想要的 foo-bars,但它们是公式的结果,而不是文本。
将 B 列及其paste special
值复制到 A 列中。
您现在可以删除 B 列。
如果您明白了,那么这样做可能比写下描述更快,但您是否喜欢 Python 脚本将取决于电子表格的数量……
答案3
实际上,有一种更简单的方法可以做到这一点,而不必复制需要下拉值的整行。
创建一个新列,使用 =IFBLANK() 函数并按照与 =IF() 函数类似的步骤进行操作。
基本上 =ifblank(如果为真则为值(上面的单元格),(如果为假则为值(同一个单元格))....