首页 > 解决方案 > 在 VBA 中使用 Len 和左(或中)

问题描述

我有一个看起来像这样的文件: 在此处输入图像描述

我需要做的是使用 VBA 从范围中删除每个单独的“NA”。无需移动细胞。

我不能做(替换),因为其他字符串中可能有“na”。我认为“Instr”不会出于同样的原因工作。

我尝试了几种我认为可行的方法,但由于我无法理解的原因,它们没有。

起初我尝试了 Left + Len,如下所示:

dim nb as workbook

for i = 2 to nb.sheets(1).cells(rows.count, 17).end(xlup).row

if left(range("Q" & i).value, 2, "NA", Len(range("Q" & i).value)) then
nb.sheets(1).range("Q" & i).value = ""

end if
next i

当那不起作用时,我尝试了这个:

for i = 2 to nb.sheets(1).cells(rows.count, 17).end(xlup).row

if mid(range("Q" & i).value, 0 + 2, Len(range("Q" & i).value)) And _
Instr(1, (range"Q" & i).value), "NA") then
nb.sheets(1).range("Q" & i).value = ""

end if
next i

我还尝试了许多其他方法来重新排列 Len、Left 和 Mid,但都没有奏效。

即使解决方案不必使用 Left (mid) 和 Len,有没有办法做到这一点?如果没有,还有其他方法吗?

标签: excelvba

解决方案


Range这将更新您指定的每个单元格。

Sub test()
    Dim c As Range
    For Each c In Range("A1:Z100")
        If c.Value = "NA" Then c.Value = ""
    Next
End Sub

但是对于这么简单的事情,只使用内置的替换更有意义。


推荐阅读