IF & Statement 从 excel 到 VBA
Posted
技术标签:
【中文标题】IF & Statement 从 excel 到 VBA【英文标题】:IF & Statement from excel to VBA 【发布时间】:2016-10-07 12:09:08 【问题描述】:我对使用 VBA 有点陌生。我有一个数据表,它从我使用的一个程序中提取数据,并通过 Microsoft Query 进行过滤。有一列我无法排序,所以我需要使用 if 和语句来删除不需要的数据。我想出了这个 if 语句,它突出显示了我要删除的行,但我不知道如何将它放入 VBA。
=IF(L5="Program",L6<>"lathe"),"2","")
基本上我希望 VBA 查看 L:L 列。如果单元格=程序,并且下面的单元格不等于车床,我希望删除上面的行。如果单元格不相等,则程序继续查找,直到数据结束。
【问题讨论】:
新逻辑,我觉得还是会用到一些旧程序,但是需要用另外一列排序。我需要 VBA 来查看 E:E 列。如果下面行中的单元格与上面的单元格重复,则查看该行中的 L 列以查看该单元格是否显示 Program。如果是这样,下面的单元格应该是车床。如果不是车床删除程序行,如果是车床保留两行。如果 E 列中的单元格不重复,请继续查找。前任。如果E5=E6,如果不是继续查找。如果是,请查看 L5 是否显示 Program。如果是这样,请查看 L6 的车床。如果不删除ROW5。 【参考方案1】:在 VBA 中,您会使用 IF ... And ... Then 结构,因此:
If Range("L5")="Program" And Range("L6") <> "lathe" Then
'Do something
End If
您可能希望将Range(...)
语句替换为某种范围变量以存储您真正感兴趣的单元格,但这应该让您了解您正在寻找的结构。
编辑添加:
像这样遍历所有 L 列:
Dim rngCheck as Range
Dim rngCell as Range
Set rngCheck = Range("L1", "L" & Rows.Count - 1)
For each rngCell in rngCheck
If rngCell.value = "Program" And rngCell.offset(1,0).value <> "lathe" then
rngCell.offset(-1,0).EntireRow.Delete
End if
Next rngCell
这个: 创建要查看的范围(L 列) 循环遍历该列中的所有单元格(For each 循环) 运行我们的 IF 逻辑和 ...如果符合逻辑,则删除整行。
【讨论】:
如何使 VBA 适用于整个 L:L 列 您希望一次遍历 L 列一个单元格。我将进行编辑以反映这种结构。 在尝试运行时遇到应用程序定义或对象定义的错误。 我的错误 - 循环遍历所有列 L 很好,但是当您尝试引用最后一个单元格下方的单元格时,没有一个单元格,因此会出现该错误。试试刚刚发布的修改。 我们可以进行一些更改以提高效率,但它们会使代码更难阅读,而且我不确定这样做是否值得。如果您也想探索,请告诉我。【参考方案2】:这是您背后的想法。您只需要根据需要修复格式。
If cells(5, "L") = "Program" AND cells(6, "L") <> "Lathe" Then
cells (6, "M") = 2
Else
cells (6, "M") = ""
EndIf
【讨论】:
【参考方案3】:最好是在 L 列上循环。假设您的数据是从第 3 行到第 150 行
for i = 3 to 150
if lcase(range("L"&i).value) = "program" and lcase(range("L"&i+1).value) <> "lathe" then
rows(i).entirerow.delete
end if
next i
【讨论】:
以上是关于IF & Statement 从 excel 到 VBA的主要内容,如果未能解决你的问题,请参考以下文章
if statement == true 从数组中删除前一个元素