
複数行にデータがあるワークシートがあり、この情報を折りたたんで上に移動し、1 つの列を主要な参照ポイントとして使用して null スペースを削除する必要があります。
たとえば、列 A に値 a と CB が含まれているテーブルがあります。列 B、C、D にもデータがありますが、行には 2 つの列のデータしか含まれておらず、他の列は空のままです。最初の列が一致する場合は、行のすべての値を上方に移動して空白を埋める必要があります。列を上方に移動した後、最後の行に null データを含めることができます。データを上方に移動するだけで済みます。
私がやろうとしていることは次のとおりです。列と行のヘッダーがリストされていません
a 1 null null
a 2 null null
a null 1 null
a null 2 null
a null null 1
a null null 2
a null null 3
B 1 null null
B 2 null null
B null 1 null
B null 2 null
B null null 1
B null null 2
B null null 3
C 1 null null
C 2 null null
C null 1 null
C null 2 null
C null 3 null
C null null 1
C null null 2
データを統合して移動する必要がある
a 1 1 1
a 2 2 2
a null null 3
B 1 1 1
B 2 2 2
B null null 3
C 1 1 1
C 2 2 2
C null 3 null
誰か助けてくれませんか?
答え1
で始まります:
マクロの実行MAIN()
:
Dim DidSomething As Boolean
Sub MAIN()
DidSomething = True
While DidSomething
Call KompactData
Wend
Call RowKiller
End Sub
Sub KompactData()
Dim N As Long, i As Long
Dim j As Long, v As Variant
N = Cells(Rows.Count, "A").End(xlUp).Row
DidSomething = False
For j = 2 To 4
For i = 2 To N
v = Cells(i, j).Value
If (v <> "") And (Cells(i - 1, j) = "") And (Cells(i, 1) = Cells(i - 1, 1)) Then
Cells(i - 1, j) = v
Cells(i, j).ClearContents
DidSomething = True
End If
Next i
Next j
End Sub
Sub RowKiller()
Dim N As Long, i As Long, r As Range
N = Cells(Rows.Count, "A").End(xlUp).Row
With Application.WorksheetFunction
For i = N To 1 Step -1
Set r = Range(Cells(i, 1), Cells(i, 4))
If .CountBlank(r) = 3 Then
r.Delete Shift:=xlUp
End If
Next i
End With
End Sub
生成されます: