1

У меня длинный список значений акции в минутном формате. Столбец C показывает открытые значения (за минуту), а столбец F показывает соответствующие закрытые значения

Теперь я хочу преобразовать эти данные в 5 минут в формате от 1 минуты. это означает, что для столбца CI требуется, чтобы первое значение было смещено для группы из 5 (т.е. c1 из C1:C5, затем c6 из C6:C10, затем C11 из C11:C15), а в столбце FI требуется последнее значение группы , смотри ниже выделенное мне нужно

(то есть F5 от F1:F5, затем F10 от F6:F10, затем F15 от F11:F15).

Я не знаю, как использовать OFFSET/ INDEX/ MATCH в комбинации для достижения этих результатов. позже я также хотел бы преобразовать это в формат 10 минут / 30 минут / 60 минут

3 ответа3

1

Спасибо за вашу помощь.. Я искал простое решение и, к счастью, сочетание INDEX и OFFSET поможет решить эту проблему. Я использовал следующую формулу:

= ИНДЕКС (OFFSET (А $ 1, (СТРОКА (А1)-1)* 2,0,2), 2,0)

в приведенной выше формуле помог преобразовать список в группу из 2 (или в любую другую группу, основанную на требовании, и, следовательно, 2 можно изменить на 5, 10 и т. д.), а индекс помог найти последнее значение группы. работал очень хорошо для меня.

еще раз спасибо

0

Я вижу, вы отметили функцию листа, поэтому попробуйте код VBA ниже.

Вы можете изменить переменные ipWorksheet и opWorksheet на рабочие листы в своем Excel. Также, если вы хотите изменить rowOn на другой номер, в зависимости от того, откуда вы хотите начать получать данные

Sub Extract_Nth_rows()
'
' Extract_Nth_rows
'

    Dim rowOn, rowTotal, rowJump As Integer
    Dim ipWorksheet, opWorksheet As String

    ipWorksheet = "Sheet1"                              ' CHANGE THIS to the name of your Data sheet
    opWorksheet = "Sheet2"                              ' CHANGE THIS to the name of the sheet to put the data

    rowOn = 1                                           ' This will start on Row 1 of Sheet1
    rowTotal = Sheets(ipWorksheet).UsedRange.Rows.Count ' Count number of Rows


    Sheets(opWorksheet).Cells.Clear                     ' Clear all rows

    While rowOn < rowTotal
        Sheets(ipWorksheet).Select
        Rows(rowOn * 5 & ":" & rowOn * 5).Select
        Selection.Copy
        Sheets(opWorksheet).Select
        Range("A" & rowOn).Select
        ActiveSheet.Paste
        rowOn = rowOn + 1
    Wend
End Sub
0

Я бы использовал Power Query Add-In для этого. Он имеет команды Index и Group, которые должны достичь того, что вы хотите.

Я построил решение для аналога, которое вы можете просмотреть или скачать - его: «Демонстрация Power Query - Отключение пар строк в два columns.xlsx» в моем One Drive:

https://onedrive.live.com/redir?resid=4FA287BBC10EC562%21398

Сначала я добавляю столбец индекса (порядковый номер строки), затем применяю число.Мод функция для группировки каждые 2 строки. Для вашего сценария просто измените это на 5 строк.

http://office.microsoft.com/en-au/excel-help/number-mod-HA104110103.aspx?CTT=5&origin=HA104122363

В качестве альтернативы вы можете сгруппировать по значениям времени (а не предполагать, что всегда будет 5 строк) - Power Query имеет функции, помогающие в этом, например, время.минут

http://office.microsoft.com/en-au/excel-help/time-minute-HA104110495.aspx?CTT=5&origin=HA104122363

После расчета значения группировки в виде нового столбца, затем используйте его с командой Group для обобщения ваших данных:

http://office.microsoft.com/en-au/excel-help/group-rows-in-a-table-HA103993875.aspx?CTT=5&origin=HA103993930

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .