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

Вход

Регистрация

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

 

= Мир MS Excel/Выпадающий список с выбором и автозаполнением строки - Мир MS Excel

Старая форма входа
  • Страница 1 из 2
  • 1
  • 2
  • »
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выпадающий список с выбором и автозаполнением строки (Макросы/Sub)
Выпадающий список с выбором и автозаполнением строки
flywithme1299 Дата: Четверг, 20.04.2023, 10:53 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Добрый день!
Есть табличка, в этой табличке есть данные. которые заполняются в ручную, далее выбирается фамилия ответственного, например ИВАНОВ. После на лист Иванова копируется, введенная раньше строка с введёнными данными ранее. Если мы выберем например Петров, то данная строка копируется на лист Петрова и так далее. При этом если заполняем уже другую строку, работает аналогичным способом. Как это реализовать, пытаюсь сообразить, но вразумительного ничего не приходит. Информации мало, да и ничего подходящего нет.
К сообщению приложен файл: tablica.xlsx (10.3 Kb)


Сообщение отредактировал flywithme1299 - Четверг, 20.04.2023, 10:54
 
Ответить
СообщениеДобрый день!
Есть табличка, в этой табличке есть данные. которые заполняются в ручную, далее выбирается фамилия ответственного, например ИВАНОВ. После на лист Иванова копируется, введенная раньше строка с введёнными данными ранее. Если мы выберем например Петров, то данная строка копируется на лист Петрова и так далее. При этом если заполняем уже другую строку, работает аналогичным способом. Как это реализовать, пытаюсь сообразить, но вразумительного ничего не приходит. Информации мало, да и ничего подходящего нет.

Автор - flywithme1299
Дата добавления - 20.04.2023 в 10:53
Nic70y Дата: Четверг, 20.04.2023, 12:23 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Sub u_67()
    Application.ScreenUpdating = False
    u = Cells(Rows.Count, "a").End(xlUp).Row
    For v = 2 To u
        w = Range("h" & v).Value
        x = Sheets(w).Cells(Rows.Count, "a").End(xlUp).Row + 1
        Range("a" & v & ":b" & v).Copy Sheets(w).Range("a" & x)
        Range("d" & v & ":g" & v).Copy Sheets(w).Range("c" & x)
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: tablica.xlsm (21.0 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщение[vba]
Код
Sub u_67()
    Application.ScreenUpdating = False
    u = Cells(Rows.Count, "a").End(xlUp).Row
    For v = 2 To u
        w = Range("h" & v).Value
        x = Sheets(w).Cells(Rows.Count, "a").End(xlUp).Row + 1
        Range("a" & v & ":b" & v).Copy Sheets(w).Range("a" & x)
        Range("d" & v & ":g" & v).Copy Sheets(w).Range("c" & x)
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 20.04.2023 в 12:23
flywithme1299 Дата: Четверг, 20.04.2023, 13:48 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, Замечательно, все работает. Но только если, например выберем Петрова, то у нас добавляется строка у Петрова, еще и у Иванова заново, то есть у Иванова будет уже две строки, а у Петрова одна строка. Но решение классное спасибо.


Сообщение отредактировал flywithme1299 - Четверг, 20.04.2023, 13:49
 
Ответить
СообщениеNic70y, Замечательно, все работает. Но только если, например выберем Петрова, то у нас добавляется строка у Петрова, еще и у Иванова заново, то есть у Иванова будет уже две строки, а у Петрова одна строка. Но решение классное спасибо.

Автор - flywithme1299
Дата добавления - 20.04.2023 в 13:48
Nic70y Дата: Четверг, 20.04.2023, 14:01 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
так
[vba]
Код
Sub u_67()
    Application.ScreenUpdating = False
    u = Cells(Rows.Count, "a").End(xlUp).Row
    For v = 2 To u
        w = Range("h" & v).Value
        x = Sheets(w).Cells(Rows.Count, "a").End(xlUp).Row + 1
        y = Application.Match(Range("a" & v), Sheets(w).Range("a:a"), 0)
        If IsNumeric(y) = False Then
            Range("a" & v & ":b" & v).Copy Sheets(w).Range("a" & x)
            Range("d" & v & ":g" & v).Copy Sheets(w).Range("c" & x)
        End If
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]попробуйте


ЮMoney 41001841029809

Сообщение отредактировал Nic70y - Четверг, 20.04.2023, 14:02
 
