Копирование четных/нечетных строк, Четные и нечетные строки
Пользователь
Сообщений: Регистрация: 17.07.2018
17.07.2018 11:32:09
Имеется таблица с данными: А1 А2 А3 А4 А5 Необходимо в новую таблицу скопировать только строки: А1 А3 А5 Либо А2 А4 Разумеется, строк в таблице значительно больше.
Пользователь
Сообщений: Регистрация: 11.01.2013
17.07.2018 11:35:55
Добавить столбец с формулой =ОСТАТ(СТРОКА();2) Отфильтровать по 0 либо по 1, скопировать - вставить.
Пользователь
Сообщений: Регистрация: 01.01.1970
17.07.2018 11:57:34
Пусть диапазон с данными находится в столбце "A", начиная с ячейки "A1". Пусть результат требуется расположить в столбце "D", начиная с ячейки "D1". Макрос:
Код
Sub qq()
Dim i As Long, j As Long, x As Range, y As Range
Set x = Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
j = 1 'Для нечетных строк. Для четных j = 2
For i = j To x.Count Step 2
If y Is Nothing Then Set y = x.Cells(i) Else Set y = Union(y, x.Cells(i))
Next
[D:D].ClearContents: y.Copy [D1]
End Sub
Изменено: - 17.07.2018 12:05:03
Чем шире угол зрения, тем он тупее.
Пользователь
Сообщений: Регистрация: 26.05.2013
17.07.2018 12:42:00
Вариант формулой массива. Для четных. =ИНДЕКС($A$1:$A$10;НАИМЕНЬШИЙ(ЕСЛИ(ОСТАТ($A$1:$A$10;2)=0;СТРОКА($A$1:$A$10));СТРОКА(A1))) Для нечетных. =ИНДЕКС($A$1:$A$10;НАИМЕНЬШИЙ(ЕСЛИ(ОСТАТ(($A$1:$A$10)+1;2)=0;СТРОКА($A$1:$A$10));СТРОКА(A1)))
Пользователь
Сообщений: Регистрация: 17.07.2018
17.07.2018 13:14:09
Буду очень благодарен, если покажете не примере. См. файл. Нужно с помощью формул, которые можно будет растянуть на более длинный столбец, извлечь данные из одной таблицы в другую. В первом случае вытягиваем нечетные ячейки, во втором - четные. Пробовал вашу формулу, не получилось((
Спасибо огромное, получилось. Понял как работает))
Пользователь
Сообщений: Регистрация: 20.08.2026
20.08.2026 16:40:10
Подскажите, как это работает в обратную сторону? Как вставить скопированные данные из одного файла только в четные строчки другого файла, не нарушив формулы в нечетных строчках
Option Explicit
Sub Скопировать_в_чётные()
Dim rSource As Range, rTarget As Range
Set rSource = GetSourceRange()
If rSource Is Nothing Then Exit Sub
Set rTarget = GetTargetRange()
If rTarget Is Nothing Then Exit Sub
Dim pref As String
pref = GetFormulaPrefix(rSource, rTarget)
If rTarget.Rows.Count <= 2 * rSource.Rows.Count Then
Set rTarget = rTarget.Resize(2 * rSource.Rows.Count)
End If
If Not Intersect(rSource, rTarget) Is Nothing Then Exit Sub
Dim trr As Variant, yt As Long, ys As Long
trr = rTarget.Formula
For ys = 1 To rSource.Rows.Count
yt = yt + 2
trr(yt, 1) = "=" & pref & rSource.Cells(ys, 1).Address(0, 0, xlA1)
Next
Do
yt = yt + 2
If yt > rTarget.Rows.Count Then Exit Do
rTarget.Cells(yt, 1).ClearContents
Loop
rTarget.Formula = trr
End Sub
Private Function GetSourceRange() As Range
Dim rr As Range
On Error Resume Next
Set rr = Application.InputBox("Выберите диапазон-источник.", "Источник", "A1:A7", Type:=8)
Set GetSourceRange = Intersect(rr, rr.Parent.UsedRange)
On Error GoTo 0
End Function
Private Function GetTargetRange() As Range
Dim rr As Range
On Error Resume Next
Set rr = Application.InputBox("Выберите диапазон-приёмник.", "Приёмник", "$C1:C14", Type:=8)
Set GetTargetRange = Intersect(rr, rr.Parent.UsedRange)
On Error GoTo 0
End Function
Private Function GetFormulaPrefix(rSource As Range, rTarget As Range) As String
If rSource.Parent.Parent.Name = rTarget.Parent.Parent.Name Then
If rSource.Parent.Name = rTarget.Parent.Name Then
GetFormulaPrefix = ""
Exit Function
End If
GetFormulaPrefix = "'" & rSource.Parent.Name & "'!"
Exit Function
End If
GetFormulaPrefix = "'[" & rSource.Parent.Parent.Name & "]" & rSource.Parent.Name & "'!"
End Function
o-gurova: Результат (вставить только в четные строки, не нарушив формулы в нечетных)
Скопировать в буфер обмена (Ctrl+C) формулу: =ИНДЕКС(A:A;СТРОКА()/2) ->> Выделить диапазон (C1:C14) ->> Нажать F5 ->> 'Выделить…' ->> 'константы' (возможно надо 'пустые ячейки') ->> В строке формул: Ctrl+V ->> Ctrl+Enter
Пользователь
Сообщений: Регистрация: 20.08.2026
24.08.2026 15:21:34
К сожалению в офисе запуск макросов отключен. Остальные варианты не подошли, формула в нечетных строках сбивается. Формулы высчитывают цену без НДС от вставляемого значения в четных строках.
Вариант из ответа #12 немного измененной последовательности: Скопировать в буфер обмена (Ctrl+C) ячейку С1->> Выделить диапазон (C1:C14) ->> Нажать F5 ->> 'Выделить…' ->> 'пустые ячейки' ->> В строке формул: Ctrl+V Еще вариант: включаете автофильтр по столбцу в ячейке С1--выбираете пустые ячейки--протягиваете формулу из С1 вниз-- снимаете фильтр. Ещё вариант: в соседнем столбце пропишите формулу =$C2/1,22, выделите ячейку с формулой и пустую ячейку ниже, протяните эти две ячейки вниз, скопируйте протянуты диапазон, Активируйте ячейку С1 и вызовите Специальную вставку--выберите там 'пропускать пустые ячейки' -- ОК. Может быть из этих вариантов чтото подойдет?
ПавелW, к сожалению не получается)) возможно я замахнулась на серьезное. Но вручную вбивать более 500 позиций в четные строчки это слишком трудоемко. Решила попробовать с помощью формул Прикреплю сюда таблицу. мне надо данные из столбца L вставить в E или F или G, но только в четные строчки, чтоб в нечетных формула которая там есть, не нарушилась. На примере выше я вижу, что у вас получилось, но как, я пока понять не могу)
Alex, ПавелW, спасибо, то что нужно, но не поняла, откуда я копирую формулу в буфер обмена?
Пользователь
Сообщений: Регистрация: 09.01.2023
excel 2007, 2016, 2021
25.08.2026 14:16:16
o-gurova, пожалуйста можно и целиком на столбец (сдвиг разумеется надо учитывать): =ИНДЕКС(L:L;(СТРОКА()+СТРОКА(M$11))/2)
Цитата
откуда я копирую формулу в буфер обмена?
) да хоть прям отсюда (или где её пропишите). Можно и в строке формул ручками прописать) Но в вашем случае формулы повторяются и проще протянуть сразу две ячейки
o-gurova, и вот зачем себе всё усложнять делая расчёты через строку? см Лист2