对于 IF Else 循环在单元格为空时不会停止

Posted

技术标签:

【中文标题】对于 IF Else 循环在单元格为空时不会停止【英文标题】:For IF Else loop not stopping when cells are empty 【发布时间】:2019-10-29 08:22:21 【问题描述】:

我正在创建几个宏来根据公式在 Excel 工作表中填充值,这样文件就不会变得繁重而难以处理。

我在if 语句中使用if else 条件来检查单元格本身和另一列中的单元格是否为空。如果这些单元格为空,则不需要在目标单元格中​​输入任何值。 如果单元格不为空,我首先填写公式,然后确保只保留值。

但对于不需要填写的单元格,则填写公式。

我尝试了几种类型的循环,我也导出了模块,删除它们并再次导入它们,但这不起作用。

我从下面的代码开始:

Sub ActionCI()

i = 4
x = 4
' x is column number of column which needs to be filled in

For i = 4 To 100
    If (ThisWorkbook.Sheets("CHECK IN").Cells(i, x).Value = "" And _
         IsEmpty(ThisWorkbook.Sheets("CHECK IN").Cells(i, 2).Value)) Then Exit For
    End if
    Sheets("CHECK IN").Cells(i, x).Value = "=IFNA(INDEX('PLANNED FOR ARRIVAL'!G:G,MATCH([@REFERENCE],'PLANNED FOR ARRIVAL'!D:D,0)),"""")"
    Sheets("CHECK IN").Cells(i, x).Value = Sheets("CHECK IN").Cells(i, x).Value
Next i
End Sub

然后我尝试了:

Sub ActionCI()

i = 4
x = 4
' x is column number of column which needs to be filled in

For i = 4 To 100
    If (ThisWorkbook.Sheets("CHECK IN").Cells(i, x).Value = "" And _
        IsEmpty(ThisWorkbook.Sheets("CHECK IN").Cells(i, 2).Value)) Then _
        ThisWorkbook.Sheets("CHECK IN").Cells(i, x).Value = ""
        Exit For
    Else
        Sheets("CHECK IN").Cells(i, x).Value = "=IFNA(INDEX('PLANNED FOR ARRIVAL'!G:G,MATCH([@REFERENCE],'PLANNED FOR ARRIVAL'!D:D,0)),"""")"
        Sheets("CHECK IN").Cells(i, x).Value = Sheets("CHECK IN").Cells(i, x).Value
    End If
Next i
End Sub

我可以更改/添加什么来完成这项工作?

我期待细胞 f.ex。在第 10 行第 4 列中,如果之前为空,并且第 10 行第 2 列中的单元格为空,则保持为空。 然而,公式 IFNA... 被插入到这个单元格中(直到第 100 行)

【问题讨论】:

我无法从您提供的内容中重现您的问题。您确定第 2 列中的单元格实际上是空的吗?并且不包含非打印字符或公式?此外,您编写的代码将在遇到第一对空/空白单元格时停止并退出宏,并且不处理范围的其余部分。这就是你想要的吗? 嘿,罗恩,我确定这些单元格中没有字符,因为我先使用清除了需要为空的单元格 Sheets("CHECK IN").Range("B4:B1000").Clear Sheets("CHECK IN").Range("D4:Q1000").Clear 我确实希望代码在遇到第一对空/空白单元格时停止 我没主意了。我复制了你的代码;更改工作表名称,并将公式更改为某个字符串。它的行为与您预期的一样:在 B 列或 D 列中存在非空白的 D 列中填写,然后停止。 【参考方案1】:

我会做什么:

    IsEmpty 替换为LenB(Trim(...),因为它可以处理从外部源导入或复制数据时可能出现的“不可见”字符 在单元格中插入公式时使用Cells().FormulaLocal 使用 var 作为工作表参考,这在您的情况下是正确的,但需要输入过多且出错的机会 在处理单个工作表/工作簿/等时使用 With

所以代码看起来像这样:

Sub ActionCI()

Dim sh as WorkSheet

i = 4
x = 4

Set sh = ThisWorkbook.Sheets("CHECK IN")

With sh
    For i = 4 To 100
        If LenB(Trim(.Cells(i, x).Value)) = 0 And _
           LenB(Trim(.Cells(i, 2).Value)) = 0 Then
            .Cells(i, x).ClearContents ' it is a copy from code but makes no sense for the cell is empty anyway
            Exit For
        Else
            .Cells(i, x).FormulaLocal = "=IFNA(INDEX('PLANNED FOR ARRIVAL'!G:G,MATCH([@REFERENCE],'PLANNED FOR ARRIVAL'!D:D,0)),"""")"
        End If
    Next i
End With
End Sub

【讨论】:

它们不等价。如果单元格包含公式、空格或空字符串,LenB(Trim(cell_ref))=0 将返回 True,而 IsEmpty(cell_ref) 将返回 False @Ron Rosenfeld 绝对正确。但在这种特殊情况下,我认为来自某些外部来源的原始数据不包含公式(@CoKa 将插入它们),但它确实包含无用的空格、空字符串或其他一些可以用LenB(Trim( 有效检测到的空格。跨度> 与此同时,我收到提示,这可能与我使用表格有关。我已经改变了我的桌子的范围,它现在似乎确实可以工作

以上是关于对于 IF Else 循环在单元格为空时不会停止的主要内容,如果未能解决你的问题,请参考以下文章

If 语句不允许插入语句工作,因为单元格为空

Google 电子表格脚本:检查单元格是不是为空

textjoin函数问题?

如何用IF函数判断一个单元格内的文本中包含某几个字

[SoapUI] 在SoapUI里用Java语言判断Excel单元格为空或者Null时出错

考勤表制作