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

Вход

Регистрация

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

 

= Мир MS Excel/Копирование строк при определенном значении в ячейке - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Копирование строк при определенном значении в ячейке
bel Дата: Понедельник, 31.08.2015, 14:07 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Дорогие форумчане, просьба помочь с написанием макроса.

Есть таблица "опросный лист", в ней каждый опрашиваемый выбирает в столбце D "Статус" значение. Задача - при выборе значения "-2" или "0" excel должен автоматически копировать эти строки на другой лист "Список задач".
Ранее никогда не работала с макросами, очень слабо представляю как все это делается. Буду безумна благодарна за Вашу помощь!
[moder]Правила формума прочитайте для начала.
А здесь нужно файл смотреть


Сообщение отредактировал _Boroda_ - Понедельник, 31.08.2015, 14:09
 
Ответить
СообщениеДорогие форумчане, просьба помочь с написанием макроса.

Есть таблица "опросный лист", в ней каждый опрашиваемый выбирает в столбце D "Статус" значение. Задача - при выборе значения "-2" или "0" excel должен автоматически копировать эти строки на другой лист "Список задач".
Ранее никогда не работала с макросами, очень слабо представляю как все это делается. Буду безумна благодарна за Вашу помощь!
[moder]Правила формума прочитайте для начала.
А здесь нужно файл смотреть

Автор - bel
Дата добавления - 31.08.2015 в 14:07
bel Дата: Понедельник, 31.08.2015, 14:25 | Сообщение № 2
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Если честно, не совсем поняла, что я сделала не по правилам форума...
файл прилагаю. как написано в правилах - 20 строк достаточно для понятия сути...
В столбце D выбирается значение. Нужно, чтобы при выборе значения "-2" или "0" строка копировалась на следующий лист.
К сообщению приложен файл: 8331823.xls (35.0 Kb)


Сообщение отредактировал bel - Понедельник, 31.08.2015, 15:06
 
Ответить
СообщениеЕсли честно, не совсем поняла, что я сделала не по правилам форума...
файл прилагаю. как написано в правилах - 20 строк достаточно для понятия сути...
В столбце D выбирается значение. Нужно, чтобы при выборе значения "-2" или "0" строка копировалась на следующий лист.

Автор - bel
Дата добавления - 31.08.2015 в 14:25
_Boroda_ Дата: Понедельник, 31.08.2015, 15:20 | Сообщение № 3
Группа: Админы
Ранг: Местный житель
Сообщений: 16892
Репутация: 6611 ±
Замечаний: ±

2003; 2007; 2010; 2013 RUS
Именно так, как у Вас написано в условии - см. файл _1
Но что Вы будете делать, когда статус изменится с -2 (или с 0) на 1 или 2? Вам придется вручную удалять строки из листа Список задач. Короче, смотрите файл _2.
не совсем поняла, что я сделала не по правилам форума...

