2016-09-28 8 views
-2

Sheet1 90列と288行を持ちます。各行の一部のセルには値があり、一部は空白です(数式を含む)。私はSheet2の各行のデータを値が左に来るセルを含むとして再配置し、空白は右に移動したい。空のセルを削除したくないので、行にデータがない場合は削除されません。私の場合、行の順序は非常に重要です。 Sheet1は5分ごとに更新されました。もし5分ごとにSheet2を更新する可能性があれば、それは本当に素晴らしいでしょう。 例: Sheet1の Sheet1セルの値に基づいて行データを自動的に再編成

Sheet2のSheet2

NB:私のVBAやマクロの知識は非常に基本的なものです。私があまりにも多くのことを求めていないなら、その解決策を適用する説明は素晴らしいでしょう。 オフィスを使用する場合365最新のバージョン

+0

あなたの「VBAまたはマクロ知識」は「非常に基本的」であるとは思われません。実際、それは存在しないように見える。 – Jeeped

+0

まあ、そうです。どんな提案や指示も高く評価されます。とにかく私は私の質問を改善することができますか? – vungvang

+0

私はあなたがコードを要求していて、何も供給していないのであなたの質問に投票しました。これは、あまりにも怠け者であるか、書くことができないというフリーコードを入手する場所ではありません。あなたの質問を改善するには:**あなたの質問にエラーや問題の説明と共にコードを書き込んでください**([ask])。 – Jeeped

答えて

0

開始する場所が見つからない場合は、Worksheet_Change Sheet1のイベントマクロを試すことができます。

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 
+0

あなたの継続的なサポートに感謝します。確かにここから始めて更新します。再度、感謝します。 – vungvang

関連する問題