0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 7
|
|
1 | |
Использование цикла в .find09.06.2011, 18:52. Показов 4762. Ответов 17
Метки нет (Все метки)
Добрый день! Столкнулся с необходимостью совмещения двух таблиц с одинаковой номенклатурой, но разными показателями. Для удобства взял первую за основу, куда посредством макроса решил перетянуть нехватающие сведения. Вроде бы ничто сложностей не предвещало... Хотел сделать поиск, перебирая в цикле наименования, затем, посредством Mid () выуживать номер строки с результатом, ну и копировать, что нужно. Код получился следующим:
Sub sootv() Dim n Dim i As Integer Dim chto Dim sht As Worksheet, ipr As Worksheet Dim y As Range Set sht = Workbooks("Копия.xlsm").Worksheets("База") Set ipr = Workbooks("Копия.xlsm").Worksheets("Лист1") For i = 1 To 13000 If sht.Cells(i, 3).Interior.ColorIndex = sht.Cells(44, 3).Interior.ColorIndex Then 'соответствие заливки шаблону chto = sht.Cells(i, 7).Value With Workbooks("копия.xlsm").Worksheets("Лист1").Columns(6) Set y = .Cells.Find(chto) If Not y Is Nothing Then n = Mid(y.Address, (InStr(2, y.Address, "$") + 1)) 'получаю номер искомой строки sht.Cells(i, 46).Value = ipr.Cells(n, 91).Value sht.Cells(i, 47).Value = ipr.Cells(n, 93).Value sht.Cells(i, 48).Value = ipr.Cells(n, 94).Value sht.Cells(i, 49).Value = ipr.Cells(n, 95).Value sht.Cells(i, 50).Value = ipr.Cells(n, 96).Value End If End With End If Next i End Sub (обе таблицы в одной книге на разных листах- пилотный вариант, в жизни это будут в разных) При попытке запуска Basic выдает ошибку 13 Type mismatch на "Set y = .Cells.Find(chto)". Подскажите пожалуйста, в чем может быть дело.
0
|
09.06.2011, 18:52 | |
Ответы с готовыми решениями:
17
Использование метода Find Использование функции find Использование цикла Использование цикла FOR.. |
1389 / 530 / 67
Регистрация: 10.04.2009
Сообщений: 8,724
|
|
09.06.2011, 19:08 | 2 |
1
|
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 7
|
|
09.06.2011, 20:10 [ТС] | 3 |
Cells вообще удалил- он от безысходности там появился =) А ларчик просто открывался- длина искомых значений просто на просто превышала допустимую для Find. Решил ограничиться 150 символами: chto = Left(CStr(sht.Cells(i, 7).Value), 150).
0
|
1389 / 530 / 67
Регистрация: 10.04.2009
Сообщений: 8,724
|
|
09.06.2011, 20:15 | 4 |
и какая же допустимая???
Добавлено через 1 минуту это первые 150 знаков ячейки??
0
|
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 7
|
|
09.06.2011, 20:36 [ТС] | 5 |
Получается 255 символов- максимум. Да, первые 150 знаков.
0
|
1389 / 530 / 67
Регистрация: 10.04.2009
Сообщений: 8,724
|
|
09.06.2011, 20:40 | 6 |
Получается 255 символов
не знал, просто нужды не было а что Мид не устраивает
0
|
1563 / 364 / 100
Регистрация: 13.11.2008
Сообщений: 754
|
|||||||||||||||||||||
09.06.2011, 20:44 | 7 | ||||||||||||||||||||
Учитесь явно указывать все аргументы:
1
|
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 7
|
|
09.06.2011, 20:50 [ТС] | 8 |
Эм, в силу своего дилетантства воспользовался первым пришедшим на ум- left =) Если посоветуете как код сделать рациональнее буду очень признателен.
Добавлено через 2 минуты The_Prist, спасибо!
0
|
1389 / 530 / 67
Регистрация: 10.04.2009
Сообщений: 8,724
|
|
09.06.2011, 20:54 | 9 |
если следовать строго заданию, то и от цифирок 46-50 и 91-96 надо избавится
0
|
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 7
|
|
09.06.2011, 21:05 [ТС] | 10 |
Дело в том, что таблицы строго унифицированы, и прорабатывать логику нахождения соответствующих граф незачем, их номера являются константами.
0
|
1563 / 364 / 100
Регистрация: 13.11.2008
Сообщений: 754
|
||||||
09.06.2011, 21:05 | 11 | |||||
Кстати, если поиск организовать на массивах - будет и быстрее и без всяких MID.
А если уж с Mid, то строку надо так сделать, наверное:
1
|
1389 / 530 / 67
Регистрация: 10.04.2009
Сообщений: 8,724
|
||||||
09.06.2011, 21:28 | 12 | |||||
рад за Вас
у меня такое редко бывает строго унифицированное как правило приходится деунифицировать Ну ничего поменяете потом Добавлено через 11 минут на седьмой строке кода в седьмом сообщении у меня так:
???????
0
|
1563 / 364 / 100
Регистрация: 13.11.2008
Сообщений: 754
|
|
09.06.2011, 21:40 | 13 |
А книга "Book.xlsm" существует? А она открыта? Если да - лист "Sheet1" в ней есть?
Готов поспорить, что нет либо одного из перечисленного, либо всего вместе.
0
|
1389 / 530 / 67
Регистрация: 10.04.2009
Сообщений: 8,724
|
|
09.06.2011, 21:55 | 14 |
ой не надо спорить, Вы правы
0
|
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 7
|
|
09.06.2011, 23:05 [ТС] | 15 |
The_Prist, а у Вас случаем не найдется примера поиска в массиве, или чего-либо схожего? Не имел дела с массивами, а с нуля тяжко начинать. Нынешний вариант, при всех плюсах, действительно работает достаточно медленно, так что возможность ускорение процесса очень актуальна
0
|
1563 / 364 / 100
Регистрация: 13.11.2008
Сообщений: 754
|
||||||
10.06.2011, 10:40 | 17 | |||||
Если честно, то у меня если и есть примеры с массивами - то Вы ни фига в них не поймете, раз работать с ними не умеете. И можно было бы догадаться, что помочь Вам с ВАШИМИ файлами проще. Посему переделал макрос наугад, исходя из одного только Вашего кода:
1
|
0 / 0 / 0
Регистрация: 09.06.2011
Сообщений: 7
|
|
10.06.2011, 11:24 [ТС] | 18 |
Благодарю!
0
|
10.06.2011, 11:24 | |
10.06.2011, 11:24 | |
Помогаю со студенческими работами здесь
18
использование цикла Использование цикла while Использование цикла while Использование цикла for Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |