如果在excel VBA中判断A列中的空白单元格,遇到后就终止程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果在excel VBA中判断A列中的空白单元格,遇到后就终止程序相关的知识,希望对你有一定的参考价值。

在工作表名称上点右键,选查看代码,粘贴下面的代码
Sub 检查空单元格()
Dim rng As Range, arr()
For Each rng In Range("A1:A30")
If rng = "" Then
N = N + 1
ReDim Preserve arr(1 To N)
arr(N) = rng.Address(0, 0)
End If
Next
MsgBox "A1:A30有" & N & "个空单元格," & vbCrLf & "分别是:" & Join(arr, ",")
End Sub

Sub 检查空格()
Dim rng As Range, arr()
For Each rng In Range("A1:A30")
If InStr(rng, " ") <> 0 Then
N = N + 1
ReDim Preserve arr(1 To N)
arr(N) = rng.Address(0, 0)
End If
Next
MsgBox "A1:A30包含空格的单元格有" & N & "个," & vbCrLf & "分别是:" & Join(arr, ",")
End Sub
参考技术A for i = 1 to range("A65536").end(xlup).row()
定义这样一个变量i
对i进行循环就行了。
这是2003的代码,2007及以上的,把65536修改为
1048576
参考技术B 肯定是循环
其中假设一个if
if cells(i,1)="" then ' cells(i,1)表示的是a列
exit for '退出循环
else
你要执行的语句
endif本回答被提问者采纳
参考技术C 看是否适用
if cells(1,i).value<>0 then
exit sub
end if
参考技术D a1.select
i=0
tz=ture
do while tz
if offsetcell(i,0)="" then
tz=false
else
msgbox offsetcell(i,0)
i=i+1
endif
loop

如果 A 列中的单元格为空白,则针对不同工作表中的数据集查找 B 列

【中文标题】如果 A 列中的单元格为空白,则针对不同工作表中的数据集查找 B 列【英文标题】:if cell in column A is blank then vlookup column B against dataset in different sheet 【发布时间】:2015-03-10 14:50:23 【问题描述】:

我正在尝试构建一个简单的宏,该宏将识别 A 列中的任何空白单元格,然后使用 B 列针对我在另一张工作表中创建的数据集自动运行 vlookup。

我正在尝试在 2 本书和记录之间进行对帐。但是,两个文件中的唯一标识符要么匹配,要么单元格为空白,因此我使用“描述”创建了一个新表来填充有助于匹配 2 条记录的唯一标识符。

Records A
`````````
Unique Identifier   |   Description     |   Units
--------------------+-------------------+---------
ADFVBC              |   Alpha Ventures  |   1234
<blank>             |   KDN holdings    |   2155
DQDW1               |   Capital ORD     |   3214

Records B
`````````
Unique Identifier   |   Description         |   Units
--------------------+-----------------------+---------
ADFVBC              |   Alpha Ventures      |   1234
<blank>             |   **KDN holdings INC  |   2155
DQDW1               |   Capital ORD         |   3214

创建的标识符

Records A description   |   Records B description   |   Created Identifiers
------------------------+---------------------------+-----------------------
KDN Holdings            |   **KDN Holdings Inc      |   IDENTIFIER1

例如,两个文件都有 KDN Holdings,但 RecordsA 和 RecordsB 中的唯一标识符都是空白的。此外,两者的描述是不同的。我创建了一个新工作表来使用 2 个不同的描述创建标识符。在黄色中,我突出显示了我希望在宏识别 A 列为空白时自动填充宏的方程。

我想在空白单元格中输入一个公式,根据我创建的唯一标识符数据集查找描述

=VLOOKUP(B10,Identifiers!A:C,3,FALSE)

不确定这是否可行。希望听到反馈。

【问题讨论】:

【参考方案1】:

If 条件缺少右括号: If IsEmpty(Cells(i,1)) Then IsEmpty() 函数有一组括号和 Cells() 函数有一组括号 Cells() 嵌入在 IsEmpty()

【讨论】:

