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

Вход

Регистрация

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

 

= Мир MS Excel/Автоматическая выборка кода из списка равная его значению. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическая выборка кода из списка равная его значению. (Макросы/Sub)
Автоматическая выборка кода из списка равная его значению.
enchanter Дата: Воскресенье, 13.12.2015, 00:44 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
В общем задача такая, есть определенный список на Листе 1, где скажем покупатели записаны в столбике, а рядом их уникальные коды.
А есть Лист 2 с таблицей, где мы выбираем покупателя из этого выпадающего списка, надо чтоб код этого клиента слева или справа, подставлялся сам, то есть подтягивался бы из Листа 1 и наоборот, при выборе кода выпадал бы покупатель. К сожалению формулы здесь не подходят, так как код или покупатель могут набираться в ручную, а это приведет к стиранию формулы.

Например- у Коли код 2000 на Листе 1 и если на Листе 2 я выбираю Колю, то в определенной ячейки (то есть рядом) должен появится код 2000 и так же с кодом, код 2000 = Коля
К сообщению приложен файл: 6341732.xlsx (8.9 Kb)


Сообщение отредактировал enchanter - Воскресенье, 13.12.2015, 10:14
 
Ответить
СообщениеВ общем задача такая, есть определенный список на Листе 1, где скажем покупатели записаны в столбике, а рядом их уникальные коды.
А есть Лист 2 с таблицей, где мы выбираем покупателя из этого выпадающего списка, надо чтоб код этого клиента слева или справа, подставлялся сам, то есть подтягивался бы из Листа 1 и наоборот, при выборе кода выпадал бы покупатель. К сожалению формулы здесь не подходят, так как код или покупатель могут набираться в ручную, а это приведет к стиранию формулы.

Например- у Коли код 2000 на Листе 1 и если на Листе 2 я выбираю Колю, то в определенной ячейки (то есть рядом) должен появится код 2000 и так же с кодом, код 2000 = Коля

Автор - enchanter
Дата добавления - 13.12.2015 в 00:44
enchanter Дата: Воскресенье, 13.12.2015, 10:09 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
Народ, кто нибудь может помочь или это не реально сделать?


Сообщение отредактировал enchanter - Воскресенье, 13.12.2015, 10:12
 
Ответить
СообщениеНарод, кто нибудь может помочь или это не реально сделать?

Автор - enchanter
Дата добавления - 13.12.2015 в 10:09
ikki Дата: Воскресенье, 13.12.2015, 10:25 | Сообщение № 3
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
так?
К сообщению приложен файл: 6341732.xlsm (15.3 Kb)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениетак?

Автор - ikki
Дата добавления - 13.12.2015 в 10:25
enchanter Дата: Воскресенье, 13.12.2015, 10:32 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
ikki, О нифига там сколько модулей)). А можно узнать какой это вытворяет и можно ли убрать значение "#Н/Д", ведь его потом нифига не убрать если сделать хоть раз выбор в строке, а то оно в отчете будет светится. Точнее, убрать можно но если только затирать обе ячейки сразу. А в остальном работает.


Сообщение отредактировал enchanter - Воскресенье, 13.12.2015, 10:34
 
Ответить
Сообщениеikki, О нифига там сколько модулей)). А можно узнать какой это вытворяет и можно ли убрать значение "#Н/Д", ведь его потом нифига не убрать если сделать хоть раз выбор в строке, а то оно в отчете будет светится. Точнее, убрать можно но если только затирать обе ячейки сразу. А в остальном работает.

Автор - enchanter
Дата добавления - 13.12.2015 в 10:32
ikki Дата: Воскресенье, 13.12.2015, 10:40 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
В этом файле вообще нет стандартных модулей.
Одна-единственная процедура обработки события - в модуле второго листа.

По поводу ошибки - не оч.понял вопрос. У Вас же там проверка данных и список... Проверка допустимости значения идет сначала на этом уровне...
Но дополнил немного код...

Вам показан ПРИНЦИП работы - что поставленную задачу в принципе можно решить.
А так - у нее очень много нюансов. Например, при копировании или протягивании значений, при одновременном вводе или очистке данных в нескольких ячейках сразу и т.п.
К сообщению приложен файл: 1311694.xlsm (15.4 Kb)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
СообщениеВ этом файле вообще нет стандартных модулей.
Одна-единственная процедура обработки события - в модуле второго листа.

По поводу ошибки - не оч.понял вопрос. У Вас же там проверка данных и список... Проверка допустимости значения идет сначала на этом уровне...
Но дополнил немного код...

Вам показан ПРИНЦИП работы - что поставленную задачу в принципе можно решить.
А так - у нее очень много нюансов. Например, при копировании или протягивании значений, при одновременном вводе или очистке данных в нескольких ячейках сразу и т.п.

Автор - ikki
Дата добавления - 13.12.2015 в 10:40
enchanter Дата: Воскресенье, 13.12.2015, 10:46 | Сообщение № 6
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
ikki, отлично, большое спасибо это то что нужно, оттягивать значение вниз не будем, главное чтоб выборка со списка была на автомате))). Только один вопрос - Лист1!R2C1:R25C1,MATCH(Лист2!RC2,Лист1!R2C2:R25C2,0) - Координаты ячеек и диапазоны прописаны здесь?


Сообщение отредактировал enchanter - Воскресенье, 13.12.2015, 11:01
 
Ответить
Сообщениеikki, отлично, большое спасибо это то что нужно, оттягивать значение вниз не будем, главное чтоб выборка со списка была на автомате))). Только один вопрос - Лист1!R2C1:R25C1,MATCH(Лист2!RC2,Лист1!R2C2:R25C2,0) - Координаты ячеек и диапазоны прописаны здесь?

