vba - 根据 MS Excel 中同一行(日期和文本)中的 2 个条件删除行
问题描述
SO社区。我有一个显然无法靠自己解决的问题。这是出于自我教育目的,仅与学校作业有关。所以,我有多个列,其中包含不同的值类型。在下面的示例中,有 3 列:
- 第 1 栏“日期”——日期;
- 第 2 列“ID” - 编号;
- 第 3 列“字母” - 文本。
我正在尝试做的 - 基于“日期”和“字母”列删除比例如 29.06.2015 更早的行,同时该日期分配了一个字母“A”。所以,基本上如果日期早于 29.06.2015 并且该行包含字母“A”,它将被删除,如果不是 - 它保持原样。
Date ID Letter
12.01.2013 1 A
05.02.2014 2 A
29.06.2015 3 A
04.01.2016 4 A
17.12.2014 5 A
12.01.2013 6 B
05.02.2014 7 B
29.06.2015 8 A
04.01.2016 9 F
17.12.2014 10 F
所以最终的结果应该是这样的:
Date ID Letter
29.06.2015 3 A
04.01.2016 4 A
12.01.2013 6 B
05.02.2014 7 B
29.06.2015 8 A
04.01.2016 9 F
17.12.2014 10 F
我一直在寻找解决这个问题的方法,发现了这样的文章,还有一些其他的文章,但它们关注的内容略有不同,因为我无法真正思考该怎么做。
解决方案
试试这个代码
Option Explicit
Sub DeleteOld(ByVal MinDate As Date)
Dim i As Integer
i = 2
Do While CStr(ActiveSheet.Cells(i, 1).Value) <> "" And CStr(ActiveSheet.Cells(i, 2).Value) <> "" And CStr(ActiveSheet.Cells(i, 3).Value) <> ""
If DateDiff("d", CDate(ActiveSheet.Cells(i, 1).Value), MinDate) > 0 And CStr(ActiveSheet.Cells(i, 3).Value) = "A" Then
ActiveSheet.Rows(i).EntireRow.Delete
Else
i = i + 1
End If
Loop
End Sub
Sub TestDeleteOld()
Call DeleteOld(DateSerial(2015, 5, 29))
End Sub
推荐阅读
- assembly - 如何使用两个寄存器进行寻址?
- sql - 什么 T-SQL 查询将检索电子邮件列的所有值,其中 First_Name 和 Last_Name 列的值位于电子邮件列中?
- python - VsCode pycodestyle 安装失败
- javascript - YTDL-CORE 不再工作“找不到播放器配置”
- linux - 如何使用 fetch 将输出添加到 txt 文件,而不是覆盖文件?
- angular - 角度日期选择器验证
- python - 查询 [INFORMATION_SCHEMA].[TABLES] 时,SQLAlchemy 在插入期间挂起
- python - 数据表中的径向热图
- c# - 将 isChecked 绑定添加到自定义 ToggleSwitch
- azure - Centos Docker:对等方重置连接