Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Скопировать строки по значению (по столбцу) - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скопировать строки по значению (по столбцу) (Макросы/Sub)
Скопировать строки по значению (по столбцу)
den45444 Дата: Вторник, 30.08.2016, 15:57 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Прошу помочь скопировать все строки где имеется значение "1" в столбце E и вставить их на другой лист после ячейки A1
К сообщению приложен файл: ntcn.xlsx(15Kb)
 
Ответить
СообщениеПрошу помочь скопировать все строки где имеется значение "1" в столбце E и вставить их на другой лист после ячейки A1

Автор - den45444
Дата добавления - 30.08.2016 в 15:57
den45444 Дата: Вторник, 30.08.2016, 16:21 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Есть один вариант (см.ниже), но он копирует по одной строке и получается очень долго
[vba]
Код
For Kx = .Range("E4").row To 200 Step 1
    If .Range("J" & Kx) = "1" Then
    .Rows(Kx).Copy
    Sheets("Лист2").Rows(1).Insert Shift:=xlDown
    End If
  Next Kx
[/vba]
 
Ответить
СообщениеЕсть один вариант (см.ниже), но он копирует по одной строке и получается очень долго
[vba]
Код
For Kx = .Range("E4").row To 200 Step 1
    If .Range("J" & Kx) = "1" Then
    .Rows(Kx).Copy
    Sheets("Лист2").Rows(1).Insert Shift:=xlDown
    End If
  Next Kx
[/vba]

Автор - den45444
Дата добавления - 30.08.2016 в 16:21
krosav4ig Дата: Вторник, 30.08.2016, 17:04 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1356
Репутация: 547 ±
Замечаний: 0% ±

Excel 2007, 2013
можно так
[vba]
Код
Sub test()
    With Application: .ScreenUpdating = 0: .EnableEvents = 0
    With Me.UsedRange
        .AutoFilter Field:=5, Criteria1:="1"
        .Copy: Me.Next.[A1].PasteSpecial 8, xlNone, False, False
        .Copy Me.Next.[A1]
        .AutoFilter
    End With
    .ScreenUpdating = 1: .EnableEvents = 1: End With
End Sub
[/vba]
К сообщению приложен файл: ntcn.xlsm(24Kb)


(_)Õvõ(_)
 
Ответить
Сообщениеможно так
[vba]
Код
Sub test()
    With Application: .ScreenUpdating = 0: .EnableEvents = 0
    With Me.UsedRange
        .AutoFilter Field:=5, Criteria1:="1"
        .Copy: Me.Next.[A1].PasteSpecial 8, xlNone, False, False
        .Copy Me.Next.[A1]
        .AutoFilter
    End With
    .ScreenUpdating = 1: .EnableEvents = 1: End With
End Sub
[/vba]

Автор - krosav4ig
Дата добавления - 30.08.2016 в 17:04
den45444 Дата: Вторник, 30.08.2016, 18:25 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
можно так

благодарю за ответ.
что-то не до конца доработан макрос, почему-то копирует первую строку со значением "0".
 
Ответить
Сообщение
можно так

благодарю за ответ.
что-то не до конца доработан макрос, почему-то копирует первую строку со значением "0".

Автор - den45444
Дата добавления - 30.08.2016 в 18:25
den45444 Дата: Вторник, 30.08.2016, 20:02 | Сообщение № 5
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
копирует первую строку со значением "0".

c этим разобрался
Остался вопрос с вставкой этих скопированных строк со сдвигом вниз существующих строк на другом листе
 
Ответить
Сообщение
копирует первую строку со значением "0".

c этим разобрался
Остался вопрос с вставкой этих скопированных строк со сдвигом вниз существующих строк на другом листе

Автор - den45444
Дата добавления - 30.08.2016 в 20:02
sv2014 Дата: Среда, 31.08.2016, 09:39 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 156
Репутация: 37 ±
Замечаний: 0% ±

Excel 2013
den45444, добрый день,еще вариант,кнопка test

