【问题标题】:Find First and Last non empty cells move the range to top查找第一个和最后一个非空单元格将范围移动到顶部
【发布时间】:2018-09-10 16:23:34
【问题描述】:

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

导入后

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

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

最终输出

我试图找到第一个非空单元格和最后一个非空单元格。但不确定如何选择单元格范围并移动到第一个可用的单元格。有人可以帮我解决这个问题吗?

提前谢谢你...

【问题讨论】:

  • 遍历列。从第一行的每一列开始,检查是否为空。如果是这样,请删除单元格并向上移动。再次检查,直到它不再为空。移至下一列。你试过什么了?请分享您的代码和任何错误以及它们发生的位置。
  • 是否有与此相关的 XML 文件以及我们可以用来重现问题的 vba 脚本?还是只关心导入后解决问题?
  • 单元格F2上方的那个空间呢?是否也应该向上移动?
  • range.offset
  • @Bharani 宏应该如何知道 F 列是下一组列的一部分?它怎么知道它不是E列?如果没有任何真实的模式,您将无法轻松地制作出这种动态

标签: xml vba excel


【解决方案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

【讨论】:

    【解决方案2】:

    试试这个(未测试):

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-20
      • 1970-01-01
      • 2017-05-12
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多