В Вашем файле списки не работают - в имени ссылка на другую книгу; листа "Список задач" нет; таблицы для сбора там выводимых данных тоже нет.
Строку Правил про 10-20 строк Вы увидели, это прекрасно, а следующую строку что ж не прочитали?
К сообщению приложен файл: 8331823_1.xls (46.0 Kb) · 8331823_2.xls (50.5 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеИменно так, как у Вас написано в условии - см. файл _1
Но что Вы будете делать, когда статус изменится с -2 (или с 0) на 1 или 2? Вам придется вручную удалять строки из листа Список задач. Короче, смотрите файл _2.
не совсем поняла, что я сделала не по правилам форума...

В Вашем файле списки не работают - в имени ссылка на другую книгу; листа "Список задач" нет; таблицы для сбора там выводимых данных тоже нет.
Строку Правил про 10-20 строк Вы увидели, это прекрасно, а следующую строку что ж не прочитали?

Автор - _Boroda_
Дата добавления - 31.08.2015 в 15:20
Udik Дата: Понедельник, 31.08.2015, 15:21 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Следующий лист может быть разным. В данном примере это Лист2, именно на него копировать? Или по счету типа ActiveSheet.Index+1? А на самом листе куда?
Лист "Список задач" не нашёл.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеСледующий лист может быть разным. В данном примере это Лист2, именно на него копировать? Или по счету типа ActiveSheet.Index+1? А на самом листе куда?
Лист "Список задач" не нашёл.

Автор - Udik
Дата добавления - 31.08.2015 в 15:21
bel Дата: Понедельник, 31.08.2015, 16:19 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Спасибо!
Строку Правил про 10-20 строк Вы увидели, это прекрасно, а следующую строку что ж не прочитали?

Лист "Список задач" не нашёл.

Наверняка я тут такая не первая, кто не отправляет файл с конфиденциальными данными и старается обобщить суть вопроса, чтобы использовать пример макроса потом самой. Так что прошу прощения за то, что приложила пример файла, а не сам файл.

Но что Вы будете делать, когда статус изменится с -2 (или с 0) на 1 или 2? Вам придется вручную удалять строки из листа Список задач.
да, второй вариант мне больше подходит. спасибо!

Можете также подсказать, как сделать так, чтобы копировалась не вся строка, а только отдельные ячейки.
Если посмотрите файл:
с листов "Risk Mgmt","Asset Protection", "Protect People", "Brand Protection", "Incident Management" данные из ячеек столбцов B, C, D при значении "-2" должны копироваться в лист "Action Items" (столбцы A,B,C), а при значении "0" - в лист "Not Applicable". Это возможно?
И если можно, хотелось бы не просто готового файла, а какого-то описания как Вы это делаете..
К сообщению приложен файл: 9292229.xls (95.5 Kb)
 
Ответить
СообщениеСпасибо!
Строку Правил про 10-20 строк Вы увидели, это прекрасно, а следующую строку что ж не прочитали?

Лист "Список задач" не нашёл.

Наверняка я тут такая не первая, кто не отправляет файл с конфиденциальными данными и старается обобщить суть вопроса, чтобы использовать пример макроса потом самой. Так что прошу прощения за то, что приложила пример файла, а не сам файл.

Но что Вы будете делать, когда статус изменится с -2 (или с 0) на 1 или 2? Вам придется вручную удалять строки из листа Список задач.
да, второй вариант мне больше подходит. спасибо!

Можете также подсказать, как сделать так, чтобы копировалась не вся строка, а только отдельные ячейки.
Если посмотрите файл:
с листов "Risk Mgmt","Asset Protection", "Protect People", "Brand Protection", "Incident Management" данные из ячеек столбцов B, C, D при значении "-2" должны копироваться в лист "Action Items" (столбцы A,B,C), а при значении "0" - в лист "Not Applicable". Это возможно?
И если можно, хотелось бы не просто готового файла, а какого-то описания как Вы это делаете..

Автор - bel
Дата добавления - 31.08.2015 в 16:19
Udik Дата: Понедельник, 31.08.2015, 16:44 | Сообщение № 6
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
кто не отправляет файл с конфиденциальными данными

Никто не ожидает секретных данных, но общую структуру файла желательно предоставить, иначе потом начинаются 100500 переделок. И похоже они начались :)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
Сообщение
кто не отправляет файл с конфиденциальными данными

Никто не ожидает секретных данных, но общую структуру файла желательно предоставить, иначе потом начинаются 100500 переделок. И похоже они начались :)

Автор - Udik
Дата добавления - 31.08.2015 в 16:44
bel Дата: Понедельник, 31.08.2015, 16:46 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
но общую структуру файла желательно предоставить

да, я уже это поняла:) сам файл приложила, только текст удалила. этого же достаточно?
 
Ответить
Сообщение
но общую структуру файла желательно предоставить

да, я уже это поняла:) сам файл приложила, только текст удалила. этого же достаточно?

Автор - bel
Дата добавления - 31.08.2015 в 16:46
Udik Дата: Понедельник, 31.08.2015, 20:47 | Сообщение № 8
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Вроде так
[vba]
Код

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim arrLName(), arrLName2(1 To 2) As String
Dim cllRow As Integer
Static i As Byte, flOut As Byte
Const strRng As String = "D2:D20" 'диапазон отслеживания
   
arrLName = Array("Risk Mgmt", "Asset Protection", "Protect People", "Brand Protection", "Incident Management")
arrLName2(1) = "Not Applicable"
arrLName2(2) = "Action Items"

flOut = 1
For i = 0 To UBound(arrLName) - 1 'проверяем на каком листе изменение
If Sh.Name = arrLName(i) Then flOut = 0
Next i
If flOut Then Exit Sub 'если ненужный лист выходим
If Intersect(Range(strRng), Target) Is Nothing Then Exit Sub 'проверяем диапазон
If Not (Target = 0 Or Target = -2) Then Exit Sub 'проверяем значение в измененной ячейке
i = Abs(Target) / 2 + 1 'определяем лист куда писать
With Sheets(arrLName2(i))
cllRow = .Range("a65536").End(xlUp).Row + 1 'определяем на какую строку писать
.Range(.Cells(cllRow, 1), .Cells(cllRow, 3)) = Sh.Range(Cells(Target.Row, 1), Cells(Target.Row, 3)).Value 'пишем диапазон
End With
End Sub
[/vba]

2007 вроде понимает xlsb
К сообщению приложен файл: 8603758.xlsb (38.1 Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеВроде так
[vba]
Код

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim arrLName(), arrLName2(1 To 2) As String
Dim cllRow As Integer
Static i As Byte, flOut As Byte
Const strRng As String = "D2:D20" 'диапазон отслеживания
   
arrLName = Array("Risk Mgmt", "Asset Protection", "Protect People", "Brand Protection", "Incident Management")
arrLName2(1) = "Not Applicable"
arrLName2(2) = "Action Items"

flOut = 1
For i = 0 To UBound(arrLName) - 1 'проверяем на каком листе изменение
If Sh.Name = arrLName(i) Then flOut = 0
Next i
If flOut Then Exit Sub 'если ненужный лист выходим
If Intersect(Range(strRng), Target) Is Nothing Then Exit Sub 'проверяем диапазон
If Not (Target = 0 Or Target = -2) Then Exit Sub 'проверяем значение в измененной ячейке
i = Abs(Target) / 2 + 1 'определяем лист куда писать
With Sheets(arrLName2(i))
cllRow = .Range("a65536").End(xlUp).Row + 1 'определяем на какую строку писать
.Range(.Cells(cllRow, 1), .Cells(cllRow, 3)) = Sh.Range(Cells(Target.Row, 1), Cells(Target.Row, 3)).Value 'пишем диапазон
End With
End Sub
[/vba]

2007 вроде понимает xlsb

Автор - Udik
Дата добавления - 31.08.2015 в 20:47
bel Дата: Вторник, 01.09.2015, 16:16 | Сообщение № 9
Группа: Пользователи
Ранг: Прохожий
Сообщений: 7
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Вроде так

Спасибо большое!
То, что нужно!)) единственное, не подскажете, как сделать так, что бы если в итоге кто-то меняет значение с -2 или 0 на другое, то скопированная ранее строчка на странице Action Items или Not Applicable автоматически была удалена? girl_smile

И еще - заметила, что если на каком-либо из листов я очищаю выставленный ранее статус при помощи кнопки "delete", то эта строчка автоматически копируется на лист Not Applicable :o Можете помочь разобраться - почему?((


Сообщение отредактировал bel - Вторник, 01.09.2015, 16:20
 
Ответить
Сообщение
Вроде так

Спасибо большое!
То, что нужно!)) единственное, не подскажете, как сделать так, что бы если в итоге кто-то меняет значение с -2 или 0 на другое, то скопированная ранее строчка на странице Action Items или Not Applicable автоматически была удалена? girl_smile

