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

Вход

Регистрация

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

 

= Мир MS Excel/Автозавершение ввода по списку значений - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Автозавершение ввода по списку значений (Формулы/Formulas)
Автозавершение ввода по списку значений
Мурад Дата: Четверг, 04.10.2018, 17:18 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Добрый день, господа экселисты!
Нигде не могу найти решение задачи. Как реализовать автозавершение ввода в ячейке исходя из списка имеющихся значений на другом листе.
К сообщению приложен файл: 9486524.xlsx(8.4 Kb)
 
Ответить
СообщениеДобрый день, господа экселисты!
Нигде не могу найти решение задачи. Как реализовать автозавершение ввода в ячейке исходя из списка имеющихся значений на другом листе.

Автор - Мурад
Дата добавления - 04.10.2018 в 17:18
Nic70y Дата: Четверг, 04.10.2018, 17:22 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4948
Репутация: 1070 ±
Замечаний: 0% ±

Excel 2013
вдруг
http://www.excelworld.ru/board/vba/tricks/find_in_database/9-1-0-27
внезапно подойдет
(а если нет - я не причем)


ЯД(poison) 41001841029809
+7 978 049 98 74 (мтс)
 
Ответить
Сообщениевдруг
http://www.excelworld.ru/board/vba/tricks/find_in_database/9-1-0-27
внезапно подойдет
(а если нет - я не причем)

Автор - Nic70y
Дата добавления - 04.10.2018 в 17:22
_Boroda_ Дата: Четверг, 04.10.2018, 17:25 | Сообщение № 3
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13698
Репутация: 5587 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Макросом есть готовое решение
http://www.excelworld.ru/board/vba/tricks/find_in_database/9-1-0-27
Сами справитесь?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеМакросом есть готовое решение
http://www.excelworld.ru/board/vba/tricks/find_in_database/9-1-0-27
Сами справитесь?

Автор - _Boroda_
Дата добавления - 04.10.2018 в 17:25
Мурад Дата: Четверг, 04.10.2018, 17:26 | Сообщение № 4
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Спасибо, Александр! Да, постараюсь разобраться.
Видел это решение, когда занимался поиском. Но продолжал искать, надеясь на более простое решение, без использования макросов)


Сообщение отредактировал Мурад - Четверг, 04.10.2018, 17:28
 
Ответить
СообщениеСпасибо, Александр! Да, постараюсь разобраться.
Видел это решение, когда занимался поиском. Но продолжал искать, надеясь на более простое решение, без использования макросов)

Автор - Мурад
Дата добавления - 04.10.2018 в 17:26
Мурад Дата: Четверг, 04.10.2018, 18:13 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Что я неправильно сделал, можете помочь? хочу изменить блок вызова модуля поиска по клику на ячейку b2

[vba]
Код
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Range <> ("B2") Then Exit Sub
    If Target.Range = ("B2") Then ufrmNilem.Show
End Sub
[/vba]
 
Ответить
СообщениеЧто я неправильно сделал, можете помочь? хочу изменить блок вызова модуля поиска по клику на ячейку b2

[vba]
Код
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Range <> ("B2") Then Exit Sub
    If Target.Range = ("B2") Then ufrmNilem.Show
End Sub
[/vba]

Автор - Мурад
Дата добавления - 04.10.2018 в 18:13
Мурад Дата: Четверг, 04.10.2018, 18:23 | Сообщение № 6
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Массив данных B210:B632 у меня находится на листе basa. На 2 листе в ячейке B2 нужно вставлять значения через поиск.
 
Ответить
СообщениеМассив данных B210:B632 у меня находится на листе basa. На 2 листе в ячейке B2 нужно вставлять значения через поиск.

Автор - Мурад
Дата добавления - 04.10.2018 в 18:23
Мурад Дата: Четверг, 04.10.2018, 18:54 | Сообщение № 7
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Подскажите только, как вызвать форму при клике на ячейку B2 ))) Что изменить в модуле Worksheet_SelectionChange?
В остальном разобрался.
 
Ответить
СообщениеПодскажите только, как вызвать форму при клике на ячейку B2 ))) Что изменить в модуле Worksheet_SelectionChange?
В остальном разобрался.

Автор - Мурад
Дата добавления - 04.10.2018 в 18:54
Мурад Дата: Четверг, 04.10.2018, 19:27 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Разобрался и с этим. Остался последний)
Модуль зашит в листе 2, с этого листа идет вызов. Если я копирую лист 2, то с нового листа 3 вызов уже не работает. Пробовал скопировать код
[vba]
Код
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 2 And Target.Row = 2 Then ufrmNilem.Show
    'If Target.Count <> 10 Then Exit Sub