Автор - enchanter
Дата добавления - 13.12.2015 в 10:46
ikki Дата: Воскресенье, 13.12.2015, 10:59 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
это формула со стилем ссылок R1C1 (так макрорекодер записал, переписывать в А1 не стал)
можно иначе...
может, так будет более очевидно - что и где менять...
К сообщению приложен файл: 7847321.xlsm (16.8 Kb)


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
Сообщениеэто формула со стилем ссылок R1C1 (так макрорекодер записал, переписывать в А1 не стал)
можно иначе...
может, так будет более очевидно - что и где менять...

Автор - ikki
Дата добавления - 13.12.2015 в 10:59
Kuzmich Дата: Воскресенье, 13.12.2015, 11:03 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
В модуль Листа2
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub   'выделено больше одной ячейки
   If Not Intersect(Target, Range("A2:B100")) Is Nothing Then
    Dim FoundName As Range
    Dim FoundKod As Range
      If Target.Column = 1 Then
          Application.EnableEvents = False
        With Sheets("Лист1")
          Set FoundName = .Columns(1).Find(Target, , xlValues, xlWhole)
          If Not FoundName Is Nothing Then
            Target.Offset(, 1) = .Cells(FoundName.Row, 2)
          End If
        End With
          Application.EnableEvents = True
      Else
          Application.EnableEvents = False
        With Sheets("Лист1")
          Set FoundKod = .Columns(2).Find(Target, , xlValues, xlWhole)
          If Not FoundKod Is Nothing Then
            Target.Offset(, -1) = .Cells(FoundKod.Row, 1)
          End If
        End With
          Application.EnableEvents = True
      End If
   End If
End Sub
[/vba]
 
Ответить
СообщениеВ модуль Листа2
[vba]
Код

Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub   'выделено больше одной ячейки
   If Not Intersect(Target, Range("A2:B100")) Is Nothing Then
    Dim FoundName As Range
    Dim FoundKod As Range
      If Target.Column = 1 Then
          Application.EnableEvents = False
        With Sheets("Лист1")
          Set FoundName = .Columns(1).Find(Target, , xlValues, xlWhole)
          If Not FoundName Is Nothing Then
            Target.Offset(, 1) = .Cells(FoundName.Row, 2)
          End If
        End With
          Application.EnableEvents = True
      Else
          Application.EnableEvents = False
        With Sheets("Лист1")
          Set FoundKod = .Columns(2).Find(Target, , xlValues, xlWhole)
          If Not FoundKod Is Nothing Then
            Target.Offset(, -1) = .Cells(FoundKod.Row, 1)
          End If
        End With
          Application.EnableEvents = True
      End If
   End If
End Sub
[/vba]

Автор - Kuzmich
Дата добавления - 13.12.2015 в 11:03
enchanter Дата: Воскресенье, 13.12.2015, 11:05 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 22
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
ikki, все же мир не без добрых людей. Огромное спасибо, это как раз подходит и проще первого варианта hands
 
Ответить
Сообщениеikki, все же мир не без добрых людей. Огромное спасибо, это как раз подходит и проще первого варианта hands

Автор - enchanter
Дата добавления - 13.12.2015 в 11:05
pechkin Дата: Воскресенье, 13.12.2015, 11:11 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 329
Репутация: 49 ±
Замечаний: 0% ±

2003
Тоже пробовал...
К сообщению приложен файл: 1980786.xls (41.5 Kb)
 
Ответить
СообщениеТоже пробовал...

Автор - pechkin
Дата добавления - 13.12.2015 в 11:11
Wasilich Дата: Воскресенье, 13.12.2015, 13:13 | Сообщение № 11
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
Можно применить Find, можно Match, можно перебором.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub
   If Target.Column > 2 Then Exit Sub
   With Sheets("Лист1")
       For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
           If .Cells(i, 1) = Target Then Cells(Target.Row, 2) = .Cells(i, 2): Exit Sub
           If .Cells(i, 2) = Target Then Cells(Target.Row, 1) = .Cells(i, 1): Exit Sub
       Next
   End With
End Sub
[/vba]В модуль листа.


Сообщение отредактировал Wasilic - Воскресенье, 13.12.2015, 13:56
 
Ответить
СообщениеМожно применить Find, можно Match, можно перебором.
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Cells.Count > 1 Then Exit Sub
   If Target.Column > 2 Then Exit Sub
   With Sheets("Лист1")
       For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row
           If .Cells(i, 1) = Target Then Cells(Target.Row, 2) = .Cells(i, 2): Exit Sub
           If .Cells(i, 2) = Target Then Cells(Target.Row, 1) = .Cells(i, 1): Exit Sub
       Next
   End With
End Sub
[/vba]В модуль листа.

Автор - Wasilich
Дата добавления - 13.12.2015 в 13:13
Kuzmich Дата: Воскресенье, 13.12.2015, 13:30 | Сообщение № 12
Группа: Проверенные
Ранг: Ветеран
Сообщений: 712
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Wasilic
ТС хотел подтягивания данных и при изменении имени, и кода
 
Ответить
СообщениеWasilic
ТС хотел подтягивания данных и при изменении имени, и кода

Автор - Kuzmich
Дата добавления - 13.12.2015 в 13:30
Wasilich Дата: Воскресенье, 13.12.2015, 13:51 | Сообщение № 13
Группа: Друзья
Ранг: Старожил
Сообщений: 1232
Репутация: 326 ±
Замечаний: 0% ±

2003
и при изменении имени, и кода
Поменял код.
 
Ответить
Сообщение
и при изменении имени, и кода
Поменял код.

Автор - Wasilich
Дата добавления - 13.12.2015 в 13:51
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Автоматическая выборка кода из списка равная его значению. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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