vba - VBA:删除范围内的特定列
问题描述
我正在做一个项目,我需要一个程序来删除 A 到 F 列和 J 列中的空列(标题除外)。我希望它循环Range("A10:F10000")
并Range("J:J")
删除单元格 A10 中的列, B10 等向下,然后将剩余的数据向左移动。我正在处理这个,这会影响整个工作表,而不仅仅是一个范围:
ecl = Sheet1.Cells.SpecialCells(xlCellTypeLastCell).Column
For cl = ecl To 1 Step -1
cnt = Application.WorksheetFunction.CountA(Sheet1.Columns(cl))
If cnt = 1 Then
Sheet1.Columns(cl).Delete
End If
Next
我通常可以使用公式并且对 VBA 不是很熟悉,但是对于这个项目,它必须是一个宏。我希望这是有道理的,并会感谢任何建议!
解决方案
你可以使用这个:
Dim cl As Range, colsToDelete As Range
With ActiveSheet 'reference wanted sheet
Set colsToDelete = .UsedRange.Columns(.UsedRange.Columns.Count).Offset(, 1).Resize(1, 1) ' initialize 'colsToDelete' to a "dummy" range certainly out of relevant one
With Intersect(.Range("A10:J" & .UsedRange.Rows(.UsedRange.Rows.Count).Row), .Range("A:F, J:J")) ' reference referenced sheet range in column A to F and G form row 10 down to referenced sheet last not empty cell row
For Each cl In .Columns ' lop through referenced range columns
If Application.WorksheetFunction.CountA(cl) = 1 Then Set colsToDelete = Union(colsToDelete, cl) 'if current column is empty (i.e. only header in row 10) then add it to the colsToDelete range
Next
Set colsToDelete = Intersect(colsToDelete, .Cells) ' get rid of the "dummmy" range
End With
End With
If Not colsToDelete Is Nothing Then colsToDelete.EntireColumn.Delete ' if any range to delete, do it!
推荐阅读
- mongodb - 如何计算数组中已识别项目的平均值?
- jenkins - Jenkins SCM 轮询因系统崩溃而错过 - 如何尽快轮询?
- reactjs - 我收到一条警告消息,说“不要直接改变状态”。
- node.js - npx create-react-app my-app 安装包后卡住
- c# - 如何在返回 Task 的 Asp.Net Core Web API 操作中引发异常
? - docker - 反正有没有使用 github / gitlab 下载 docker 镜像?
- react-native - React Native 中的后台作业
- angular - Angular PWA SwUpdate Snackbar
- python - 导出到 Excel 文件时如何保留数据框数据类型?
- json - Blazor manifest.json 中的特殊字符(德语变音符号)?