感谢 JMMach。如果我希望代码在 A 列中搜索空白单元格,我将如何调整此语法。我正在尝试自己解决这个问题,但没有取得太大进展。【参考方案2】:

这应该可行。我还包含了很多 cmets 以更好地解释代码在做什么......

Sub test()

Dim i As Integer, j As Integer, k As Integer ' first create variables you might need (I always include a few integers)
Dim aRec As Worksheet, bRec As Worksheet, ident As Worksheet, wb As Workbook ' first create variables you might need

Dim aDesc As String, bDesc As String ' first create variables you might need

Set wb = Excel.ActiveWorkbook ' This assumes your currently active workbook is the one we need to use.
Set aRec = wb.Sheets("Records A") ' Assuming your worksheet names are "Records A", "Records B", and "Identifiers"
Set bRec = wb.Sheets("Records B") ' Assuming your worksheet names are "Records A", "Records B", and "Identifiers"
Set ident = wb.Sheets("Identifiers") ' Assuming your worksheet names are "Records A", "Records B", and "Identifiers"

With aRec ' Using the "Records A" worksheet . . .
    For i = 1 To .UsedRange.Rows.Count ' Loop through each row in the used range...
        If Trim(.Cells(i, 1).Value) = "" Then ' Check if the cell value is blank. I added the "trim" function to eliminate leading or trailing spaces.
            .Cells(i, 1).Value = "=VLOOKUP(" & .Cells(i, 2).Address(0, 0, xlA1) & ", Identifiers!A:C,3,FALSE)"
        End If
    Next i
End With

With bRec ' Using the "Records B" worksheet . . .
    For i = 1 To .UsedRange.Rows.Count ' Loop through each row in the used range...
        If Trim(.Cells(i, 1).Value) = "" Then ' Check if the cell value is blank. I added the "trim" function to eliminate leading or trailing spaces.
            .Cells(i, 1).Value = "=VLOOKUP(" & .Cells(i, 2).Address(0, 0, xlA1) & ", Identifiers!B:C,2,FALSE)" ' <-- notice how I offset this one a little to account for the new description location on the identifiers sheet
        End If
    Next i
End With



End Sub

【讨论】:

@xslyx 不客气,先生!不要忘记将答案标记为正确(如果您喜欢答案,也许可以投赞成票:)【参考方案3】:

会是这样的:

For i = 1 To LastRow
    If IsEmpty(Cells(i,1) Then 'if cell in A is empty
        Cells(i,1).FormulaR1C1 = "=VLOOKUP(RC[+1]Identifiers!C1:C3,3,FALSE) 'Lookup cell in B in Identifier A:C
    End If
Next

更新:

Sub ertdfgcvb()
LastRow = Cells.Find(What:="*", After:=Cells(1, 1), Lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
MsgBox LastRow
For i = 1 To LastRow
    If IsEmpty(Cells(i, 1)) Then 'if cell in A is empty
        Cells(i, 1).FormulaR1C1 = "=VLOOKUP(RC[1],Identifiers!C1:C3,3,FALSE)" 'Lookup cell in B in Identifier A:C
    End If
Next
End Sub

对我的测试数据集来说就像一个魅力。

【讨论】:

我在 Then 部分遇到编译错误。不知道如何排除故障 当我用另一个公式 =INDEX(Sheet1!E:E,MATCH(PMR!B:B,Sheet1!A:A,0)) 替换 vlookup 公式时,我的公式得到了额外的出于某种原因的字符。有任何想法吗?它显示为 =INDEX(Sheet1!E:(E),MATCH(PMR!B:(B),Sheet1!A:(A),0))

以上是关于如果在excel VBA中判断A列中的空白单元格,遇到后就终止程序的主要内容,如果未能解决你的问题,请参考以下文章

在 Excel 中重复宏,直到到达空白单元格

Excel VBA代码用相邻(列)单元格替换空单元格

从excel vba的列中的所有单元格中删除不需要的字符

EXCEL里面怎么自动查看单元格是不是包含在另一列

如果单元格为空白,则清除 VBA 中另一个单元格代码的内容

Excel技巧:判断某一列中的数据是不是在另一列中