Я пытался решить эту проблему несколькими способами и прочитал много разных сообщений, но я все еще застрял. У меня есть данные, которые есть только в столбце А на Листе 1 в виде списка из нескольких сотен записей, но они неравномерны, поэтому иногда жалоба состоит из нескольких строк или не имеет разрешения (или даже отсутствия жалобы). Однако каждый набор информации начинается со слова "Новая запись". Поэтому я хочу, чтобы на Sheet2, начиная со столбца B, он создавал новый столбец каждый раз, когда встречается новая запись со всеми данными, расположенными ниже, до тех пор, пока не встретится следующая «новая запись». Спасибо миллион раз за помощь.
Данные в настоящее время:
+----+--------------------+
| | A |
+----+--------------------+
| 1 | New Entry |
| 2 | Smith, Joe |
| 3 | 15362 |
| 4 | 123-456-7890 |
| 5 | Company1 |
| 6 | Complaint |
| 7 | Resolution |
+----+--------------------+
| 8 | New Entry |
| 9 | Doe, Joe |
| 10 | 15361 |
| 11 | 234-567-8901 |
| 12 | Company2 |
+----+--------------------+
| 13 | New Entry |
| 14 | Mary, Joe |
| 15 | 15360 |
| 16 | 123-097-8641 |
| 17 | Company3 |
| 18 | Complaint |
| 19 | 2nd line complaint |
| 20 | Resolution |
+----+--------------------+
| 21 | New Entry |
| 22 | Doe, Jane |
| 23 | 15366 |
| 24 | 234-567-8910 |
| 25 | Company4 |
| 26 | Complaint |
| 27 | Resolution |
+----+--------------------+
Кому:
+---+--------------+--------------+--------------------+--------------+
| | A | B | C | D |
+---+--------------+--------------+--------------------+--------------+
| 1 | New Entry | New Entry | New Entry | New Entry |
| 2 | Smith, Joe | Doe, Joe | Mary, Joe | Doe, Jane |
| 3 | 15362 | 15361 | 15360 | 15366 |
| 4 | 123-456-7890 | 234-567-8901 | 123-097-8641 | 234-567-8910 |
| 5 | Company1 | Company2 | Company3 | Company4 |
| 6 | Complaint | | Complaint | Complaint |
| 7 | Resolution | | 2nd line complaint | Resolution |
| 8 | | | Resolution | |
+---+--------------+--------------+--------------------+--------------+
Попытка кода: (Моя попытка была сначала построчной, поэтому я сделал следующий код, который вызывал проблемы, так как данные были неравномерными. Я думал, что столбцы могут быть лучше, если для ввода нового столбца использовалась новая запись.)
Private Sub CommandButton4_Click()
Dim i As Range
Dim actualRange As Range
Dim tmpString As String
Dim dob As Range
Dim idn As Range
Dim comp As Range
Dim dt As Range
Dim rsn As Range
Dim rsn2 As Range
Dim rsn3 As Range
For Each i In Sheet1.Range("A1:A21303")
i.Replace "Name ", "Name :"
tmpString = i.Value
If InStr(i.Value, "Name :") > 0 Then
i.Offset(0, 0).Value = Split(tmpString, ":")(0)
i.Offset(1, 0).Value = Split(tmpString, ":")(1)
Sheet2.Range("A" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Value = i.Offset(1, 0).EntireRow.Value
ElseIf i.Value = "Name" Then
Sheet2.Range("A" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).EntireRow.Value = i.Offset(1, 0).EntireRow.Value
End If
Next i
For Each dob In Sheet1.Range("A1:A21303")
If dob.Value = "DOB" Then
Sheet2.Range("B" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).Value = dob.Offset(1, 0).EntireRow.Value
End If
Next dob
For Each idn In Sheet1.Range("A1:A21303")
If idn.Value = "ID Number" Then
Sheet2.Range("C" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).Value = idn.Offset(1, 0).EntireRow.Value
End If
Next idn
For Each comp In Sheet1.Range("A1:A21303")
If comp.Value = "Company" Then
Sheet2.Range("D" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).Value = comp.Offset(1, 0).EntireRow.Value
End If
Next comp
For Each dt In Sheet1.Range("A1:A21303")
If dt.Value = "Date/Time" Then
Sheet2.Range("E" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).Value = dt.Offset(1, 0).EntireRow.Value
End If
Next dt
For Each rsn In Sheet1.Range("A1:A21303")
If rsn.Value = "Complaint" Then
Sheet2.Range("F" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).Value = rsn.Offset(1, 0).EntireRow.Value
End If
Next rsn
For Each rsn2 In Sheet1.Range("A1:A21303")
If rsn2.Value = "Complaint" Then
Sheet2.Range("G" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).Value = rsn2.Offset(2, 0).EntireRow.Value
End If
Next rsn2
For Each rsn3 In Sheet1.Range("A1:A21303")
If rsn3.Value = "Complaint" Then
Sheet2.Range("H" & Sheet2.Rows.Count).End(xlUp).Offset(1, 0).Value = rsn3.Offset(3, 0).EntireRow.Value
End If
Next rsn3
End Sub