【问题标题】:Excel - Delete all one-to-one rows between two columnsExcel - 删除两列之间的所有一对一行
【发布时间】:2012-06-21 22:40:26
【问题描述】:

问题:我有 A 列和 B 列。A 列是可预测的,A 列有数千行。 B 列的每个 A 列都有不同的行。例如,A 列的值 REQ_000021 可能在 B 列中有 5 行。这些都可以。我需要删除的行是每个 A 列只有一个 B 列的行。

我知道这不是人们做的典型事情,所以我找不到一个 VB 脚本来做这件事。 如果网站允许,我会发布图片。首先需要 15 个代表点。

编辑:
我刚刚学会了如何在 stackoverflow 上换行,所以这里是:

上校 A 上校 B
----------------------------------
斯科特我们
德国
西班牙
----------------------------------
布莱恩美国
----------------------------------
标记我们
----------------------------------
意大利
蒂姆·葡萄牙
爱尔兰
----------------------------------

删除 brian 和 Mark,因为 A 列和 B 列各占一行。
让 Scott 和 Tim 一个人呆着,因为每列 A 行有不止一个 B 列行。请记住,Scott 和 Tim 的 A 列是大的合并行。
这就是我想要完成的。

编辑:
根据 Scott 的回答,这是输出:
为了让其他正在查看此内容的人清楚,我为一些标记添加了标题。


编辑: 以下 VB 脚本将删除 C 列中具有“DELETE”值的任何行。
我在 Excel 中将它用作宏。对于不熟悉宏的用户,请在 Excel 2007 中启用开发人员视图,以访问可让您切换到 VB 屏幕的视图。

子 deleteDeleteString() 变暗为范围,单元格为范围,删除为范围 将 strCellValue 调暗为字符串 设置 rng = Intersect(Range("C:C"), ActiveSheet.UsedRange) 对于每个单元格 strCellValue = (cell.Value) '如果在 C 列的单元格中发现 DELETE 大于 0 次,则删除它的整行 如果 InStr(strCellValue, "DELETE") > 0 那么 如果 del 什么都不是,那么 设置 del = 单元格 否则:设置 del = Union(del, cell) 万一 万一 下一个单元格 出错时继续下一步 del.EntireRow.delete 结束子

【问题讨论】:

  • 这是有效的,因为对于合并的单元格,Excel 会读取合并区域最左上角单元格中的值,而不管数据最初是在哪个单元格中输入的。

标签: excel vbscript xls xlsx


【解决方案1】:

这是基于您对数据格式进行编辑的新公式。

将以下公式放在C1中并向下运行列以获取要删除的行:

=IF(OR(ISBLANK(A1),ISBLANK(A2)),"","DELETE")

您可能希望也可能不希望首先取消合并 A 列中的单元格,但考虑到 Excel 如何处理合并单元格的规则,这无关紧要。我在您提供的数据集上对此进行了测试,无论是否合并单元格都有效。

我不提供 VBA 解决方案,因为您在这里不需要。运行此公式,而不是在 C 列上筛选“DELETE”并删除您的行。

【讨论】:

  • 感谢您的宝贵时间。我更新了我的问题以更好地反映我正在寻找的东西,因为我在 stackoverflow 上学习了更多格式选项。我必须为表格使用一个
     封闭标签才能产生间距。我还必须为每个换行符使用 
    标签。
  • 是的,我可以作为 Excel 宏输入的 VBA 脚本会很好。
  • 我根据您更新的问题更新了我的答案。这里不需要 VBA,所以我没有走那条路。
猜你喜欢
  • 1970-01-01
  • 2021-07-27
  • 2022-01-16
  • 1970-01-01
  • 2011-01-09
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
相关资源
最近更新 更多