End Sub
[/vba]
в книгу, но оттуда вызов не работает((
 
Ответить
СообщениеРазобрался и с этим. Остался последний)
Модуль зашит в листе 2, с этого листа идет вызов. Если я копирую лист 2, то с нового листа 3 вызов уже не работает. Пробовал скопировать код
[vba]
Код
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Column = 2 And Target.Row = 2 Then ufrmNilem.Show
    'If Target.Count <> 10 Then Exit Sub
End Sub
[/vba]
в книгу, но оттуда вызов не работает((

Автор - Мурад
Дата добавления - 04.10.2018 в 19:27
_Boroda_ Дата: Четверг, 04.10.2018, 20:21 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13698
Репутация: 5587 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.address(0,0)<> "B2" Then Exit Sub
    ufrmNilem.Show
End Sub
[/vba]

А лучше так
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("B2")) Is Nothing Then Exit Sub
    ufrmNilem.Show
End Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.address(0,0)<> "B2" Then Exit Sub
    ufrmNilem.Show
End Sub
[/vba]

А лучше так
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Intersect(Target, Range("B2")) Is Nothing Then Exit Sub
    ufrmNilem.Show
End Sub
[/vba]

Автор - _Boroda_
Дата добавления - 04.10.2018 в 20:21
Мурад Дата: Пятница, 05.10.2018, 09:58 | Сообщение № 10
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Доброе утро!
Спасибо, Александр! Понял, почему у меня не копировался макрос при копировании листа. Надо было просто перенести код вызова формы на лист шаблона))
 
Ответить
СообщениеДоброе утро!
Спасибо, Александр! Понял, почему у меня не копировался макрос при копировании листа. Надо было просто перенести код вызова формы на лист шаблона))

Автор - Мурад
Дата добавления - 05.10.2018 в 09:58
Мурад Дата: Пятница, 05.10.2018, 10:48 | Сообщение № 11
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Не знаю, в продолжение этой же темы или надо создавать другую.
Если на одном листе в ячейке B2 создан макрос вызова формы поиска из списка значений, то как сделать на этом же листе в диапазоне A2:A40 вызов такой же формы, но с поиском по другому списку значений?
Начал с того, что задаю вызов формы поиска либо с ячейки B2, либо с диапазона A22:A40
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim r, r1, r2 As Range
    Set r1 = Range("B2")
    Set r2 = Range("A22:A40")
    Set r = Union(r1, r2)
    If Intersect(Target, Range(r)) Is Nothing Then Exit Sub
    ufrmNilem.Show
End Sub
[/vba]
И поскольку руки у меня кривые, эксель послал меня к черту, написав, что так делать нельзя)


Сообщение отредактировал Мурад - Пятница, 05.10.2018, 10:49
 
Ответить
СообщениеНе знаю, в продолжение этой же темы или надо создавать другую.
Если на одном листе в ячейке B2 создан макрос вызова формы поиска из списка значений, то как сделать на этом же листе в диапазоне A2:A40 вызов такой же формы, но с поиском по другому списку значений?
Начал с того, что задаю вызов формы поиска либо с ячейки B2, либо с диапазона A22:A40
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim r, r1, r2 As Range
    Set r1 = Range("B2")
    Set r2 = Range("A22:A40")
    Set r = Union(r1, r2)
    If Intersect(Target, Range(r)) Is Nothing Then Exit Sub
    ufrmNilem.Show
End Sub
[/vba]
И поскольку руки у меня кривые, эксель послал меня к черту, написав, что так делать нельзя)

Автор - Мурад
Дата добавления - 05.10.2018 в 10:48
Мурад Дата: Пятница, 05.10.2018, 10:59 | Сообщение № 12
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Параллельно корректирую код формы, чтобы при выборе ячейки B2 срабатывал один цикл, а при клике по диапазону A22:A40 - другой:
[vba]
Код
Option Explicit
Option Compare Text
Dim x, y

Private Sub UserForm_Initialize()
    With Worksheets("basa")
        x = .Range("C210", .Cells(Rows.Count, 3).End(xlUp)).Value '' адрес 1 базы
        y = .Range("N2", .Cells(Rows.Count, 14).End(xlUp)).Value '' адрес 2 базы
    End With
End Sub

Private Sub TextBox1_Change()
Dim i As Long, s As String, txt As String, lt As Long

txt = TextBox1.Text: lt = Len(txt)
If lt = 0 Then
    s = "" ''
