excel - 查找给定范围内空单元格的行索引
问题描述
是否可以编写一个 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所以我对此知之甚少,如果我的思维过程太复杂,请见谅。
解决方案
澄清一下:理想情况下,我想取消合并文档中的所有单元格,并用之前合并的单元格的内容填充每个拆分单元格。
- 循环浏览工作表的 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
推荐阅读
- html - 链接 Bootstrap 4 CDN 后 CSS flexbox 无法正常工作
- firebase - 如何部署 firebase 功能?
- php - CSS:如何将顶级 div 添加到 php 代码
- node.js - 如何使用 Axios 获取视频块
- java - Bitbucket 管道找不到 Gradle
- java - i want to set s3 object specific retention
- javascript - 您如何批量删除除固定消息之外的消息?
- javascript - 更新数组内对象的属性
- java - 将 Java 14 记录用于只有最终字段的通用(非数据)类
- python - 如何从python中的csv文件访问或读取特定条目?