Копировать ячейку по условию макрос excel

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Option Explicit         ' Обязательное объявление переменных
Option Compare Text     ' отсутствие чувствительности к регистру при сравнении символов
 
Sub Raspredelenie_po_listam()
    Const FirstRow& = 7 ' Константа - первая строка данных ниже шапки на всех листах
    Dim i&, j&, LastRow&, LastRowTarget&, ShName, Sh_Target As Worksheet, Prefix$, FormulaRC$, A
    Application.ScreenUpdating = False ' Временное отключение обновления экрана в Excel
    For Each ShName In Array("Лист2", "Лист3", "Лист4") ' Цикл по 3 листам с результатами для очистки старых данных
        With Sheets(ShName) ' Работа с объектом Sheet через символ "."
            LastRowTarget = .Cells(.Rows.Count, "Z").End(xlUp).Row ' Определение последней заполненной строки по столбцу Z
            If LastRowTarget < FirstRow Then LastRowTarget = FirstRow  ' последняя заполненная строка не должна быть меньше FirstRow  (=7)
            .Rows(FirstRow & ":" & LastRowTarget).Clear    ' Удаление строк со старыми данными при новом распределении
        End With
    Next ShName
    With Лист1 ' Работа с объектом Лист1 (программное имя объекта) через символ "."
        LastRow = .Cells(.Rows.Count, "Z").End(xlUp).Row  ' Определение последней заполненной строки по столбцу Z
        Prefix = "=" & Лист1.Name & "!R" ' Первая часть ссылочных формул
        A = .Range(.Cells(1, 1), .Cells(LastRow, 15)).Value ' Формируем массив для проверки условий
        For i = FirstRow To LastRow ' Цикл по строкам анализируемого листа
            A(i, 8) = Trim(A(i, 8)) ' удаление пробелов спереди и сзади в элементах 8-го столбца массива
            A(i, 15) = Trim(A(i, 15))
            If A(i, 8) = "ЗБС" Or A(i, 8) = "ВНС" Then ' Комплекс условий 1
                Set Sh_Target = Лист2 ' Объектная ссылка на лист цель.
            ElseIf (A(i, 8) = "Конс" Or A(i, 8) = "Раск") And A(i, 15) = "Я" Then ' Комплекс условий 2
                Set Sh_Target = Лист3 ' Объектная ссылка на лист цель.
            Else ' если не выполняется ни 1-ый ни 2-ой комлекс условий
                Set Sh_Target = Лист4 ' Объектная ссылка на лист цель.
            End If
            .Range(.Cells(i, 1), .Cells(i, "AU")).Copy  ' копирование  i-той строки (по AU,для последующей вставки форматов)
            FormulaRC = Prefix & Format(i) & "C"  ' 2-я часть ссылочной формулы
            With Sh_Target '  Работа с объектом листом-целью, куда копируем форматы, через символ "."
                 LastRowTarget = .Cells(.Rows.Count, "Z").End(xlUp).Row + 1 ' Определение последней пустой строки по столбцу Z
                 If LastRowTarget < FirstRow Then LastRowTarget = FirstRow
                .Cells(LastRowTarget, 1).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False ' вставка скопированных форматов
                .Rows(LastRowTarget).RowHeight = Лист1.Rows(i).RowHeight ' Выравнивание высоты строки по исходной
                .Range(.Cells(LastRowTarget, 1), .Cells(LastRowTarget, "AU")).FormulaR1C1 = FormulaRC  ' заполнение целевого диапазона ссылочными формулами
            End With
        Next i
    End With
    Set Sh_Target = Nothing ' Очистка памяти от объектных ссылок
End Sub
 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

Есть ячейка «F» в листе1 если в ней стоит флажок, нужно чтобы вся строка копировалась на лист2 в пустую строку

Изменено: Яна Жилак26.12.2012 13:58:21

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

 

Chyma

Пользователь

Сообщений: 117
Регистрация: 24.12.2012

А как сделать так, чтобы в столбце F при выделении ячейки появлялся/исчезал флажок?
Все,уже сам узнал.

Изменено: Chyma26.12.2012 14:25:44

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

#5