Else
For i = 1 To UBound(x, 1)
If InStr(x(i, 1), txt) Then s = s & "~" & x(i, 1)
Next i
For i = 1 To UBound(y, 1)
If InStr(y(i, 1), txt) Then s = s & "~" & y(i, 1)
Next i
End If
Me.ListBox1.List = Split(Mid(s, 2), "~")
End Sub

Private Sub ListBox1_Click()
    If ListBox1.ListIndex = -1 Then Exit Sub
    Me.Label4.Caption = Me.ListBox1.Value
End Sub

Private Sub CommandButton1_Click()
Dim o1 As Worksheet

    ActiveCell.Value = Me.Label4.Caption
    
    Unload Me
End Sub
[/vba]
При такой корректировке кода, логично, что 2 базы у меня объединились)) и будут предлагаться к выбору значения из 2 баз при клике на ячейке B2
 
Ответить
СообщениеПараллельно корректирую код формы, чтобы при выборе ячейки B2 срабатывал один цикл, а при клике по диапазону A22:A40 - другой:
[vba]
Код
Option Explicit
Option Compare Text
Dim x, y

Private Sub UserForm_Initialize()
    With Worksheets("basa")
        x = .Range("C210", .Cells(Rows.Count, 3).End(xlUp)).Value '' адрес 1 базы
        y = .Range("N2", .Cells(Rows.Count, 14).End(xlUp)).Value '' адрес 2 базы
    End With
End Sub

Private Sub TextBox1_Change()
Dim i As Long, s As String, txt As String, lt As Long

txt = TextBox1.Text: lt = Len(txt)
If lt = 0 Then
    s = "" ''
Else
For i = 1 To UBound(x, 1)
If InStr(x(i, 1), txt) Then s = s & "~" & x(i, 1)
Next i
For i = 1 To UBound(y, 1)
If InStr(y(i, 1), txt) Then s = s & "~" & y(i, 1)
Next i
End If
Me.ListBox1.List = Split(Mid(s, 2), "~")
End Sub

Private Sub ListBox1_Click()
    If ListBox1.ListIndex = -1 Then Exit Sub
    Me.Label4.Caption = Me.ListBox1.Value
End Sub

Private Sub CommandButton1_Click()
Dim o1 As Worksheet

    ActiveCell.Value = Me.Label4.Caption
    
    Unload Me
End Sub
[/vba]
При такой корректировке кода, логично, что 2 базы у меня объединились)) и будут предлагаться к выбору значения из 2 баз при клике на ячейке B2

Автор - Мурад
Дата добавления - 05.10.2018 в 10:59
_Boroda_ Дата: Пятница, 05.10.2018, 10:59 | Сообщение № 13
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13698
Репутация: 5587 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Прежде всего[vba]
Код
Dim r As Range, r1 As Range, r2 As Range
[/vba]
И r у Вас уже и так ячейка, ее не нужно засовывать вовнутрь Range
[vba]
Код
If Intersect(Target, r) Is Nothing Then Exit Sub
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеПрежде всего[vba]
Код
Dim r As Range, r1 As Range, r2 As Range
[/vba]
И r у Вас уже и так ячейка, ее не нужно засовывать вовнутрь Range
[vba]
Код
If Intersect(Target, r) Is Nothing Then Exit Sub
[/vba]

Автор - _Boroda_
Дата добавления - 05.10.2018 в 10:59
Мурад Дата: Пятница, 05.10.2018, 11:15 | Сообщение № 14
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Это уже похоже на единицу мне за незнание элементарного синтаксиса <_< Но так и есть)
А как разделить в коде выше базу данных для B2 (x) и базу данных для A22:A40 (y)?
Уверен, это многим пригодится.
 
Ответить
СообщениеЭто уже похоже на единицу мне за незнание элементарного синтаксиса <_< Но так и есть)
А как разделить в коде выше базу данных для B2 (x) и базу данных для A22:A40 (y)?
Уверен, это многим пригодится.

Автор - Мурад
Дата добавления - 05.10.2018 в 11:15
_Boroda_ Дата: Пятница, 05.10.2018, 11:20 | Сообщение № 15
Группа: Модераторы
Ранг: Местный житель
Сообщений: 13698
Репутация: 5587 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
как разделить в коде выше базу данных для B2 (x) и базу данных для A22:A40 (y)?

Для i складывайте найденное в s1, а для j в s2
А дальше в Листбокс подсовывайте нужный массив в зависимости от того, какой столбец выделен


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
как разделить в коде выше базу данных для B2 (x) и базу данных для A22:A40 (y)?

Для i складывайте найденное в s1, а для j в s2
А дальше в Листбокс подсовывайте нужный массив в зависимости от того, какой столбец выделен

