Подтвердить что ты не робот

Скопируйте каждую n-ю строку с одного листа на другой

У меня есть электронная таблица Excel с 1 столбцом, 700 строк. Я забочусь о каждой седьмой строке. Я не хочу входить и удалять 6 строк между каждой строкой, о которой я забочусь. Поэтому я решил создать другой лист и указать ссылку на каждую ячейку, которую я хочу.

=sheet1!a1
=sheet1!a8
=sheet1!a15

Но я не хочу вводить каждую из этих формул... 100 раз. Я думал, что если бы я выбрал три и перетащил ящик, это поймет, что я пытался сделать, но не повезло.

Любые идеи о том, как сделать это элегантно/эффективно?

4b9b3361

Ответ 1

В A1 вашего нового листа поставьте это:

=OFFSET(Sheet1!$A$1,(ROW()-1)*7,0)

... и скопируйте. Если вы начинаете где-то, кроме строки 1, измените ROW() на ROW (A1) или другую ячейку в строке 1, а затем снова скопируйте ее.

Если вы хотите скопировать n-ю строку, но несколько столбцов, используйте формулу:

=OFFSET(Sheet1!A$1,(ROW()-1)*7,0)

Это тоже можно скопировать.

Ответ 2

Если бы я столкнулся с извлечением каждой седьмой строки, я бы "вставлял" столбец перед столбцом "А". Тогда я (предположив, что в строке 1 есть строка заголовка) введите числа 1,2,3,4,5,6,7 в строках 2,3,4,5,6,7,8, я бы выделите 1,2,3,4,5,6,7 и вставьте этот блок в конец листа (700 строк). Результат составит 1,23,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6,7....... Теперь сделайте сортировку данных по возрастанию в столбце "A". После сортировки все из 1-го будут первыми в серии, все 7-е будут седьмым элементом.

Ответ 3

По моему мнению, ответы на этот вопрос слишком специфичны. Вот попытка более общего ответа с двумя разными подходами и полным примером.

Подход OFFSET

OFFSET принимает 3 обязательных аргумента. Первая - это данная ячейка, от которой мы хотим компенсировать. Следующие два - это количество строк и столбцов, которые мы хотим смещать (вниз и вправо). OFFNET возвращает содержимое ячейки, в которой это приводит. Например, OFFSET(A1, 1, 2) возвращает содержимое ячейки C2, потому что A1 является ячейкой (1,1), и если мы добавим (1,2) к этому, получим (2,3) который соответствует ячейке C2.

Чтобы вернуть эту n-ю строку из другого столбца, мы можем использовать функцию ROW. Если этой функции не задано аргумент, она возвращает номер строки текущей ячейки. Таким образом, мы можем объединить OFFSET и ROW, чтобы создать функцию, которая возвращает каждую n-ю ячейку, добавив множитель к значению, возвращаемому ROW. Например OFFSET(A$1,ROW()*3,0). Обратите внимание на использование $1 в целевой ячейке. Если это не используется, смещение будет смещено от разных ячеек, что фактически добавит 1 к мультипликатору.

Подход ADDRESS + INDIRECT

ADDRESS принимает два целых ввода и возвращает адрес/имя ячейки в виде строки. Например, ADDRESS(1,1) return "$A$1". INDIRECT берет адрес ячейки и возвращает содержимое. Например, INDIRECT("A1") возвращает содержимое ячейки A1 (он также принимает ввод с $ в нем). Если мы используем ROW внутри ADDRESS с мультипликатором, мы можем получить адрес каждой n-й ячейки. Например, ADDRESS(ROW(), 1) в строке 1 вернет "$A$1", в строке 2 вернется "$A$2" и так далее. Итак, если мы помещаем это внутри INDIRECT, мы можем получить содержимое каждой n-й ячейки. Например, INDIRECT(ADDRESS(1*ROW()*3,1)) возвращает содержимое каждой третьей ячейки в первом столбце при перетаскивании вниз.

Пример

Рассмотрим следующий скриншот таблицы. Заголовки (первая строка) содержат вызов, используемый в строках ниже. введите описание изображения здесь Столбец A содержит данные нашего примера. В этом случае это просто положительные целые числа (подсчет продолжается за пределами отображаемой области). Это те значения, которые мы хотим получить каждый третий, то есть мы хотим получить 1, 4, 7, 10 и т.д.

Столбец B содержит неправильную попытку использования подхода OFFSET, но мы забыли использовать $. Как видно, умножая на 3, мы получаем каждую четвертую строку.

Столбец C содержит неправильную попытку использования подхода OFFSET, где мы вспомнили использовать $, но забыли вычесть. Поэтому, пока мы получаем каждое третье значение, мы пропустили некоторые значения (1 и 4).

Столбец D содержит правильную функцию с использованием подхода OFFSET.

Столбец E содержит неправильную попытку использования подхода ADDRESS + INDRECT, но мы забыли вычесть. Таким образом, мы сначала пропустили несколько строк. Та же проблема, что и в столбце C.

Столбец F содержит правильную функцию с использованием подхода ADDRESS + INDRECT.

Ответ 4

вставьте новый столбец и поместите ряд в 1,2,3,4 и т.д. Затем создайте новый столбец и используйте команду = if (int (a1/7) = (a1/7), 1,0 ) вы должны получить 1 в каждой 7-й строке, отфильтровать столбец на 1

Ответ 5

Выделите 7-ю строку. Покрасьте формат для первых 7 строк несколько раз. Затем сделайте больший кусок кисти, копируя формат, пока вы не закончите. Каждая 7-я строка должна быть выделена. Отфильтруйте по цвету, а затем скопируйте и вставьте (вставьте значения) из выделенных ячеек в новый лист.

Ответ 6

Создайте макрос и используйте следующий код для захвата данных и поместите его на новый лист (Sheet2):

Dim strValue As String
Dim strCellNum As String
Dim x As String
x = 1

For i = 1 To 700 Step 7
    strCellNum = "A" & i
    strValue = Worksheets("Sheet1").Range(strCellNum).Value
    Debug.Print strValue
    Worksheets("Sheet2").Range("A" & x).Value = strValue
    x = x + 1
Next

Сообщите мне, если это поможет! JFV

Ответ 7

Если ваши исходные данные находятся в форме столбца с несколькими столбцами и первой записью исходных данных на C42, и вы хотите, чтобы ваши новые (сэмплированные) данные были также в столбце, но только каждая седьмая строка, то вам также потребуется вычесть номер строки первой записи, например:

=OFFSET(C$42,(ROW(C42)-ROW(C$42))*7,0)

Ответ 8

Добавить новый столбец и заполнить его восходящими числами. Затем фильтруйте по ([column] mod 7 = 0) или что-то в этом роде (у меня нет Excel, чтобы на самом деле попробовать это);

Если вы не можете фильтровать по формуле, добавьте еще один столбец и используйте формулу = MOD ([column; 7]), а затем фильтруйте нули, и вы получите все седьмые строки.