Можно ли создать несколько копий значения на основе данных подсчета для этого значения? - PullRequest
0 голосов
/ 09 ноября 2019

Не знаю, как сформулировать мою проблему в простом вопросе, извините!

У меня есть таблица в неправильном формате для того, что мне нужно сделать. enter image description here

Как видите, каждый ряд представляет собой вид рыбы, в то время как столбец представляет собой уникальный разрез, состоящий из (a) года, (b) участка, (c) рифовая зона и, наконец, (г) повторный номер. Число на совпадении - это число раз, когда этот вид был зарегистрирован в этом конкретном трансекте.

Я хотел бы создать новый лист, в котором каждая запись рыбы в исходной электронной таблице представляет собой целую строку. Это дало бы электронную таблицу, где каждая отдельная рыба, которая была записана, теперь получает свою собственную строку, и это выглядело бы так: enter image description here Я очень мало понимаю что-то большее, чем простой Excel, поэтому любая помощь сэто будет с благодарностью!

Ответы [ 2 ]

0 голосов
/ 12 ноября 2019
Const startRow As Integer = 5
Const newSheet As String = "TransposedData"
Sub makeDownwards()
   Dim row As Integer, ws As Worksheet, ows As Worksheet
   Dim oRow As Integer, col As Integer, repNumber As Integer, i As Integer
   Dim fName As String, sName As String, year As String, site As String, none As String, transect As String
   row = startRow
   Set ws = ActiveSheet
   Set ows = ThisWorkbook.Worksheets.Add(after:=ActiveSheet)
   ows.Name = newSheet
   oRow = 2
   ows.Range("A1").Resize(1, 6) = Split("Fish Name ,Fish Spicies ,Year ,Site ,None ,Transect", ",")
   ows.Range("A1:F1").Font.Bold = True
   ows.Range("A1:F1").BorderAround xlContinuous, xlThin
   ows.Range("A1:F1").HorizontalAlignment = xlCenter
   Do While (ws.Cells(row, 1) <> "")
      row = row + 1
      col = 3
      fName = ws.Cells(row, 1)
      sName = ws.Cells(row, 2)
      Do While ws.Cells(1, col) <> ""
         repNumber = ws.Cells(row, col).Value
         year = ws.Cells(1, col)
         side = ws.Cells(2, col)
         none = ws.Cells(3, col)
         transect = ws.Cells(4, col)
         For i = 1 To repNumber
            ows.Range("A" & oRow).Resize(1, 6) = Array(fName, sName, year, side, none, transect)
            oRow = oRow + 1
         Next
         col = col + 1
      Loop
   Loop
End Sub
0 голосов
/ 10 ноября 2019

В зависимости от размера вашего набора данных, код может не понадобиться. Похоже, вы могли бы быстро заполнить большинство столбцов, а затем отсортировать и вставить в свои конкретные разрезы и виды. Если вы чувствуете, что вам по-прежнему нужен код, то простого цикла For Next будет достаточно для записи необходимых уникальных значений.

т.е.:

For i = 2 to LastRow
    If
       'code
    Then
Next i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...