Здравствуйте! Помогите, пожалуйста, с решением следующей проблемы: Дано: Книга "ArrayTest.xls" с 2-мя листами: "Список" и "Сводная". Лист "Список" содержит перемешанные названия месяцев, дней недели и числа (от 1 до 10). Задача: Перенести в лист "Сводная" все данные, НЕ удовлетворяющие условиям, перечисленным в массиве. В данном случае массив содержит дни недели. Т.о. в лист "Сводная" должно попасть всё, кроме дней недели. Обратная задача (с переносом только дней недели) решается...а вышеупомянутая не дает ожидаемого результата. Привожу свой код, подскажите, пожалуйста, в чем ошибка?
[vba]
Код
Sub GetMonthsFromList() Dim Svod As Object Dim IndexCell As Range Dim i As Integer Dim MyArray() As Variant Dim Ai As Variant Set Svod = ThisWorkbook.Sheets("Сводная") MyArray = Array("Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье") ThisWorkbook.Sheets(1).Activate i = 1 For Each IndexCell In Range("A1:A29") For Ai = 0 To 6 If IndexCell.Value <> MyArray(Ai) Then Svod.Cells(i, 1).Value = IndexCell.Value i = i + 1 End If Next Ai Next IndexCell Erase MyArray End Sub
[/vba]
Здравствуйте! Помогите, пожалуйста, с решением следующей проблемы: Дано: Книга "ArrayTest.xls" с 2-мя листами: "Список" и "Сводная". Лист "Список" содержит перемешанные названия месяцев, дней недели и числа (от 1 до 10). Задача: Перенести в лист "Сводная" все данные, НЕ удовлетворяющие условиям, перечисленным в массиве. В данном случае массив содержит дни недели. Т.о. в лист "Сводная" должно попасть всё, кроме дней недели. Обратная задача (с переносом только дней недели) решается...а вышеупомянутая не дает ожидаемого результата. Привожу свой код, подскажите, пожалуйста, в чем ошибка?
[vba]
Код
Sub GetMonthsFromList() Dim Svod As Object Dim IndexCell As Range Dim i As Integer Dim MyArray() As Variant Dim Ai As Variant Set Svod = ThisWorkbook.Sheets("Сводная") MyArray = Array("Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье") ThisWorkbook.Sheets(1).Activate i = 1 For Each IndexCell In Range("A1:A29") For Ai = 0 To 6 If IndexCell.Value <> MyArray(Ai) Then Svod.Cells(i, 1).Value = IndexCell.Value i = i + 1 End If Next Ai Next IndexCell Erase MyArray End Sub
Normanjazz, вариант 1. использовать словарь для исключений, и проверять не перебором а проверкой наличия в словаре. Вариант 2. Использовать автофильтр и масиив исключений для фильтрации, результат просто переносится простым копированием.
Normanjazz, вариант 1. использовать словарь для исключений, и проверять не перебором а проверкой наличия в словаре. Вариант 2. Использовать автофильтр и масиив исключений для фильтрации, результат просто переносится простым копированием.bmv98rus
Замечательный Временно просто медведь , процентов на 20.
Normanjazz, вариант 1. использовать словарь для исключений, и проверять не перебором а проверкой наличия в словаре. Вариант 2. Использовать автофильтр и масиив исключений для фильтрации, результат просто переносится простым копированием.
Огромное спасибо за ответ, буду штудировать интернет по вопросу словаря. А по поводу Варианта 2 - не подходит. Данная задача умышлено примитивизирована для акцента на вопросе о массиве/ словаре. На деле, огромное кол-во книг и листов с информацией инженерно-технического характера, спецификаций и пр...
Normanjazz, вариант 1. использовать словарь для исключений, и проверять не перебором а проверкой наличия в словаре. Вариант 2. Использовать автофильтр и масиив исключений для фильтрации, результат просто переносится простым копированием.
Огромное спасибо за ответ, буду штудировать интернет по вопросу словаря. А по поводу Варианта 2 - не подходит. Данная задача умышлено примитивизирована для акцента на вопросе о массиве/ словаре. На деле, огромное кол-во книг и листов с информацией инженерно-технического характера, спецификаций и пр...Normanjazz
Sub GetMonthsFromList() Dim Svod As Object Dim IndexCell As Range Dim i As Integer, Ai As Variant, boolFound As Boolean Dim MyArray() As Variant Set Svod = ThisWorkbook.Sheets("Сводная") MyArray = Array("Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье") ThisWorkbook.Sheets(1).Activate i = 0 For Each IndexCell In Range("A1:A29") boolFound = False For Ai = 0 To 6 If IndexCell.Value = MyArray(Ai) Then boolFound = True Exit For End If Next Ai If boolFound = False Then i = i + 1 Svod.Cells(i, 1).Value = IndexCell.Value End If Next IndexCell Erase MyArray End Sub
[/vba]
PS. Не цитируйте посты целиком. Чтобы ответить, не нужно щелкать кнопку "Цитата", а достаточно прокрутить страницу вниз и там будет поле для написания поста. Если хотите к кому-то обратиться, то просто напишите ник.
[vba]
Код
Sub GetMonthsFromList() Dim Svod As Object Dim IndexCell As Range Dim i As Integer, Ai As Variant, boolFound As Boolean Dim MyArray() As Variant Set Svod = ThisWorkbook.Sheets("Сводная") MyArray = Array("Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота", "Воскресенье") ThisWorkbook.Sheets(1).Activate i = 0 For Each IndexCell In Range("A1:A29") boolFound = False For Ai = 0 To 6 If IndexCell.Value = MyArray(Ai) Then boolFound = True Exit For End If Next Ai If boolFound = False Then i = i + 1 Svod.Cells(i, 1).Value = IndexCell.Value End If Next IndexCell Erase MyArray End Sub
[/vba]
PS. Не цитируйте посты целиком. Чтобы ответить, не нужно щелкать кнопку "Цитата", а достаточно прокрутить страницу вниз и там будет поле для написания поста. Если хотите к кому-то обратиться, то просто напишите ник.Karataev