У меня есть выдержка из онлайн-таблицы, где она выложена:
1 date author modified comment
1 date author modified comment2
1 date author modified comment3
1 date author modified commentn
2 date author modified comment
2 date author modified comment2
2 date author modified comment3
2 date author modified commentn
3 date author modified comment
3 date author modified comment2
3 date author modified comment3
3 date author modified commentn
....
3000 date author modified comment60
Количество комментариев, связанных с каждым индексом, варьируется, и у нас есть несколько тысяч строк. На всю жизнь я не могу понять, как транспонировать их с помощью формулы
Любые мысли о том, как я могу добиться этого в Excel?
Я хотел бы, чтобы это было изложено как:
1 author concat(date, comment) concat(date, comment) concat(date, comment)
2 author concat(date, comment) concat(date, comment) concat(date, comment)
...
Вот один из способов с использованием некоторых формул:
Формула в A2
:
=IFERROR(INDEX(Sheet1!$A$1:$A$12,MATCH(0,COUNTIF($A$1:A1,Sheet1!$A$1:$A$12),0)),"")
Вход через CtrlShiftEnter
Тянуть вниз...
Формула в B2
:
=INDEX(Sheet!$C$1:$C$12,MATCH(A2,Sheet1!$A$1:$A$12,0))
Тянуть вниз...
Формула в C2
:
=IFERROR(INDEX(Sheet1!$B$1:$B$12,SMALL((Sheet1!$A$1:$A$12=$A2)*ROW(Sheet1!$A$1:$A$12),COUNTIF(Sheet1!$A$1:$A$12,"<>"&$A2)+(COLUMN()-2)))&", "&INDEX(Sheet1!$E$1:$E$12,SMALL((Sheet1!$A$1:$A$12=$A2)*ROW(Sheet1!$A$1:$A$12),COUNTIF(Sheet1!$A$1:$A$12,"<>"&$A2)+(COLUMN()-2))),"")
Вход через CtrlShiftEnter
Перетащите вправо и вниз...
И если это вернет вам числа вместо дат, то поменяйте эту часть: INDEX(Sheet1!$B$1:$B$12
на: INDEX(TEXT(Sheet1!$B$1:$B$12,"DD-MM-YYYY")
или любой другой формат даты, который вы можете использовать.
Ваш первый шаг может также просто скопировать первые столбцы идентификаторов на лист1, вставить их на лист2 и удалить дубликаты. В этом случае вам придется настроить диапазоны в других формулах, чтобы они начинались с A1
вместо A2
.
Спасибо - это сработало для меня после настройки столбцов - у меня было несколько разных авторов, которых я хотел сгруппировать, поэтому я смог это сделать.
Вы можете попробовать:
Option Explicit
Sub test()
Dim LastRowA As Long, i As Long, Count As Long, j As Long, k As Long, LastRowG As Long, LastColumn As Long, StartingPoint As Long
Dim arr As Variant
Dim strAuthor As String, strNextAuthor As String, strFullRecord As String
With ThisWorkbook.Worksheets("Sheet1")
LastRowA = .Cells(.Rows.Count, "A").End(xlUp).Row
arr = .Range("A1:E" & LastRowA)
StartingPoint = 1
For i = LBound(arr) To UBound(arr)
If StartingPoint = i Then
j = i + 1
strAuthor = arr(i, 1)
strNextAuthor = arr(j, 1)
Do Until strAuthor <> strNextAuthor
j = j + 1
If j > LastRowA Then
Exit Do
Else
strNextAuthor = arr(j, 1)
End If
Loop
LastRowG = .Cells(.Rows.Count, "G").End(xlUp).Row
If LastRowG = 1 And .Range("G1").Value = "" Then
LastRowG = 1
Else
LastRowG = LastRowG + 1
End If
For k = i To j - 1
LastColumn = .Cells(LastRowG, .Columns.Count).End(xlToLeft).Column
If .Range("G" & LastRowG).Value = "" Then
.Range("G" & LastRowG).Value = arr(k, 1)
.Range("H" & LastRowG).Value = arr(k, 3)
.Range("I" & LastRowG).Value = "(" & arr(k, 2) & ", " & arr(k, 5) & ")"
Else
.Cells(LastRowG, LastColumn + 1) = "(" & arr(k, 2) & ", " & arr(k, 5) & ")"
End If
Next k
StartingPoint = j
End If
Next i
End With
End Sub
Результаты:
Я не мог заставить это работать, но я попробую еще раз сегодня днем! Спасибо вам обоим!
Таким образом, автор будет таким же со всеми экземплярами для одного идентификатора?