26.12.2012 14:23:26

Цитата
А как сделать так, чтобы в столбце F при выделении ячейки появлялся/исчезал флажок?

Одним нажатием левой кнопки мышки

Изменено: Яна Жилак27.12.2013 15:05:30

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Там ещё нужно немного исправить диапазон:
Вместо «F6:F1000»
сделать «F4:F1000»

 

Chyma

Пользователь

Сообщений: 117
Регистрация: 24.12.2012

Юрий М, я хотел узнать вот про этот

прием

.

Изменено: Chyma26.12.2012 14:38:29

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

Юрий еще один вопросик.
Дело в том что при повторном нажатии на какую либо строку ,она копируется еще раз.Можно ли сделать так чтобы те данные которые уже внесены во вторую страницу повторно не копировались?

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Для этого нужно прогнать птиц.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

#11

26.12.2012 14:32:33

Цитата
Chyma пишет: Юрий М, я хотел узнать вот про этот  прием

Я про ЭТО и ответил.

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

Пропишите пожалуйста в макросе какая строчка за что отвечает,для того чтобы адаптировать под свою таблицу.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

#14

26.12.2012 15:17:10

Цитата
Юрий М пишет: Для этого нужно прогнать птиц.

Дело в том что, есть необходимость менять вторую страницу по запросу и нужно чтобы при снятии галочки со строки ее не было бы на 2 странице,это возможно?

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Яна, сколько ЕЩЁ козырей у Вас в рукаве?
Что в Вашем понимании «По запросу»?
При снятой галке строка и так не будет копироваться.

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

#16

26.12.2012 15:23:37

Цитата
Юрий М пишет: При снятой галке строка и так не будет копироваться.

Да,но если на этой строке один раз стояла галка,то эта строка будет находится на второй странице и автоматически ее не уберешь?Только вручную удалять?

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

У Вас изначально была задача ДОБАВЛЯТЬ отмеченную строку в первую свободную на втором листе. А теперь Вы ставите совсем ДРУГУЮ задачу — переписывать ВСЁ на втором листе. И макрос тут нужен другой.

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

Извините,спасибо за помощь!

 

Hugo

Пользователь

Сообщений: 23253
Регистрация: 22.12.2012

Я похожие задачи делал по такому алгоритму — по событию перехода на второй лист там макросом заново формируются все данные по условиям с первого листа.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Ну да — очистить диапазон и заново всё заполнить.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Версия 3 :)

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

Юрий все конечно супер, но я к сожалению не смогла адаптировать Ваш макрос под свою таблицу(Не могли бы Вы мне помочь?

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Убегаю на пару часов… Если никто не поможет — сделаю вечером.

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Яна, у Вас несоответствие структуры таблиц на листах «Акт Приемки1» и «Акт Разгрузки». Приведите их к едином у виду. И зачем там вообще объединённые ячейки?

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

Объединенные ячейки потому как, так формирует база 1С.В таблице я пометила желтым цветом то что нужно переносить в какую ячейку.Извините что так долго Вас мучаю(((((Самой уже как то неудобно(

Изменено: Яна Жилак27.12.2013 15:01:31

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Копировать нужно с листа Акт Приемки1 на лист Акт Разгрузки? И где там жёлтое? Я так понял, что скопировать нужно четыре строки, помеченный галкой? Копировать по кнопке или автоматом? Что будете делать, если отмеченных строк будет больше, чем для них отведено место на бланке?

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

Прошу прощения ни тот файл отправила

 

Юрий М

Модератор

Сообщений: 60585
Регистрация: 14.09.2012

Контакты см. в профиле

Отмечено 5, скопировано 4 — почему?
Мне повторить остальные вопросы или Вы дочитаете моё сообщение до конца?

 

Яна Жилак

Пользователь

Сообщений: 51
Регистрация: 26.12.2012

#30

27.12.2012 10:39:41

Копировать нужно нажав на кнопку «Несоответствия»
По поводу того что делать если на листе окажется недостаточно отведенного места: Для этого я и просила сделать так,чтобы копировались только те строки на которых стоит галка,а если галки нет то и строки этой не должно быть на втором листе,даже если ранее на этой строке была галка.
По поводу:отмечено 5, скопировано 4: я вручную делала и не заметила!

Копирование строк по условию из существующего набора данных в отдельную таблицу с помощью кода VBA Excel. Определение числа строк в исходной таблице.

Условие задачи

Есть исходная таблица (набор данных) со списком файлов, расположенных в двух папках. Необходимо строки таблицы, содержащие слово «Изображения», скопировать в новую таблицу, расположенную ниже исходного набора данных, через одну пустую строку. В результате должно получиться, как на изображении ниже:

Решение задачи

Код VBA Excel для копирования строк исходного набора данных по условию в отдельную таблицу:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

Sub KopirovaniyeStrok()

Dim s As String, n As Long, m As Long, i As Long

‘Задаем условие поиска

s = «Изображения»

‘Определяем номер последней строки исходной таблицы

n = Range(«A2»).CurrentRegion.Rows.Count

‘Задаем номер первой строки новой таблицы

m = n + 2

    For i = 2 To n

        ‘Проверяем условие

        If Cells(i, 1) = s Then

            ‘Копируем строку, удовлетворяющую условию, в новую таблицу

            Cells(i, 1).Resize(1, 3).Copy Cells(m, 1)

            m = m + 1

        End If

    Next

End Sub

При желании, можно добавить в эту процедуру еще одну переменную и автоматическое определение количества столбцов:

Dim c As Long

c = Range(«A2»).CurrentRegion.Columns.Count

Тогда выражение копирования примет следующий вид:

Cells(i, 1).Resize(1, c).Copy Cells(m, 1)


автоматическое копирование данных по условию

Автор gitzzz, 25.07.2009, 14:22

« назад — далее »

Добрый день.

Столкнулся с проблемой:
Есть 2 листа. В первом основные данные. Есть призначное поле (да/нет).
Нужно, чтобы при вводе данных в таблицу (когда это поле = «да») автоматически копировалась на второй лист нужная инфа из этой строки данных.

Такие возможности ехсел не знаю, но знаю что они есть)

Подскажите, пожалуйста, как это можно организовать (оперативно)?
Пробовал с помощью ЕСЛИ() но там постоянно выдается ответ ЛОЖЬ. Может макрос какой-нибудь есть?
Заранее, спасибо.


Есть несколько путей:
1. Написать макрос, который будет копировать на свободное место на втором листе значение, введенное в ячейку на первом листе, если рядом ввели признак ДА. Сам я макрос написать не возьмусь, но знаю, что это не обчень сложно. Попробуйте сами использовать макрорекодер для записи собственных действий, а потом поправьте макрос.
2. Использовать сводную таблицу. Опять таки, сам никогда их не использовал, но другим людям нравится.
3. Записать во второй таблице формулы, отображающие значения всех строк (ячеек), содержащий признак ДА.

Проще всего это сделать с помощью дополнительного столбца в первой таблице:
Пусть на листе 1 значения записываются в столбце A, признаки храняться в столбце B.
Тогда в ячейке C1 запишем формулу (и протянем ее по всему столбцу C): =ЕСЛИ(B1=»ДА»;СТРОКА();»»)
После этого переходим на лист 2 и в ячейке A1 записываем формулу (и также протягиваем ее вниз на столько сколько нужно):
=ЕСЛИ(СТРОКА()>СЧЁТ(Лист1!C:C);»»;ИНДЕКС(Лист1!A:A;НАИМЕНЬШИЙ(Лист1!C:C;СТРОКА());1))
Если нужно перенести значения из нескольких столбцов первого листа, то нужно записать несколько формул, поправив агрументы функции ИНДЕКС().

P.S. Важно, чтобы в столбце C первого листа не было лишних цифровых значений.
Если у Вас на листах должна быть шапка, то поэкспериментируйте с добавлений констант вида: СТРОКА()-Const


Нашел интересную статью, но опять возникли трудности с реализацией:
http://stockportal.ru/extrading/archives/225

Помогите разобраться в части кода, начиная с Call QuoteRead(intInstCount)
Кстати та книгде и не наше что это за функция…
Код можно переделать под мою задачу, или это вобще чтото другое?…

Public WithEvents App As Application
   Private Sub App_SheetChange(ByVal Sh As Object, ByVal Target As Range)
      Dim pRow As Integer, pCol As Integer, intRow As Integer, I As Integer, intInstCount As Integer
      Dim pValue As Variant
      Dim wInstSheet As Worksheet
      Dim wNVSheet As Worksheet
     Set wInstSheet = Application.Workbooks("NettoVolume.xlsm").Sheets("Instruments")
     Set wNVSheet = Application.Workbooks("NettoVolume.xlsm").Sheets("NV")
      intInstCount = wInstSheet.Cells(2, 5)
     If Sh.Name = "Котировки" And Target.Column > 1 And Target.Row > 1 And Target.Row < 10 Then
        Debug.Print "Вошел в AppEvents"
        Call QuoteRead(intInstCount)
        For I = 1 To intInstCount
            If Instruments(I).ChangeMode = 2 Then
               intRow = wInstSheet.Cells(3, 5) + 1
              Call Instruments(I).Output(wNVSheet, intRow, 2)
              wInstSheet.Cells(3, 5) = intRow
            End If
        Next I
     End If
   End Sub


Сводную таблу сделал, но ее обновлять надо, да и пустые значения фильтром убираются…Не автоматизированно всё… Хочется, чтобы все обрабатывалось динамически.
Может кто-н знает как обработать событие при изменении значений в ячейке? Подскажите, пожалуйста. Код так и не смог разобрать…..


Если в ячейке «А1» написать слово ИСТИНА, а нижеследующий код скопировать в модуль листа №1, то, при изменении любой одной ячейки второго столбца, третьи столбцы двух листов этой строки «синхронизируются».

Private Sub Worksheet_Change(ByVal Target As Range)
 With Target
   If .Count > 1 Then Exit Sub
   If .Column = 2 And [A1] Then Sheets(2).Cells(.Row, 3) = .Offset(0, 1)
 End With
End Sub

Знания недостаточно, необходимо применение. Желания недостаточно, необходимо действие. (с) Брюс Ли



  • Профессиональные приемы работы в Microsoft Excel

  • Обмен опытом

  • Microsoft Excel

  • автоматическое копирование данных по условию

Кому нужно будет забирайте, правда нужно будет укоротить его.
Кто может помогите оптимизировать….

Sub ОставитьТолько707и747()
Dim ra As Range, delra As Range
Application.ScreenUpdating = False ‘ отключаем обновление экрана
Range(«A1»).Select

‘ ищем и удаляем ячейки, содержащие заданный текст
‘ (можно указать сколько угодно значений, и использовать подстановочные знаки)
УдалятьЯчейкиСТекстом = Array(«?727???????», _
«?700???????», _
«?701???????», _
«?702???????», _
«?703???????», _
«?704???????», _
«?705???????», _
«?706???????», _
«?708???????», _
«?709???????», _
«?750???????», _
«?751???????», _
«?760???????», _
«?761???????», _
«?762???????», _
«?763???????», _
«?764???????», _
«?771???????», _
«?775???????», _
«?776???????», _
«?777???????», _
«777???????», _
«?771???????»)

‘ перебираем все строки в используемом диапазоне листа
For Each ra In ActiveSheet.UsedRange.Cells
‘ перебираем все фразы в массиве
For Each word In УдалятьЯчейкиСТекстом
‘ если в очередной ячейке листа найден искомый текст
If Not ra.Find(word, , xlValues, xlPart) Is Nothing Then
‘ добавляем ячейку в диапазон для удаления
If delra Is Nothing Then Set delra = ra Else Set delra = Union(delra, ra)
End If
Next word
Next

‘ если подходящие ячейки найдены, то: (удаляем)
If Not delra Is Nothing Then delra.Value = «»
End Sub

Понравилась статья? Поделить с друзьями:

А вот еще интересные статьи:

  • Копировать ячейку в word
  • Копировать ячейки миф excel
  • Копировать ячейки в столбце excel
  • Копировать ячейки в excel при скрытых ячейках
  • Копировать ячейки в excel клавиши

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии