Sheet1有90列和288行。每行的一些单元格具有值,而一些单元格为空白(包含公式)。我想重新排列Sheet2中的每一行数据,因为值包含从左到右的单元格,并且空白到右边。我不想删除空白单元格,如果一行没有任何数据将不会被删除。在我的情况下,行顺序非常重要。 Sheet1每5分钟更新一次,如果有可能每5分钟更新一次Sheet2将非常棒。 例: 工作表Sheet1 Sheet1
Sheet2的Sheet2
注意:我的VBA或Macro知识非常基础。如果我没有要求太多,解释应用解决方案将是很好的。 使用Office 365最新版本
答案 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