Ответить
Сообщениетак
[vba]
Код
Sub u_67()
    Application.ScreenUpdating = False
    u = Cells(Rows.Count, "a").End(xlUp).Row
    For v = 2 To u
        w = Range("h" & v).Value
        x = Sheets(w).Cells(Rows.Count, "a").End(xlUp).Row + 1
        y = Application.Match(Range("a" & v), Sheets(w).Range("a:a"), 0)
        If IsNumeric(y) = False Then
            Range("a" & v & ":b" & v).Copy Sheets(w).Range("a" & x)
            Range("d" & v & ":g" & v).Copy Sheets(w).Range("c" & x)
        End If
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]попробуйте

Автор - Nic70y
Дата добавления - 20.04.2023 в 14:01
flywithme1299 Дата: Четверг, 20.04.2023, 14:06 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, ругается, на строку y=Application
 
Ответить
СообщениеNic70y, ругается, на строку y=Application

Автор - flywithme1299
Дата добавления - 20.04.2023 в 14:06
Nic70y Дата: Четверг, 20.04.2023, 14:09 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
flywithme1299, Вы слишком быстро скопировали)
я пропустил .Match
скопируйте заново


ЮMoney 41001841029809
 
Ответить
Сообщениеflywithme1299, Вы слишком быстро скопировали)
я пропустил .Match
скопируйте заново

Автор - Nic70y
Дата добавления - 20.04.2023 в 14:09
flywithme1299 Дата: Четверг, 20.04.2023, 14:22 | Сообщение № 7
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, Да поторопился, спасибо, теперь работает, если вас не затруднит, можете описать середину команд, не очень понял, присваивание:)
 
Ответить
СообщениеNic70y, Да поторопился, спасибо, теперь работает, если вас не затруднит, можете описать середину команд, не очень понял, присваивание:)

Автор - flywithme1299
Дата добавления - 20.04.2023 в 14:22
Nic70y Дата: Четверг, 20.04.2023, 14:33 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Sub u_67()
    Application.ScreenUpdating = False 'отключаем обновление экрана
    u = Cells(Rows.Count, "a").End(xlUp).Row 'нижняя заполненная строка
    For v = 2 To u 'пройдемся циклом от 2-й до нижней строки
        w = Range("h" & v).Value 'фамилия (лист загрузки) обрабатываемой строки
        x = Sheets(w).Cells(Rows.Count, "a").End(xlUp).Row + 1 'нижняя строка + 1 листа куда вставляем
        y = Application.Match(Range("a" & v), Sheets(w).Range("a:a"), 0) 'ищем номер в листе
        If IsNumeric(y) = False Then 'если номера нет, тогда копируем - вставляем данные
            Range("a" & v & ":b" & v).Copy Sheets(w).Range("a" & x)
            Range("d" & v & ":g" & v).Copy Sheets(w).Range("c" & x)
        End If
    Next
    Application.ScreenUpdating = True 'включаем  обновление экрана
End Sub
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщение[vba]
Код
Sub u_67()
    Application.ScreenUpdating = False 'отключаем обновление экрана
    u = Cells(Rows.Count, "a").End(xlUp).Row 'нижняя заполненная строка
    For v = 2 To u 'пройдемся циклом от 2-й до нижней строки
        w = Range("h" & v).Value 'фамилия (лист загрузки) обрабатываемой строки
        x = Sheets(w).Cells(Rows.Count, "a").End(xlUp).Row + 1 'нижняя строка + 1 листа куда вставляем
        y = Application.Match(Range("a" & v), Sheets(w).Range("a:a"), 0) 'ищем номер в листе
        If IsNumeric(y) = False Then 'если номера нет, тогда копируем - вставляем данные
            Range("a" & v & ":b" & v).Copy Sheets(w).Range("a" & x)
            Range("d" & v & ":g" & v).Copy Sheets(w).Range("c" & x)
        End If
    Next
    Application.ScreenUpdating = True 'включаем  обновление экрана
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 20.04.2023 в 14:33
flywithme1299 Дата: Четверг, 20.04.2023, 14:37 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, Огромное спасибо pray
 
Ответить
СообщениеNic70y, Огромное спасибо pray

Автор - flywithme1299
Дата добавления - 20.04.2023 в 14:37
flywithme1299 Дата: Четверг, 20.04.2023, 16:28 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Делая другой файл, столкнулся ошибками, можете помочь? Не получается правильно доделать
К сообщению приложен файл: 7298210.xlsm (29.5 Kb)
 