И еще - заметила, что если на каком-либо из листов я очищаю выставленный ранее статус при помощи кнопки "delete", то эта строчка автоматически копируется на лист Not Applicable :o Можете помочь разобраться - почему?((

Автор - bel
Дата добавления - 01.09.2015 в 16:16
Udik Дата: Вторник, 01.09.2015, 17:35 | Сообщение № 10
Группа: Друзья
Ранг: Старожил
Сообщений: 1588
Репутация: 192 ±
Замечаний: 0% ±

Excel 2016 х 64
Насчет delete - скорее всего пустую ячейку Target воспринимает как ноль, неохота разбирать :) проверку по свойству Text вставил
[vba]
Код

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim arrLName(), arrLName2(1 To 2) As String
Dim cllRow As Integer
Static i As Byte, flOut As Byte
Const strRng As String = "D2:D20" 'диапазон отслеживания
   
arrLName = Array("Risk Mgmt", "Asset Protection", "Protect People", "Brand Protection", "Incident Management")
arrLName2(1) = "Not Applicable"
arrLName2(2) = "Action Items"

flOut = 1
If Target.Text = "" Then Exit Sub ' если пустая ячейка выходим
For i = 0 To UBound(arrLName) - 1 'проверяем на каком листе изменение
If Sh.Name = arrLName(i) Then flOut = 0
Next i
If flOut Then Exit Sub 'если ненужный лист выходим
If Intersect(Range(strRng), Target) Is Nothing Then Exit Sub 'проверяем диапазон
If Not (Target = 0 Or Target = -2) Then Exit Sub 'проверяем значение в измененной ячейке
i = Abs(Target) / 2 + 1 'определяем лист куда писать
With Sheets(arrLName2(i))
cllRow = .Range("a65536").End(xlUp).Row + 1 'определяем на какую строку писать
.Range(.Cells(cllRow, 1), .Cells(cllRow, 3)) = Sh.Range(Cells(Target.Row, 1), Cells(Target.Row, 3)).Value 'пишем диапазон
End With
End Sub
[/vba]

А удаление строк при изменении на "ненужные" цифры - это придётся искать строку по обоим листам. Если строки уникальные, то несложно, но это уже новая тема.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com
 
Ответить
СообщениеНасчет delete - скорее всего пустую ячейку Target воспринимает как ноль, неохота разбирать :) проверку по свойству Text вставил
[vba]
Код

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim arrLName(), arrLName2(1 To 2) As String
Dim cllRow As Integer
Static i As Byte, flOut As Byte
Const strRng As String = "D2:D20" 'диапазон отслеживания
   
arrLName = Array("Risk Mgmt", "Asset Protection", "Protect People", "Brand Protection", "Incident Management")
arrLName2(1) = "Not Applicable"
arrLName2(2) = "Action Items"

flOut = 1
If Target.Text = "" Then Exit Sub ' если пустая ячейка выходим
For i = 0 To UBound(arrLName) - 1 'проверяем на каком листе изменение
If Sh.Name = arrLName(i) Then flOut = 0
Next i
If flOut Then Exit Sub 'если ненужный лист выходим
If Intersect(Range(strRng), Target) Is Nothing Then Exit Sub 'проверяем диапазон
If Not (Target = 0 Or Target = -2) Then Exit Sub 'проверяем значение в измененной ячейке
i = Abs(Target) / 2 + 1 'определяем лист куда писать
With Sheets(arrLName2(i))
cllRow = .Range("a65536").End(xlUp).Row + 1 'определяем на какую строку писать
.Range(.Cells(cllRow, 1), .Cells(cllRow, 3)) = Sh.Range(Cells(Target.Row, 1), Cells(Target.Row, 3)).Value 'пишем диапазон
End With
End Sub
[/vba]

А удаление строк при изменении на "ненужные" цифры - это придётся искать строку по обоим листам. Если строки уникальные, то несложно, но это уже новая тема.

Автор - Udik
Дата добавления - 01.09.2015 в 17:35
  • Страница 1 из 1
  • 1
Поиск:

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