Здравствуйте. Ребята есть два выпадающих списка, например, в ячейке A1 и A2. При выборе значения из списка А1 yнеобходимо отобразить данное значение в списке А2, при условии, если данное значение есть в списке A2, если нет такого значения, то не отображать. Использую данный код [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'При выборе данных в списке A1
If Range("A1") <> Range("A2") Then 'Если данные A1 не совпадают с A2 Range("A2") = Range("A1") 'То в А2 отобразить те данные которые совпадают со списком А1 и выбраны в списке А1 Else End If
End Sub
[/vba] но он отображает в списке А2 все подряд что выбрано в A1.
Здравствуйте. Ребята есть два выпадающих списка, например, в ячейке A1 и A2. При выборе значения из списка А1 yнеобходимо отобразить данное значение в списке А2, при условии, если данное значение есть в списке A2, если нет такого значения, то не отображать. Использую данный код [vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'При выборе данных в списке A1
If Range("A1") <> Range("A2") Then 'Если данные A1 не совпадают с A2 Range("A2") = Range("A1") 'То в А2 отобразить те данные которые совпадают со списком А1 и выбраны в списке А1 Else End If
End Sub
[/vba] но он отображает в списке А2 все подряд что выбрано в A1.Сергей13
Сообщение отредактировал Сергей13 - Среда, 20.02.2019, 19:54
При выборе значения из списка А1 yнеобходимо отобразить данное значение в списке А2, при условии, если данное значение есть в списке A2, если нет такого значения, то не отображать.
Как я понял, на русский язык это переводится так: если А1=А2( если данное значение есть в списке A2), то нужно сделать чтобы А2=А1(необходимо отобразить данное значение в списке А2). Кроме того не понятно, о каком списке речь, если А2 это ячейка и А1 ячейка? Ваш макрос выполняет то что написано, если А1<>A2, макрос делает их равными, а если они равны, то и делать ничего не надо. Следовательно при любом раскладе А2 будет равен А1. Что не так?
При выборе значения из списка А1 yнеобходимо отобразить данное значение в списке А2, при условии, если данное значение есть в списке A2, если нет такого значения, то не отображать.
Как я понял, на русский язык это переводится так: если А1=А2( если данное значение есть в списке A2), то нужно сделать чтобы А2=А1(необходимо отобразить данное значение в списке А2). Кроме того не понятно, о каком списке речь, если А2 это ячейка и А1 ячейка? Ваш макрос выполняет то что написано, если А1<>A2, макрос делает их равными, а если они равны, то и делать ничего не надо. Следовательно при любом раскладе А2 будет равен А1. Что не так?gling
ЯД-41001506838083
Сообщение отредактировал gling - Среда, 20.02.2019, 20:36
gling, Списки выпадающие, код мой чисто пробный. Условие простое но объяснить просто мне как то сложно…
Для примера возьмем числовые значения: Список А1 заполнен числовыми значениями 1, 2, 3 Список А2 заполнен числовыми значениями 1, 4, 5 Если в списке А1 выбрать 1 то в списке А2 должно отобразиться 1 Если в списке А1 выбрать 2 то в списке А2 не должно отображаться ничего, потому как 2 нет в списке А2.
gling, Списки выпадающие, код мой чисто пробный. Условие простое но объяснить просто мне как то сложно…
Для примера возьмем числовые значения: Список А1 заполнен числовыми значениями 1, 2, 3 Список А2 заполнен числовыми значениями 1, 4, 5 Если в списке А1 выбрать 1 то в списке А2 должно отобразиться 1 Если в списке А1 выбрать 2 то в списке А2 не должно отображаться ничего, потому как 2 нет в списке А2.Сергей13
Попробуйте вариант, но он только для вашего примера, если есть пробелы и запятые, если запятые подряд без пробела, то будет приниматься за одно слово.[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'При выборе данных в списке A1 i = Application.IfError(Application.Search(" " & Range("A1") & ",", " " & Range("A2") & ","), 0) If i > 0 Then Range("A2") = Range("A1") 'То в А2 отобразить те данные которые совпадают со списком А1 и выбраны в списке А1 End If End Sub
[/vba]
Попробуйте вариант, но он только для вашего примера, если есть пробелы и запятые, если запятые подряд без пробела, то будет приниматься за одно слово.[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'При выборе данных в списке A1 i = Application.IfError(Application.Search(" " & Range("A1") & ",", " " & Range("A2") & ","), 0) If i > 0 Then Range("A2") = Range("A1") 'То в А2 отобразить те данные которые совпадают со списком А1 и выбраны в списке А1 End If End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strSpisok1 As String, arrSpisok2 Dim i As Long
If Target.Cells.CountLarge > 1 Then Exit Sub If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
strSpisok1 = Target.Value arrSpisok2 = Split(Range("B1").Validation.Formula1, ";") For i = 0 To UBound(arrSpisok2) If arrSpisok2(i) = strSpisok1 Then Range("B1").Value = strSpisok1 Exit Sub End If Next i Range("B1").ClearContents
End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strSpisok1 As String, arrSpisok2 Dim i As Long
If Target.Cells.CountLarge > 1 Then Exit Sub If Intersect(Target, Range("A1")) Is Nothing Then Exit Sub
strSpisok1 = Target.Value arrSpisok2 = Split(Range("B1").Validation.Formula1, ";") For i = 0 To UBound(arrSpisok2) If arrSpisok2(i) = strSpisok1 Then Range("B1").Value = strSpisok1 Exit Sub End If Next i Range("B1").ClearContents
Karataev, для упрощения примера, списки были созданы путем ввода данных непосредственно в самих списках, в реальности списки формирует диапазон, поэтому данный код не срабатывает... Данный пример с сокращенными диапазонами, но с Вашим кодом.
Karataev, для упрощения примера, списки были созданы путем ввода данных непосредственно в самих списках, в реальности списки формирует диапазон, поэтому данный код не срабатывает... Данный пример с сокращенными диапазонами, но с Вашим кодом.Сергей13
Private Sub Worksheet_Change(ByVal Target As Range)
Dim varSpisok1, rngSpisok2 As Range
If Target.Cells.CountLarge > 1 Then Exit Sub If Intersect(Target, Range("J5")) Is Nothing Then Exit Sub
varSpisok1 = Target.Value Set rngSpisok2 = ActiveWorkbook.Names(Mid(Range("M5").Validation.Formula1, 2)).RefersToRange
Application.EnableEvents = False If WorksheetFunction.CountIf(rngSpisok2, varSpisok1) <> 0 Then Range("M5").Value = varSpisok1 Else Range("M5:N5").ClearContents End If Application.EnableEvents = True
End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
Dim varSpisok1, rngSpisok2 As Range
If Target.Cells.CountLarge > 1 Then Exit Sub If Intersect(Target, Range("J5")) Is Nothing Then Exit Sub
varSpisok1 = Target.Value Set rngSpisok2 = ActiveWorkbook.Names(Mid(Range("M5").Validation.Formula1, 2)).RefersToRange
Application.EnableEvents = False If WorksheetFunction.CountIf(rngSpisok2, varSpisok1) <> 0 Then Range("M5").Value = varSpisok1 Else Range("M5:N5").ClearContents End If Application.EnableEvents = True