gpt4 book ai didi

excel - 去除命名范围左侧的空列

转载 作者:行者123 更新时间:2023-12-04 22:21:37 25 4
gpt4 key购买 nike

假设 rangeData 指的是电子表格中的一个单元格区域。
如果最右边的列是空的,我可以这样做:

rangeData = rangeData.CurrentRegion
但是如果 rangeData 的最左边一列是空的怎么办?
如何剥离该列并让 rangeData 仅引用具有值的列?

最佳答案

奇怪:顺便CurrentRegion在文档中进行了描述,我希望它不包括顶部的空行或左侧的空列。
您可以通过左侧的列查找第一个非空列,然后根据该列设置范围,如下所示:

    Dim i As Long
Dim firstNonEmptyColumn As Long
For i = 1 To rngData.Columns.Count
If WorksheetFunction.CountA(rngData.Cells(1, i).EntireColumn) <> 0 Then
firstNonEmptyColumn = i
Exit For
End If
Next i
Set rngData = Range(rngData.Cells(1, firstNonEmptyColumn), rngData.Cells(rngData.Rows.Count, rngData.Columns.Count))

您可以对顶部的空行执行类似的操作。

更新
让我澄清我的假设并提供更多细节:我假设起始条件是 rngData设置为包含由一些空行/列包围的非空单元格的连续范围。目标是更改 rngData 以使左侧没有空列。
还假设:工作表上方或下方没有超出 rngData 范围的其他非空单元格. (请参阅下面的不同假设。)
初始化 rngData ,我将从包含非空单元格的选择开始。
enter image description here
然后我将运行以下命令——最后我制作 rngData选择以轻松可视化对 rngData 的更改:
Sub test()
Dim rngData As Range
Dim i As Long
Dim firstNonEmptyColumn As Long

Set rngData = Selection

For i = 1 To rngData.Columns.Count
If WorksheetFunction.CountA(rngData.Cells(1, i).EntireColumn) <> 0 Then
firstNonEmptyColumn = i
Exit For
End If
Next i
Set rngData = Range(rngData.Cells(1, firstNonEmptyColumn), rngData.Cells(rngData.Rows.Count, rngData.Columns.Count))
rngData.Select
End Sub
这是结果选择:
enter image description here
请注意 .CurrentRegion将使用第一个(左上角)单元格作为其起始引用点。如果该单元格是空的(如我在此处的示例),则该单元格的当前区域将只是该单元格。 .CurrentRegion确实适用于第一个单元格非空的情况。
但是我展示的使用了 WorksheetFunction.CountA()在一列中的所有单元格上确定该列是否(非)空(它也可以与 .EntireRow 一起使用。)因此它不受范围中的第一个单元格的限制。

第二次更新
在之前的更新中,假设工作表上方或下方没有超出 rngData 范围的非空单元格。 .由于这个假设, .EntireColumn用于检查非空单元格。
如果这对这种情况不合适,那么对具有非空单元格的列的测试可以仅限于 rngData 范围内的单元格。 .以下子将初始化 rngData和以前一样,但检查仅限于 rngData 中的单元格的非空列:
Sub test()
Dim rngData As Range
Dim dataColumn As Range
Dim i As Long
Dim firstNonEmptyColumn As Long

Set rngData = Selection

For i = 1 To rngData.Columns.Count
Set dataColumn = Range(rngData.Cells(1, i), rngData.Cells(rngData.Rows.Count, i))
If WorksheetFunction.CountA(dataColumn) <> 0 Then
firstNonEmptyColumn = i
Exit For
End If
Next i
Set rngData = Range(rngData.Cells(1, firstNonEmptyColumn), rngData.Cells(rngData.Rows.Count, rngData.Columns.Count))
rngData.Select
End Sub
而不是使用 .EntireColumn之前, dataColumn设置为 rngData 内的单元格范围使用 Range(rngData.Cells(1, i), rngData.Cells(rngData.Rows.Count, i)) .也就是说, rngData 内的行的第_i_列中的单元格从 1 到 rngData 中的行数.
对于测试,这是一个起始选择:
enter image description here
注意用于 rngData 的选择下方的非空单元格.运行该子程序后,这是结果选择:
enter image description here

关于excel - 去除命名范围左侧的空列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62649187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com