自动重新排列基于单元格值的行数据

时间:2016-09-28 19:38:41

标签: excel vba

Sheet1有90列和288行。每行的一些单元格具有值,而一些单元格为空白(包含公式)。我想重新排列Sheet2中的每一行数据,因为值包含从左到右的单元格,并且空白到右边。我不想删除空白单元格,如果一行没有任何数据将不会被删除。在我的情况下,行顺序非常重要。 Sheet1每5分钟更新一次,如果有可能每5分钟更新一次Sheet2将非常棒。 例:  工作表Sheet1 Sheet1

Sheet2的Sheet2

注意:我的VBA或Macro知识非常基础。如果我没有要求太多,解释应用解决方案将是很好的。 使用Office 365最新版本

1 个答案:

答案 0 :(得分:0)

如果您很难找到起点,可以尝试使用Sheet1的Worksheet_Change事件宏。

Option Explicit

Private dALL As Double

Private Sub Worksheet_Change(ByVal Target As Range)
    If Application.Sum(Target.Parent.UsedRange.Cells) <> dALL Then
        dALL = Application.Sum(Target.Parent.UsedRange.Cells)
        On Error GoTo bm_Safe_Exit
        'suspend events so nothing on Sheet2 gets triggered
        Application.EnableEvents = False
        Dim a As Long, i As Long, j As Long, aVALs As Variant
        aVALs = Target.Parent.UsedRange.Cells.Value2
        For i = LBound(aVALs, 1) To UBound(aVALs, 1)
            For j = LBound(aVALs, 2) To UBound(aVALs, 2) - 1
                If Not CBool(Len(aVALs(i, j))) Then
                    For a = j + 1 To UBound(aVALs, 2)
                        If CBool(Len(aVALs(i, a))) Then
                            aVALs(i, j) = aVALs(i, a)
                            aVALs(i, a) = vbNullString
                            Exit For
                        End If
                    Next a
                End If
            Next j
        Next i
        With ThisWorkbook.Worksheets("Sheet2")
            .UsedRange.Clear
            .Cells(1, 1).Resize(UBound(aVALs, 1), UBound(aVALs, 2)) = aVALs
        End With
    End If
bm_Safe_Exit:
    Application.EnableEvents = True
End Sub