Здравствуйте. Я пытаюсь изменить порядок данных в Excel с помощью VBA.
Текущие данные
Project Task Resource
P1 T1 R1
P1 T1 R2
P1 T3 R3
P1 T3 R4
P1 T3 R5
P2 T6 R6
P2 T7 R7
Я хочу, чтобы это выглядело так:
Project Task Resource
P1 T1 R1 R2
P1 T3 R3 R4 R5
P2 T6 R6
P2 T7 R7
Ресурсы распределяются в зависимости от проекта и задачи. Я хотел сначала протестировать проект и задачу, и поэтому я написал:
Sub Test()
Dim rw As Long, cl As Long
Dim Text As String
Dim Text2 As String
With ActiveSheet
For rw = .Cells(Rows.Count, 1).End(xlDown).Row To 6 Step 1
For cl = .Cells(rw, Columns.Count).End(xlToLeft).Column To 3 Step 1
If Not IsEmpty(.Cells(rw, cl)) Then
Text = Cells(rw, 1).Value
Text2 = Cells(rw + 1, 1).Value
If Text = Text2 Then
.Columns(cl + 1).Insert
.Cells(rw, cl + 1) = .Cells(rw, cl + 1).Value2
'.Cells(rw + 1, 2) = .Cells(rw, cl).Value2
.Cells(rw, cl).Clear
End If
End If
Next cl
Next rw
End With
End Sub
После отладки я понял, что курсор перемещается с
For rw = .Cells(Rows.Count, 1).End(xlDown).Row To 6 Step 1
до
End With
непосредственно.
Что я делаю не так, и есть ли простой код, чтобы сделать необходимое спасибо.
Я немного изменил код:
это новый код:
Sub Test()
Dim rw As Long, cl As Long
Dim Text As String
Dim Text2 As String
Dim Flag As Integer
With ActiveSheet
For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
For cl = .Cells(rw, Columns.Count).End(xlToLeft).Column To 2 Step -1
If Not IsEmpty(.Cells(rw, cl)) Then
Text = Cells(rw, 1).Value
Text2 = Cells(rw - 1, 1).Value
If Text = Text2 Then
Flag = Flag + 1
'.Columns(cl + 1).Insert
.Cells(rw, cl + Flag) = .Cells(rw, cl).Value2
'.Cells(rw, cl).Clear
End If
End If
Next cl
Next rw
End With
End Sub
Вывод не близок к тому, что я хочу:
Project Task
P1 T1
P1 T1 T1
P1 T3 T3
P1 T3 T3
P1 T3 T3
P2 T6
P2 T7 T7