Привет великим гуру владеющим в совершенстве Excel. В программе не силен, поэтому вопрос глупый: Подскажите как решить вот такую задачу: в файле есть два листа. Первый для внесения данных(дата,фио) и есть столбец со списком для выбора "да" или "нет". Сама трудность: как скопировать значение ячейки "фио" на второй лист на последнюю пустую строку, если в столбце со списком было выбрано "да". Если можно составить формулу, хотелось бы ее увидеть. Если нет, то через макросы. Необходимо чтобы копирование происходило автоматически при заполнении данных. Прикрепил файл, так сказать, образец необходимого. Заранее спасибо
Привет великим гуру владеющим в совершенстве Excel. В программе не силен, поэтому вопрос глупый: Подскажите как решить вот такую задачу: в файле есть два листа. Первый для внесения данных(дата,фио) и есть столбец со списком для выбора "да" или "нет". Сама трудность: как скопировать значение ячейки "фио" на второй лист на последнюю пустую строку, если в столбце со списком было выбрано "да". Если можно составить формулу, хотелось бы ее увидеть. Если нет, то через макросы. Необходимо чтобы копирование происходило автоматически при заполнении данных. Прикрепил файл, так сказать, образец необходимого. Заранее спасибоAR84
и протянул ее. в итоге только первая строка заполнилась, а остальные пустые. Что я сделал не так7 [moder]Используйте для формул кнопочку fx. Поправила.[/moder]
Ребят, а если мне не 40 значение надо будет, а 540? где что поправить надо будет? сделал так(на 60 значений)
и протянул ее. в итоге только первая строка заполнилась, а остальные пустые. Что я сделал не так7 [moder]Используйте для формул кнопочку fx. Поправила.[/moder]AR84
Сообщение отредактировал Manyasha - Четверг, 11.02.2016, 12:40
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("D1:D2000"), Target) Is Nothing Then Dim s& If Target = "Да" Then s = Sheets("1").Range("C" & Rows.Count).End(xlUp).Row + 1 Target.Offset(0, -1).Copy Sheets("1").Cells(s, 3) Target.Offset(0, -2).Copy Sheets("1").Cells(s, 2) End If End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("D1:D2000"), Target) Is Nothing Then Dim s& If Target = "Да" Then s = Sheets("1").Range("C" & Rows.Count).End(xlUp).Row + 1 Target.Offset(0, -1).Copy Sheets("1").Cells(s, 3) Target.Offset(0, -2).Copy Sheets("1").Cells(s, 2) End If End If End Sub
Ребят, а если мне надо скопировать с первого листа не только фио, но и дату на второй лист в соответствующую ячейку, формула как измениться? Что то я в нее пытаюсь вникнуть и никак. Как поправить диапазон - я разобрался. Спасибо вам большое.
П.С. понимаю что вопросы глупые, но без вашей помощи не разберусь
Ребят, а если мне надо скопировать с первого листа не только фио, но и дату на второй лист в соответствующую ячейку, формула как измениться? Что то я в нее пытаюсь вникнуть и никак. Как поправить диапазон - я разобрался. Спасибо вам большое.
П.С. понимаю что вопросы глупые, но без вашей помощи не разберусьAR84
Сообщение отредактировал AR84 - Пятница, 12.02.2016, 09:37
PS: Понял, Выбор Да-Нет не разовый. Значит надо каждый раз переписывать данные. Ну в общим исправил. Мож пригодится. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("D1:D2000"), Target) Is Nothing Then Sheets("1").Range("B3:D45").ClearContents Dim s&, i& s = 3 For i = 3 To Range("D" & Rows.Count).End(xlUp).Row If Cells(i, 4) = "Да" Then Sheets("1").Cells(s, 2) = Cells(i, 2) Sheets("1").Cells(s, 3) = Cells(i, 3) s = s + 1 End If Next End If End Sub
[/vba]
А макрос чё, не подходит, или не смотрел?
PS: Понял, Выбор Да-Нет не разовый. Значит надо каждый раз переписывать данные. Ну в общим исправил. Мож пригодится. [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) If Not Application.Intersect(Range("D1:D2000"), Target) Is Nothing Then Sheets("1").Range("B3:D45").ClearContents Dim s&, i& s = 3 For i = 3 To Range("D" & Rows.Count).End(xlUp).Row If Cells(i, 4) = "Да" Then Sheets("1").Cells(s, 2) = Cells(i, 2) Sheets("1").Cells(s, 3) = Cells(i, 3) s = s + 1 End If Next End If End Sub
Поясню немного. 1. ЕСЛИ(Регистрация!D$3:D$50="Да";Регистрация!A$3:A$50) - когда в Д написано "Да", то берем значения из А, иначе - значение ЛОЖЬ. Получаем массив из номеров из столбца А и текста ЛОЖЬ (слово ЛОЖЬ - в данном случае рассматривается именно как текст - с ним не производилось никаких арифметических операций). 2. СТРОКА(A1) - дает номер строки ячейки А1 - то есть единицу. При протягивании формулы вниз ссылка изменится и в следующей ячейке будет уже А2 и, следовательно, СТРОКА(А2) даст нам 2. И так далее вниз 3, 4, 5, ... 3. НАИМЕНЬШИЙ(ЕСЛИ(Регистрация!D$3:D$50="Да";Регистрация!A$3:A$50);СТРОКА(A1)) переписываем как НАИМЕНЬШИЙ(п.1;п.2), получаем для первой записи первый наименьший из массива, полученного в п.1, для второй записи - второй наименьший, ... Функция НАИМЕНЬШИЙ игнорирует текст, поэтому мы получаем только цифры. Например, если массив из п.1 у нас получился 1:ЛОЖЬ:ЛОЖЬ:4:5, то первый наименьший = 1, второй = 4, третий = 5. То есть для каждой строки в итоговой таблице мы получаем номер по порядку той соответствующей строки в исходной таблице, где стоит "Да". 4. ИНДЕКС(Регистрация!C$3:C$50;п.3) - из массива столбца С выковыриваем то, что получили в п.3. 6. A3>СЧЁТЕСЛИ(Регистрация!D$3:D$50;"Да");"";... - если "Да" в исходнике закончились, то выводим пусто
В куске ИНДЕКС(Регистрация!C$3:C$50 измените буквы столбца ("С") на нужные.
Поясню немного. 1. ЕСЛИ(Регистрация!D$3:D$50="Да";Регистрация!A$3:A$50) - когда в Д написано "Да", то берем значения из А, иначе - значение ЛОЖЬ. Получаем массив из номеров из столбца А и текста ЛОЖЬ (слово ЛОЖЬ - в данном случае рассматривается именно как текст - с ним не производилось никаких арифметических операций). 2. СТРОКА(A1) - дает номер строки ячейки А1 - то есть единицу. При протягивании формулы вниз ссылка изменится и в следующей ячейке будет уже А2 и, следовательно, СТРОКА(А2) даст нам 2. И так далее вниз 3, 4, 5, ... 3. НАИМЕНЬШИЙ(ЕСЛИ(Регистрация!D$3:D$50="Да";Регистрация!A$3:A$50);СТРОКА(A1)) переписываем как НАИМЕНЬШИЙ(п.1;п.2), получаем для первой записи первый наименьший из массива, полученного в п.1, для второй записи - второй наименьший, ... Функция НАИМЕНЬШИЙ игнорирует текст, поэтому мы получаем только цифры. Например, если массив из п.1 у нас получился 1:ЛОЖЬ:ЛОЖЬ:4:5, то первый наименьший = 1, второй = 4, третий = 5. То есть для каждой строки в итоговой таблице мы получаем номер по порядку той соответствующей строки в исходной таблице, где стоит "Да". 4. ИНДЕКС(Регистрация!C$3:C$50;п.3) - из массива столбца С выковыриваем то, что получили в п.3. 6. A3>СЧЁТЕСЛИ(Регистрация!D$3:D$50;"Да");"";... - если "Да" в исходнике закончились, то выводим пусто_Boroda_
Эх.....вижу что макросом проще написано, но я в них совсем ноль....пытаюсь изучить что делает формула и как ее потом можно усовершенствовать и применить (файлик будет расти, дополняться поля и другие формулы)...Спасибо Boroda за подробное объяснение формулы, хотелось бы такую же информацию от Wasilic по поводу его макроса =)
ПС. осилю формулы, перейду к макросам....
Эх.....вижу что макросом проще написано, но я в них совсем ноль....пытаюсь изучить что делает формула и как ее потом можно усовершенствовать и применить (файлик будет расти, дополняться поля и другие формулы)...Спасибо Boroda за подробное объяснение формулы, хотелось бы такую же информацию от Wasilic по поводу его макроса =)
Даже не знаю как пояснять. Если в колонке D1-D2000 (диапазон можно поменять на любой) произошли какие то изменения, выполняется процедура. Очищается таблица на листе «1» в диапазоне В3: D45 (ну как в примере, можно заменить на нужный). Задаются числовые переменные s, i. s=3 – начальная строка записи на листе «1». Цикл перебора “For i” начиная с 3-й строки до последней заполненной, проверяет колонку 4 то есть «D». И если в ней встречается «Да», переписывает данные в лист «1». Как то так.
Даже не знаю как пояснять. Если в колонке D1-D2000 (диапазон можно поменять на любой) произошли какие то изменения, выполняется процедура. Очищается таблица на листе «1» в диапазоне В3: D45 (ну как в примере, можно заменить на нужный). Задаются числовые переменные s, i. s=3 – начальная строка записи на листе «1». Цикл перебора “For i” начиная с 3-й строки до последней заполненной, проверяет колонку 4 то есть «D». И если в ней встречается «Да», переписывает данные в лист «1». Как то так.Wasilich
Сообщение отредактировал Wasilic - Пятница, 12.02.2016, 11:50
Спасибо всем кто откликнулся за помощь. Решил свою задачу с помощью макроса Wasilic, подредактировал под свои нужды. Осталось сообразить как сделать печатную форму(открою новую тему).
Спасибо всем кто откликнулся за помощь. Решил свою задачу с помощью макроса Wasilic, подредактировал под свои нужды. Осталось сообразить как сделать печатную форму(открою новую тему).AR84