[vba]
Код
Sub test()
    Dim z(), i&, j&, m&: z = Range("E1:E" & Range("E" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(z)
         If z(i, 1) = "1" Then
         m = m + 1: For j = 1 To UBound(z, 2): z(m, j) = z(i, j): Next
         End If
   Next
  Sheets("Лист1").Range("A1").Resize(m, UBound(z, 2)).Value = z
End Sub
[/vba]
К сообщению приложен файл: example_31_08_2.xls(52Kb)


Сообщение отредактировал sv2014 - Среда, 31.08.2016, 09:44
 
Ответить
Сообщениеden45444, добрый день,еще вариант,кнопка test

[vba]
Код
Sub test()
    Dim z(), i&, j&, m&: z = Range("E1:E" & Range("E" & Rows.Count).End(xlUp).Row).Value
    For i = 1 To UBound(z)
         If z(i, 1) = "1" Then
         m = m + 1: For j = 1 To UBound(z, 2): z(m, j) = z(i, j): Next
         End If
   Next
  Sheets("Лист1").Range("A1").Resize(m, UBound(z, 2)).Value = z
End Sub
[/vba]

Автор - sv2014
Дата добавления - 31.08.2016 в 09:39
den45444 Дата: Среда, 31.08.2016, 10:52 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
добрый день,еще вариант,кнопка test

благодарю за пример. А как сделать перенос строк на другой лист со сдвигом всех нижестоящих строк вниз? Смотрите файл
К сообщению приложен файл: 9335323.xls(50Kb)
 
Ответить
Сообщение
добрый день,еще вариант,кнопка test

благодарю за пример. А как сделать перенос строк на другой лист со сдвигом всех нижестоящих строк вниз? Смотрите файл

Автор - den45444
Дата добавления - 31.08.2016 в 10:52
den45444 Дата: Среда, 31.08.2016, 11:11 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
sv2014, ваш вариант не подходит, потому что нужно перенести не значения столбца Е, а по этому столбцу выбрать все строки со значением "1" и перенести на другой лист со сдвигом всех строк вниз.
 
Ответить
Сообщениеsv2014, ваш вариант не подходит, потому что нужно перенести не значения столбца Е, а по этому столбцу выбрать все строки со значением "1" и перенести на другой лист со сдвигом всех строк вниз.

Автор - den45444
Дата добавления - 31.08.2016 в 11:11
den45444 Дата: Среда, 31.08.2016, 14:30 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
вопрос решен. тему прошу закрыть
 
Ответить
Сообщениевопрос решен. тему прошу закрыть

Автор - den45444
Дата добавления - 31.08.2016 в 14:30
devilkurs Дата: Среда, 31.08.2016, 15:19 | Сообщение № 10
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 141
Репутация: 38 ±
Замечаний: 0% ±

Excel 2007, 2010
мой пример

[vba]
Код
Sub test()
    Dim z(), z1(), iEnd%, iKol%, i%, j%, m%
    Const iStart% = 3 'строка начала таблицы на листе "тест"
    Const iColumnStart% = 1 'крайний левый столбец таблицы для копирования данных
    Const iColumnEnd% = 9 'крайний правый столбец таблицы для копирования данных
    Const iColumnInd% = 5 '№ столбца, в котором ищем критерий
    Const sInd As String = "1" 'критерий отбора
    Const iColumnPaste% = 1 'столбец левой верхней ячейки для вставки результата
    Const iRowPaste% = 1 'строка левой верхней ячейки для вставки результата
    
    iEnd = Cells(Rows.Count, iColumnInd).End(xlUp).Row 'последняя заполненная строка в столбце,где критерии отбора
    z = Range(Cells(iStart, iColumnStart), Cells(iEnd, iColumnEnd)).Value 'массив таблицы с листа "тест"
    iKol = WorksheetFunction.CountIf(Range(Cells(iStart, iColumnInd), Cells(iEnd, iColumnInd)), sInd) 'количество всего найденных критериев в таблице
    ReDim z1(1 To iKol, 1 To UBound(z, 2))
    
    For i = 1 To UBound(z, 1)
         If z(i, iColumnInd) = sInd Then
         m = m + 1: For j = 1 To UBound(z, 2): z1(m, j) = z(i, j): Next
         End If
    Next
    
  With Sheets("Лист1") 'Вставляем на лист с именем Лист1
    .Range(.Cells(iRowPaste, iColumnPaste), .Cells(UBound(z1, 1) + iRowPaste - 1, UBound(z1, 2) + iColumnPaste - 1)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    .Cells(iRowPaste, iColumnPaste).Resize(m, UBound(z, 2)).Value = z1
  End With
End Sub
[/vba]

[p.s.]Пока ходил уже "Вопрос решен..." (((((
К сообщению приложен файл: devilkurs.xlsm(25Kb)




Сообщение отредактировал devilkurs - Среда, 31.08.2016, 15:23
 
Ответить
Сообщениемой пример

[vba]
Код
Sub test()
    Dim z(), z1(), iEnd%, iKol%, i%, j%, m%
    Const iStart% = 3 'строка начала таблицы на листе "тест"
    Const iColumnStart% = 1 'крайний левый столбец таблицы для копирования данных
    Const iColumnEnd% = 9 'крайний правый столбец таблицы для копирования данных
    Const iColumnInd% = 5 '№ столбца, в котором ищем критерий
    Const sInd As String = "1" 'критерий отбора
    Const iColumnPaste% = 1 'столбец левой верхней ячейки для вставки результата
    Const iRowPaste% = 1 'строка левой верхней ячейки для вставки результата
    
    iEnd = Cells(Rows.Count, iColumnInd).End(xlUp).Row 'последняя заполненная строка в столбце,где критерии отбора
    z = Range(Cells(iStart, iColumnStart), Cells(iEnd, iColumnEnd)).Value 'массив таблицы с листа "тест"
    iKol = WorksheetFunction.CountIf(Range(Cells(iStart, iColumnInd), Cells(iEnd, iColumnInd)), sInd) 'количество всего найденных критериев в таблице
    ReDim z1(1 To iKol, 1 To UBound(z, 2))
    
    For i = 1 To UBound(z, 1)
         If z(i, iColumnInd) = sInd Then
         m = m + 1: For j = 1 To UBound(z, 2): z1(m, j) = z(i, j): Next
         End If
    Next
    
  With Sheets("Лист1") 'Вставляем на лист с именем Лист1
    .Range(.Cells(iRowPaste, iColumnPaste), .Cells(UBound(z1, 1) + iRowPaste - 1, UBound(z1, 2) + iColumnPaste - 1)).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    .Cells(iRowPaste, iColumnPaste).Resize(m, UBound(z, 2)).Value = z1
  End With
End Sub
[/vba]

[p.s.]Пока ходил уже "Вопрос решен..." (((((

Автор - devilkurs
Дата добавления - 31.08.2016 в 15:19
den45444 Дата: Среда, 31.08.2016, 19:30 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 225
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
devilkurs, ваш вариант не подходит, т.к. нужно перенести строки в таком же виде.
 
Ответить
Сообщениеdevilkurs, ваш вариант не подходит, т.к. нужно перенести строки в таком же виде.

Автор - den45444
Дата добавления - 31.08.2016 в 19:30
Pelena Дата: Среда, 31.08.2016, 19:38 | Сообщение № 12
Группа: Модераторы
Ранг: Экселист
Сообщений: 9873
Репутация: 2263 ±
Замечаний: 0% ±

Excel 2010 & Mac Excel 2011
вопрос решен

А поделиться решением не хотите?


"Черт возьми, Холмс! Но как??!!"
ЯД 41001765434816
 
Ответить
Сообщение
вопрос решен

А поделиться решением не хотите?

Автор - Pelena
Дата добавления - 31.08.2016 в 19:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Скопировать строки по значению (по столбцу) (Макросы/Sub)
Страница 1 из 11
Поиск:

Яндекс цитирования
© 2010-2016 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!