Помогите составить такое условие, имея два массива, которые нужно друг с другом сравнить. И если в одном массиве, нету некоторых значений, то выдать в listbox1 каких именно значений он не нашел.
Иным словом, в первом списке мы имеем Первый, Россия 1, НТВ. И сравниваем его со вторым списком, где есть Первый, Россия 1. То listBox1 нам должен отразить только НТВ. А ListBox2 тем временем выдаст Первый, Россия 1
Я прикрепляю файл.
Весь код, выглядит так:
[vba]
Код
Option Explicit Dim j, p, NumRow, NumCol, iRow, iCol As Integer 'Dim a As Range, c As Range Dim iArray(1 To 9) 'указываем размерность массива (5 элементов: от 1 до 5) Dim yArray() 'объявляем массив. Размерность массива ниже в коде не указываем. Dim y, i As Variant
With ListBox1 ' Выводим на ListBox1 каналы которых нет в плане For i = LBound(iArray) To UBound(iArray) For y = LBound(yArray) To UBound(yArray) 'MsgBox yArray(y, 1) & " = " & iArray(i) If iArray(i) = yArray(y, 1) Then 'MsgBox "равно " & iArray(i) & " = " & yArray(y, 1) Exit For ElseIf iArray(i) <> yArray(y, 1) Then .AddItem iArray(i) Exit For End If Next y Next i End With
With ListBox2 ' Выводим на ллистбок каналы которых есть в плане For y = LBound(yArray) To UBound(yArray) 'цикл от нижней границе массива до верхней границы массива 'MsgBox y & "-й элемент массива равен: " & yArray(y, 1) 'y - строка, 1 - это столбец .AddItem yArray(y, 1) Next y End With
End Sub
[/vba]
[p.s.]спасибо.[/p.s.]
Запаролся...
Помогите составить такое условие, имея два массива, которые нужно друг с другом сравнить. И если в одном массиве, нету некоторых значений, то выдать в listbox1 каких именно значений он не нашел.
Иным словом, в первом списке мы имеем Первый, Россия 1, НТВ. И сравниваем его со вторым списком, где есть Первый, Россия 1. То listBox1 нам должен отразить только НТВ. А ListBox2 тем временем выдаст Первый, Россия 1
Я прикрепляю файл.
Весь код, выглядит так:
[vba]
Код
Option Explicit Dim j, p, NumRow, NumCol, iRow, iCol As Integer 'Dim a As Range, c As Range Dim iArray(1 To 9) 'указываем размерность массива (5 элементов: от 1 до 5) Dim yArray() 'объявляем массив. Размерность массива ниже в коде не указываем. Dim y, i As Variant
With ListBox1 ' Выводим на ListBox1 каналы которых нет в плане For i = LBound(iArray) To UBound(iArray) For y = LBound(yArray) To UBound(yArray) 'MsgBox yArray(y, 1) & " = " & iArray(i) If iArray(i) = yArray(y, 1) Then 'MsgBox "равно " & iArray(i) & " = " & yArray(y, 1) Exit For ElseIf iArray(i) <> yArray(y, 1) Then .AddItem iArray(i) Exit For End If Next y Next i End With
With ListBox2 ' Выводим на ллистбок каналы которых есть в плане For y = LBound(yArray) To UBound(yArray) 'цикл от нижней границе массива до верхней границы массива 'MsgBox y & "-й элемент массива равен: " & yArray(y, 1) 'y - строка, 1 - это столбец .AddItem yArray(y, 1) Next y End With
Private Sub UserForm_Initialize() Dim i&, n&, s$, k(), p(), dic As Object k = Worksheets("Каналы").Range("A4:A23").Value p = Worksheets("План").Range("D12:D16").Value Set dic = CreateObject("Scripting.Dictionary") For i = 1 To UBound(p) dic(UCase$(Trim$(p(i, 1)))) = i Next For i = 1 To UBound(k) k(i, 1) = Trim$(k(i, 1)) s = k(i, 1) n = InStr(s, "(") If n Then s = Left$(s, n - 1) If dic.exists(UCase$(RTrim$(s))) Then ListBox2.AddItem k(i, 1) Else ListBox1.AddItem k(i, 1) End If Next End Sub
[/vba]
можно, например, так: [vba]
Код
Private Sub UserForm_Initialize() Dim i&, n&, s$, k(), p(), dic As Object k = Worksheets("Каналы").Range("A4:A23").Value p = Worksheets("План").Range("D12:D16").Value Set dic = CreateObject("Scripting.Dictionary") For i = 1 To UBound(p) dic(UCase$(Trim$(p(i, 1)))) = i Next For i = 1 To UBound(k) k(i, 1) = Trim$(k(i, 1)) s = k(i, 1) n = InStr(s, "(") If n Then s = Left$(s, n - 1) If dic.exists(UCase$(RTrim$(s))) Then ListBox2.AddItem k(i, 1) Else ListBox1.AddItem k(i, 1) End If Next End Sub
Да, спасибо. Это тоже работает, хотя мне не нужно было использовать список на другом листе, но это мелочи. Я немного по другому сделал, но данный способ мне нравится тем что он преобразует все в текст, убирает пробелы, в общем сливает все воедино и после этого сравнивает. Таким образом можно избежать некоторых пользовательских ошибок.
Но у меня теперь другой вопрос. ListBox1 заполняется из массива и массив имеет элементы от 1 до 20. Я могу использовать эти номера (1-20), при добавлении их в listbox2 по двойному клику, так что бы номер элемента из массива - к примеру №3, занимал в listbox2 - 3-ю позицию? Мне это чисто интересно, просто я мало работал с listbox. [moder]Это уже к данной теме не относится. Создайте новую тему.[/moder]
Да, спасибо. Это тоже работает, хотя мне не нужно было использовать список на другом листе, но это мелочи. Я немного по другому сделал, но данный способ мне нравится тем что он преобразует все в текст, убирает пробелы, в общем сливает все воедино и после этого сравнивает. Таким образом можно избежать некоторых пользовательских ошибок.
Но у меня теперь другой вопрос. ListBox1 заполняется из массива и массив имеет элементы от 1 до 20. Я могу использовать эти номера (1-20), при добавлении их в listbox2 по двойному клику, так что бы номер элемента из массива - к примеру №3, занимал в listbox2 - 3-ю позицию? Мне это чисто интересно, просто я мало работал с listbox. [moder]Это уже к данной теме не относится. Создайте новую тему.[/moder]lopuxi
О_о ...и так можно было?
Сообщение отредактировал Manyasha - Вторник, 02.06.2015, 13:45