Автор - _Boroda_
Дата добавления - 05.10.2018 в 11:20
Мурад Дата: Пятница, 05.10.2018, 12:18 | Сообщение № 16
Группа: Проверенные
Ранг: Обитатель
Сообщений: 470
Репутация: 17 ±
Замечаний: 0% ±

Excel 2007
Ох, Александр, пришлось попотеть. Целый час ковырялся, искал в инете, пробовал. И получилось, наконец-то. Все работает, списки выводятся независимо:
[vba]
Код
Option Explicit
Option Compare Text
Dim x, y

Private Sub UserForm_Initialize()
    With Worksheets("basa")
        x = .Range("C210", .Cells(Rows.Count, 3).End(xlUp)).Value '' адрес 1 базы
        y = .Range("N2", .Cells(Rows.Count, 14).End(xlUp)).Value '' адрес 2 базы
    End With
End Sub

Private Sub TextBox1_Change()
Dim i As Long, j As Long, s1 As String, s2 As String, txt As String, lt As Long

txt = TextBox1.Text: lt = Len(txt)
If lt = 0 Then
    s1 = "" '''при отсутствии символов для поиска обнуляем ListBox
    s2 = "" '''при отсутствии символов для поиска обнуляем ListBox
Else
For i = 1 To UBound(x, 1) 'поиск по любому вхождению
If InStr(x(i, 1), txt) Then s1 = s1 & "~" & x(i, 1)
Next i
For j = 1 To UBound(y, 1) 'поиск по любому вхождению
If InStr(y(j, 1), txt) Then s2 = s2 & "~" & y(j, 1)
Next j
End If
If Not Intersect(ActiveCell, Range("B2")) Is Nothing Then
    Me.ListBox1.List = Split(Mid(s1, 2), "~")
ElseIf Not Intersect(ActiveCell, Range("A22:A40")) Is Nothing Then
    Me.ListBox1.List = Split(Mid(s2, 2), "~")
End If
End Sub

Private Sub ListBox1_Click()
    If ListBox1.ListIndex = -1 Then Exit Sub
    Me.Label4.Caption = Me.ListBox1.Value
End Sub

Private Sub CommandButton1_Click()
Dim o1 As Worksheet

    ActiveCell.Value = Me.Label4.Caption
    
    Unload Me
End Sub
[/vba]
 
Ответить
СообщениеОх, Александр, пришлось попотеть. Целый час ковырялся, искал в инете, пробовал. И получилось, наконец-то. Все работает, списки выводятся независимо:
[vba]
Код
Option Explicit
Option Compare Text
Dim x, y

Private Sub UserForm_Initialize()
    With Worksheets("basa")
        x = .Range("C210", .Cells(Rows.Count, 3).End(xlUp)).Value '' адрес 1 базы
        y = .Range("N2", .Cells(Rows.Count, 14).End(xlUp)).Value '' адрес 2 базы
    End With
End Sub

Private Sub TextBox1_Change()
Dim i As Long, j As Long, s1 As String, s2 As String, txt As String, lt As Long

txt = TextBox1.Text: lt = Len(txt)
If lt = 0 Then
    s1 = "" '''при отсутствии символов для поиска обнуляем ListBox
    s2 = "" '''при отсутствии символов для поиска обнуляем ListBox
Else
For i = 1 To UBound(x, 1) 'поиск по любому вхождению
If InStr(x(i, 1), txt) Then s1 = s1 & "~" & x(i, 1)
Next i
For j = 1 To UBound(y, 1) 'поиск по любому вхождению
If InStr(y(j, 1), txt) Then s2 = s2 & "~" & y(j, 1)
Next j
End If
If Not Intersect(ActiveCell, Range("B2")) Is Nothing Then
    Me.ListBox1.List = Split(Mid(s1, 2), "~")
ElseIf Not Intersect(ActiveCell, Range("A22:A40")) Is Nothing Then
    Me.ListBox1.List = Split(Mid(s2, 2), "~")
End If
End Sub

Private Sub ListBox1_Click()
    If ListBox1.ListIndex = -1 Then Exit Sub
    Me.Label4.Caption = Me.ListBox1.Value
End Sub

Private Sub CommandButton1_Click()
Dim o1 As Worksheet

    ActiveCell.Value = Me.Label4.Caption
    
    Unload Me
End Sub
[/vba]

Автор - Мурад
Дата добавления - 05.10.2018 в 12:18
Мир MS Excel » Вопросы и решения » Вопросы по Excel » Автозавершение ввода по списку значений (Формулы/Formulas)
  • Страница 1 из 1
  • 1
Поиск:

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