查找第一个和最后一个非空单元格将范围移到顶部

时间:2018-09-10 16:23:34

标签: excel xml vba excel-vba

我有一个要求,我需要将xml文档导入到excel文件中,并在一个示例中重新排列它,以了解导入后文件的外观,其中数据可从A列到F列。

导入后

see AngularJS doc

现在我有一组预定义的列,我需要根据第一列中的空白单元格移动该组。

在上面的示例中,列B到E被分组,并且列B的第一个非空单元格从第4行开始。然后我需要在列B中找到最后一个非空单元格,这里是B10。
现在,我需要将所有数据从范围B4到E10移到顶部。如下图

最终输出

After Import

我试图找到第一个非空单元格和最后一个非空单元格。但不确定如何获取所选单元格的范围并移至第一个可用单元格。有人可以帮我吗?

提前谢谢...

2 个答案:

答案 0 :(得分:1)

您可以只使用firstRowlastRow变量,创建范围,然后将其剪切/移动到B1

Sub moveGroup()
Dim rng As Range
Dim firstRow As Long, lastRow As Long
With Columns("B")
    If .Cells(1, 1) <> "" Then  ' Remember Cells(1,1) is RELATIVE to the range "Column B"
        firstRow = 1
    Else
        firstRow = .Cells(1, 1).End(xlDown).Row
    End If
    lastRow = .Cells(Rows.Count, 1).End(xlUp).Row
    Debug.Print "First row is: " & firstRow & "; Last row is: " & lastRow
End With

Set rng = Range("B" & firstRow & ":E" & lastRow)
rng.Cut Destination:=Range("B1")
Application.CutCopyMode = False
End Sub

答案 1 :(得分:0)

尝试一下(未测试):

With Range("B:E")
    .Resize(.SpecialCells(xlCellTypeConstants).EntireRow.Rows(1).Row - 1).Delete xlShiftUp
End With