首页 > 解决方案 > 查找给定范围内空单元格的行索引

问题描述

是否可以编写一个 vba 宏来确定给定范围内是否有空单元格并返回该单元格的行号?

我是 vba 的新手,在互联网上搜索后我设法写的所有东西都需要一个范围并将其中的每个 emty 单元格涂成红色:

Sub EmptyRed()
    If TypeName(Selection) <> "Range" Then Exit Sub
    For Each cell In Selection
        If IsEmpty(cell.Value) Then cell.Interior.Color = RGB(255, 0, 0)
    Next cell
End Sub 

宏基本上做了我想要的,但不是将空单元格着色为红色,我想知道空单元格的行索引。

一点背景信息:我有一个非常大的文件(大约 80 000 行),其中包含许多合并的单元格。我想用 readxl 将它导入到 R 中。Readxl 拆分合并的单元格,将第一个拆分单元格中的值和 NA 放入所有其他单元格中。但是一个完全空的单元格也会被分配 NA,所以我认为最好的办法是用 Excel 找出哪些单元格是空的,这样我就知道哪个 NA 表示合并单元格或空单元格。非常欢迎任何有关如何解决此问题的建议,谢谢!

编辑:澄清:理想情况下,我想取消合并文档中的所有单元格,并用先前合并的单元格的内容填充每个拆分单元格。但是我在网上找到了应该完全做到这一点的宏,但它们不适用于我的文件,所以我想我可以确定空白单元格,然后在 R 中处理它们。我通常不使用 Excel所以我对此知之甚少,如果我的思维过程太复杂,请见谅。

标签: excelvbareadxl

解决方案


澄清一下:理想情况下,我想取消合并文档中的所有单元格,并用之前合并的单元格的内容填充每个拆分单元格。

  • 循环浏览工作表的 UsedRange 中的所有单元格
  • 如果合并,则取消合并并使用先前合并区域的值填充未合并区域。
  • 如果未合并但为空白,则收集用于地址输出。

    Sub fillMerged()
    
        Dim r As Range, br As Range, mr As Range
    
        For Each r In ActiveSheet.UsedRange
            If r.Address <> r.MergeArea.Address Then
                'merged cells - unmerge and set value to all
                Set mr = r.MergeArea
                r.UnMerge
                mr.Value = mr.Cells(1).Value
            ElseIf IsEmpty(r) Then
                'unmerged blank cell
                If br Is Nothing Then
                    Set br = r
                Else
                    Set br = Union(br, r)
                End If
            End If
        Next r
    
        Debug.Print "blank cells: " & br.Address(0, 0)
    
    End Sub
    

推荐阅读