Выберите каждую энную строку в Excel

У меня есть электронная таблица Excel с тысячами строк. Я хочу выбрать каждую 7-ю строку из той электронной таблицы. ("Выбором" я имею в виду, удаляют все другие строки или копируют выбранные строки в новый рабочий лист.)

Что самый легкий путь состоит в том, чтобы сделать это в Excel 2003?

См. также: Выберите каждую энную строку в Числах

15
задан 20.03.2017, 12:16

3 ответа

  1. Вставьте столбец
  2. В первой строке вставляют формулу =MOD (СТРОКА (), 7)
  3. Копировать
  4. Скопировать/вставить особенный / значения
  5. Данные/Отфильтровывать те Вы хотите (0 или 6, вероятно)
  6. Удалите остальную часть строк, Удаляют столбец Delete фильтра
19
ответ дан 07.12.2019, 11:02

Лично, я записал бы макрос, чтобы сделать первые три или четыре строки (в инкрементах с 7 строками, конечно), и скопировать строки в новый лист. Затем я отредактировал бы макрос для использования цикла, который рассчитывает к количеству населенных строк в листе с шагом 7.

Псевдопример кода:

Dim i as Integer

For i = 1 To 1000 Step 7
    'Add current row to selection
    ...
Next i

'Copy the selected rows to new sheet
...
3
ответ дан 07.12.2019, 11:02

Действительно только закончив идею запущенный Randolph Potter....

Для записи я не думаю, что Вы могли когда-либо придумывать это путем записи. Макро-запись является хорошим способом ознакомиться с Excel Object Model, но не очень хорошим способом записать допускающие повторное использование функции.

Option Explicit

'A simple test that copies every 7th row from the active sheet to a new sheet.
Sub SimpleTest()
    Dim r As Range
    Dim ws As Worksheet

    Set r = GetEveryNthRow(7)
    If Not r Is Nothing Then
        Set ws = Worksheets.Add(Before:=Sheets(1))

        r.Copy ws.Range("A1")
    Else
        MsgBox "Nothing came back from GetEveryNthRow"
    End If
    Set ws = Nothing
    Set r = Nothing
End Sub

'
Function GetEveryNthRow(ByVal NthRow As Long) As Range
    Dim keepRows As Range
    Dim r As Range

    If NthRow > 0 Then
        Set keepRows = Rows(1)
        For Each r In ActiveSheet.UsedRange.Rows
            If (r.Row Mod NthRow) = 0 Then
                Set keepRows = Union(keepRows, Rows(r.Row))
            End If
        Next r
        Set GetEveryNthRow = keepRows
    Else
        MsgBox "The row multiple provided must be greater than 0"
    End If

    Set keepRows = Nothing
End Function
3
ответ дан 07.12.2019, 11:02

Теги

Похожие вопросы