У меня есть набор данных, который является динамическим, что означает N количество строк и N количество столбцов (групп). Первый снимок экрана - это то, как данные выглядят с тремя группами, но, как я сказал, это может быть N количество групп. Также может быть N количество элементов.Цитирование по динамическим столбцам и строкам и транспонирование данных
Исходные данные:
Второй скриншот показывает, как данные должны выглядеть. Мне нужно написать имя элемента для каждого балла (числовое значение в этой строке). Поэтому мне нужно каким-то образом переставить данные. Мне нужно пройти через столбцы, но не знаю, как разделить группы в цикле, поскольку они имеют одинаковые заголовки столбцов. Только определение и номер группы всегда уникальны.
Это должно быть сделано в VBA.
Окончательные данные после того, как цикл по строкам и столбцам и «транспонировать»:
Благодаря
EDIT: Вот код, который я пытался до сих пор, что оставляет пробелы между устанавливает и работает только для первой группы.
Sub transposeData()
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim lastRow As Long
Dim i As Long
Dim lastCol As Long
Dim j As Long
Dim n As Integer
Dim y As Long
Dim tempVal As Integer
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set ws2 = Workbooks("Workbook2").Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, 2).End(xlUp).Row
lastCol = ws.Cells(ws2.Rows.Count, 1).End(xlUp).Row
For i = 3 To lastRow Step 1
For y = 3 To lastRow Step 1
For j = 3 To lastCol Step 1
If ws.Cells(i, j) <> vbNullString Then
tempVal = ws.Cells(i, j).Value
ws2.Cells(y, 2) = ws.Cells(i, 2).Value
ws2.Cells(y, 3) = tempVal
ws2.Cells(y, "K") = ws.Cells(2, j).Value
End If
If tempVal <> 0 And tempVal - 1 Then
y = y + 1
End If
If j = 41 Then
i = i + 1
End If
tempVal = 0
y = y
Next j
Next y
Next i
End Sub
Что вы пробовали? Пожалуйста, напишите любой код. Что и не сработало? См. Раздел [Как спросить] (http://stackoverflow.com/help/how-to-ask) о том, как задать «хороший» вопрос, поскольку это не сайт «Код для меня». – BruceWayne
Я знаю, я не мог найти код, как я работал над ним в офисе, поэтому я быстро его написал – MJ95