Ответить
СообщениеДелая другой файл, столкнулся ошибками, можете помочь? Не получается правильно доделать

Автор - flywithme1299
Дата добавления - 20.04.2023 в 16:28
flywithme1299 Дата: Пятница, 21.04.2023, 08:43 | Сообщение № 11
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, в новом файлике не отрабатывает снова правило, повторяется на других листах также:(
И еще почему-то берется первая строка и добавляется на другой лист, а не последняя заполненная:(
 
Ответить
СообщениеNic70y, в новом файлике не отрабатывает снова правило, повторяется на других листах также:(
И еще почему-то берется первая строка и добавляется на другой лист, а не последняя заполненная:(

Автор - flywithme1299
Дата добавления - 21.04.2023 в 08:43
Nic70y Дата: Пятница, 21.04.2023, 14:05 | Сообщение № 12
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
[vba]
Код
Sub A_1()
    Application.ScreenUpdating = False
    'удаляем листы
    Application.DisplayAlerts = False
    For Each u In ThisWorkbook.Sheets
        If u.Index > 1 Then u.Delete
    Next
    Application.DisplayAlerts = True
    'проходимся по фио
    a = Cells(Rows.Count, "j").End(xlUp).Row
    For b = 2 To a
        c = Sheets(1).Range("j" & b).Value 'фио
        d = Application.Match(c, Sheets(1).Range("j1:j" & b), 0) 'ищем первую строку с фио
        If b = d Then 'если фио встречается вперые
            Sheets.Add After:=Sheets(Sheets.Count)  'создаем лист
            Sheets(Sheets.Count).Name = c           'назовем его = фио
            'копируем шапку....................................
            Sheets(1).Range("a1:b1").Copy Sheets(c).Range("a1")
            Sheets(1).Range("d1:i1").Copy Sheets(c).Range("c1")
        End If
        'копируем данные
        e = Sheets(c).Cells(Rows.Count, "a").End(xlUp).Row + 1 'строка вставки
        Sheets(c).Range("a" & e) = Sheets(1).Cells(b + 1, "a").End(xlUp).Value
        Sheets(c).Range("b" & e) = Cells(b + 1, "b").End(xlUp).Value
        Sheets(c).Range("c" & e & ":h" & e) = Sheets(1).Range("d" & b & ":i" & b).Value
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]
К сообщению приложен файл: 4639182.xlsm (23.1 Kb)


ЮMoney 41001841029809
 
Ответить
Сообщение[vba]
Код
Sub A_1()
    Application.ScreenUpdating = False
    'удаляем листы
    Application.DisplayAlerts = False
    For Each u In ThisWorkbook.Sheets
        If u.Index > 1 Then u.Delete
    Next
    Application.DisplayAlerts = True
    'проходимся по фио
    a = Cells(Rows.Count, "j").End(xlUp).Row
    For b = 2 To a
        c = Sheets(1).Range("j" & b).Value 'фио
        d = Application.Match(c, Sheets(1).Range("j1:j" & b), 0) 'ищем первую строку с фио
        If b = d Then 'если фио встречается вперые
            Sheets.Add After:=Sheets(Sheets.Count)  'создаем лист
            Sheets(Sheets.Count).Name = c           'назовем его = фио
            'копируем шапку....................................
            Sheets(1).Range("a1:b1").Copy Sheets(c).Range("a1")
            Sheets(1).Range("d1:i1").Copy Sheets(c).Range("c1")
        End If
        'копируем данные
        e = Sheets(c).Cells(Rows.Count, "a").End(xlUp).Row + 1 'строка вставки
        Sheets(c).Range("a" & e) = Sheets(1).Cells(b + 1, "a").End(xlUp).Value
        Sheets(c).Range("b" & e) = Cells(b + 1, "b").End(xlUp).Value
        Sheets(c).Range("c" & e & ":h" & e) = Sheets(1).Range("d" & b & ":i" & b).Value
    Next
    Application.ScreenUpdating = True
End Sub
[/vba]

Автор - Nic70y
Дата добавления - 21.04.2023 в 14:05
flywithme1299 Дата: Пятница, 21.04.2023, 14:17 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, Спасибо, но прежний код отлично справляется, но просто не хочет добавлять не сколько строк на одну фамилию:(
 
Ответить
СообщениеNic70y, Спасибо, но прежний код отлично справляется, но просто не хочет добавлять не сколько строк на одну фамилию:(

Автор - flywithme1299
Дата добавления - 21.04.2023 в 14:17
Nic70y Дата: Пятница, 21.04.2023, 14:20 | Сообщение № 14
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
flywithme1299, объединенные ячейки это зло.
одинаковые № п/п не дают ориентира.
Код отсюда исключит косяки


ЮMoney 41001841029809
 
Ответить
Сообщениеflywithme1299, объединенные ячейки это зло.
одинаковые № п/п не дают ориентира.
Код отсюда исключит косяки

Автор - Nic70y
Дата добавления - 21.04.2023 в 14:20
flywithme1299 Дата: Пятница, 21.04.2023, 14:23 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, Тут создание новых листов, а тут нужно внедрить уже имеющийся в файл, да я убрал объединенные ячейки и начал без них. в итоге получается, что один раз только срабатывает на один лист, а дальше новые строки уже не добавляет:(
 
Ответить
СообщениеNic70y, Тут создание новых листов, а тут нужно внедрить уже имеющийся в файл, да я убрал объединенные ячейки и начал без них. в итоге получается, что один раз только срабатывает на один лист, а дальше новые строки уже не добавляет:(

Автор - flywithme1299
Дата добавления - 21.04.2023 в 14:23
flywithme1299 Дата: Пятница, 21.04.2023, 14:27 | Сообщение № 16
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, то есть если новую строку вписать на одного того же человека, то на его листе, допустим Иванова, будет замена первой строки произведена, а не добавлена новая:(
 
Ответить
СообщениеNic70y, то есть если новую строку вписать на одного того же человека, то на его листе, допустим Иванова, будет замена первой строки произведена, а не добавлена новая:(

Автор - flywithme1299
Дата добавления - 21.04.2023 в 14:27
Nic70y Дата: Пятница, 21.04.2023, 14:33 | Сообщение № 17
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
flywithme1299, Вас не устраивает крайний код?
если это так, то объясните почему.


ЮMoney 41001841029809
 
Ответить
Сообщениеflywithme1299, Вас не устраивает крайний код?
если это так, то объясните почему.

Автор - Nic70y
Дата добавления - 21.04.2023 в 14:33
flywithme1299 Дата: Пятница, 21.04.2023, 14:41 | Сообщение № 18
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
Nic70y, Устраивает, более подробно посмотрел его, работает так как надо, класс, а вот только еще заметил. один столбец не правильно заполняется № с/з, дата, там он вставляется вместо номеров
 
Ответить
СообщениеNic70y, Устраивает, более подробно посмотрел его, работает так как надо, класс, а вот только еще заметил. один столбец не правильно заполняется № с/з, дата, там он вставляется вместо номеров

Автор - flywithme1299
Дата добавления - 21.04.2023 в 14:41
flywithme1299 Дата: Пятница, 21.04.2023, 14:44 | Сообщение № 19
Группа: Пользователи
Ранг: Новичок
Сообщений: 47
Репутация: 0 ±
Замечаний: 20% ±

EXCEL 2013
И удаляет еще другие листы, для справки и тому подобное Nic70y,
 
Ответить
СообщениеИ удаляет еще другие листы, для справки и тому подобное Nic70y,

Автор - flywithme1299
Дата добавления - 21.04.2023 в 14:44
Nic70y Дата: Пятница, 21.04.2023, 14:47 | Сообщение № 20
Группа: Друзья
Ранг: Экселист
Сообщений: 8761
Репутация: 2273 ±
Замечаний: 0% ±

Excel 2010
здесь
Sheets©.Range("b" & e) = Cells(b + 1, "b").End(xlUp).Value
пропустил Sheets(1), добавьте, чтоб выглядело так:[vba]
Код
        Sheets(c).Range("b" & e) = Sheets(1).Cells(b + 1, "b").End(xlUp).Value
[/vba]


ЮMoney 41001841029809
 
Ответить
Сообщениездесь
Sheets©.Range("b" & e) = Cells(b + 1, "b").End(xlUp).Value
пропустил Sheets(1), добавьте, чтоб выглядело так:[vba]
Код
        Sheets(c).Range("b" & e) = Sheets(1).Cells(b + 1, "b").End(xlUp).Value
[/vba]

Автор - Nic70y
Дата добавления - 21.04.2023 в 14:47
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Выпадающий список с выбором и автозаполнением строки (Макросы/Sub)
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

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