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

Вход

Регистрация

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

 

= Мир MS Excel/и опять ВПР - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
и опять ВПР
mark Дата: Вторник, 11.12.2012, 16:01 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Прошу консультацю по функции ВПР. Есть 2 больших списка - на Лист1 500 000 строк, на Лист2 около 900 000. Данные отсортированы по алфавиту. При помощи ВПР с листа2 переношу данные на лист1. Подскажите, пожалуйста, как в макросе в функцию ВПР вставить диапазон данных Листа2 из переменной, т.е. в ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],Лист2!R[-1]C[-2]:R[1010]C[-1],2,0)" вместо 1010 вставить значение переменной SS. Кол-во строк постоянно меняется, а вручную каждый раз править - несолидно.

И второй вопрос, на последних 100 000 строках Листа1 в формуле ВПР диапазон просматриваемых данных на листе2 выходит за границы допустимых миллиона строк. Это очень критично? Можно ли сделать такой трюк: первая строка Листа1 просматривает весь диапазон данных Листа2, втрая строка Листа1 просматривает Лист2 с места остановки предыдущей формулы и только до конца диапазона данных, и т.д., т.е. просмотр диапазона постоянно сужается?
Спасибо
К сообщению приложен файл: 1624238.rar (54.9 Kb)


Александр
 
Ответить
СообщениеПрошу консультацю по функции ВПР. Есть 2 больших списка - на Лист1 500 000 строк, на Лист2 около 900 000. Данные отсортированы по алфавиту. При помощи ВПР с листа2 переношу данные на лист1. Подскажите, пожалуйста, как в макросе в функцию ВПР вставить диапазон данных Листа2 из переменной, т.е. в ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],Лист2!R[-1]C[-2]:R[1010]C[-1],2,0)" вместо 1010 вставить значение переменной SS. Кол-во строк постоянно меняется, а вручную каждый раз править - несолидно.

И второй вопрос, на последних 100 000 строках Листа1 в формуле ВПР диапазон просматриваемых данных на листе2 выходит за границы допустимых миллиона строк. Это очень критично? Можно ли сделать такой трюк: первая строка Листа1 просматривает весь диапазон данных Листа2, втрая строка Листа1 просматривает Лист2 с места остановки предыдущей формулы и только до конца диапазона данных, и т.д., т.е. просмотр диапазона постоянно сужается?
Спасибо

Автор - mark
Дата добавления - 11.12.2012 в 16:01
RAN Дата: Вторник, 11.12.2012, 16:47 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Code
ActiveCell.FormulaR1C1=VLOOKUP(RC[-2];Лист2!C1:C2;2;0)

И больше ничего.


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Code
ActiveCell.FormulaR1C1=VLOOKUP(RC[-2];Лист2!C1:C2;2;0)

И больше ничего.

Автор - RAN
Дата добавления - 11.12.2012 в 16:47
alex77755 Дата: Вторник, 11.12.2012, 17:44 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Я бы при количестве строк более 1000 уже бы отказался б от формул
При таких объёмах только макросы и только словари!
Не стал проверять, возможно с макрос с Find будет работать более-менее приемлимо.
Но при 1000000 строк я не дождался завершения выполнения. прошло более 15 минут.
Теперь выделил столбец для очистки и ексел опять задумался
100000=2с
500000=45с
при лимоне завис
Блин!! кто придумал такую капчу? За что дискриминируете дальтоников?


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеЯ бы при количестве строк более 1000 уже бы отказался б от формул
При таких объёмах только макросы и только словари!
Не стал проверять, возможно с макрос с Find будет работать более-менее приемлимо.
Но при 1000000 строк я не дождался завершения выполнения. прошло более 15 минут.
Теперь выделил столбец для очистки и ексел опять задумался
100000=2с
500000=45с
при лимоне завис
Блин!! кто придумал такую капчу? За что дискриминируете дальтоников?

Автор - alex77755
Дата добавления - 11.12.2012 в 17:44
Serge_007 Дата: Вторник, 11.12.2012, 17:51 | Сообщение № 4
Группа: Админы
Ранг: Местный житель
Сообщений: 16475
Репутация: 2749 ±
Замечаний: ±

Excel 2016
alex77755, а где у Вас появляется капча?!
Она отключена у всех, кроме гостей


ЮMoney:41001419691823 | WMR:126292472390
 
Ответить
Сообщение alex77755, а где у Вас появляется капча?!
Она отключена у всех, кроме гостей

Автор - Serge_007
Дата добавления - 11.12.2012 в 17:51
alex77755 Дата: Вторник, 11.12.2012, 18:02 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

Я пытался ответить. Думал вход автоматом как на некоторых форумах. Потом досмотрел, что я гость. Вошёл - всё получилось. Спасибо за уважение


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеЯ пытался ответить. Думал вход автоматом как на некоторых форумах. Потом досмотрел, что я гость. Вошёл - всё получилось. Спасибо за уважение

Автор - alex77755
Дата добавления - 11.12.2012 в 18:02
KuklP Дата: Вторник, 11.12.2012, 20:59 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2369
Репутация: 486 ±
Замечаний: 0% ±

2003-2010
Quote (alex77755)
Не стал проверять, возможно с макрос с Find будет работать более-менее приемлимо.
Не будет. Лучший вариант на словаре.


Ну с НДС и мы чего-то стoим! kuklp60@gmail.com
WM Z206653985942, R334086032478, U238399322728
 
Ответить
Сообщение
Quote (alex77755)
Не стал проверять, возможно с макрос с Find будет работать более-менее приемлимо.
Не будет. Лучший вариант на словаре.

Автор - KuklP
Дата добавления - 11.12.2012 в 20:59
mark Дата: Среда, 12.12.2012, 22:30 | Сообщение № 7
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Спасибо всем, кто откликнулся, но ответа так и не получил. Ran предложил формулу ActiveCell.FormulaR1C1=VLOOKUP(RC[-2];Лист2!C1:C2;2;0), но непонятно, Лист2!C1:C2 - как этим пользоваться, в ячейках С1 и С2 должны быть мои переменные?
А насчет сужения диапазона по мере просмотра данных на Листе2 может какой цикл организовать?, но опять- таки не знаю, как вставить значение переменной в формулу ВПР

Насчет скорости - это кусок из реальной рабочей книги, кроме выборки данных, там еще происходит переименование колонок, их перемещение, все работает, но по времени занимает минут 10-15, хотелось бы ускорить процесс.


Александр
 
Ответить
СообщениеСпасибо всем, кто откликнулся, но ответа так и не получил. Ran предложил формулу ActiveCell.FormulaR1C1=VLOOKUP(RC[-2];Лист2!C1:C2;2;0), но непонятно, Лист2!C1:C2 - как этим пользоваться, в ячейках С1 и С2 должны быть мои переменные?
А насчет сужения диапазона по мере просмотра данных на Листе2 может какой цикл организовать?, но опять- таки не знаю, как вставить значение переменной в формулу ВПР

Насчет скорости - это кусок из реальной рабочей книги, кроме выборки данных, там еще происходит переименование колонок, их перемещение, все работает, но по времени занимает минут 10-15, хотелось бы ускорить процесс.

Автор - mark
Дата добавления - 12.12.2012 в 22:30
RAN Дата: Среда, 12.12.2012, 22:57 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Немного с синтаксисом ошибся. На ВПР писал
Замените в макросе строчку
Code
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],Лист2!C1:C2,2,0)"


mark, Лист2!C1:C2 - это не 2 ячейки, а минимум 120 тысяч, или 2 млн.
Переведите эту формулу в стиль А1, и увидите.


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Среда, 12.12.2012, 22:59
 
Ответить
СообщениеНемного с синтаксисом ошибся. На ВПР писал
Замените в макросе строчку
Code
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-2],Лист2!C1:C2,2,0)"


mark, Лист2!C1:C2 - это не 2 ячейки, а минимум 120 тысяч, или 2 млн.
Переведите эту формулу в стиль А1, и увидите.

Автор - RAN
Дата добавления - 12.12.2012 в 22:57
RAN Дата: Среда, 12.12.2012, 23:15 | Сообщение № 9
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
А вообще - вот ваш макрос

[vba]
Code
Sub сравнение_mark()
With Sheets("Лист1").Range("A2").CurrentRegion.Offset(1).Resize(, 1)
.Offset(, 2).FormulaR1C1 = "=VLOOKUP(RC[-2],Лист2!C1:C2,2,0)"
End With
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеА вообще - вот ваш макрос

[vba]
Code
Sub сравнение_mark()
With Sheets("Лист1").Range("A2").CurrentRegion.Offset(1).Resize(, 1)
.Offset(, 2).FormulaR1C1 = "=VLOOKUP(RC[-2],Лист2!C1:C2,2,0)"
End With
End Sub
[/vba]

Автор - RAN
Дата добавления - 12.12.2012 в 23:15
RAN Дата: Среда, 12.12.2012, 23:41 | Сообщение № 10
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
На словаре

[vba]
Code
Sub qqq()
Dim arr, i&
arr = Sheets("Лист2").Range("A1").CurrentRegion.Offset(1).Value
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arr)
.Item(arr(i, 1)) = arr(i, 2)
Next
arr = Sheets("Лист1").Range("A1").CurrentRegion.Offset(1).Resize(, 3).Value
For i = 1 To UBound(arr)
If .exists(arr(i, 1)) Then arr(i, 3) = .Item(arr(i, 1))
Next
End With
Sheets("Лист1").Columns("C").NumberFormat = "@"
Sheets("Лист1").Range("A2").Resize(UBound(arr), 3) = arr
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеНа словаре

[vba]
Code
Sub qqq()
Dim arr, i&
arr = Sheets("Лист2").Range("A1").CurrentRegion.Offset(1).Value
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(arr)
.Item(arr(i, 1)) = arr(i, 2)
Next
arr = Sheets("Лист1").Range("A1").CurrentRegion.Offset(1).Resize(, 3).Value
For i = 1 To UBound(arr)
If .exists(arr(i, 1)) Then arr(i, 3) = .Item(arr(i, 1))
Next
End With
Sheets("Лист1").Columns("C").NumberFormat = "@"
Sheets("Лист1").Range("A2").Resize(UBound(arr), 3) = arr
End Sub
[/vba]

Автор - RAN
Дата добавления - 12.12.2012 в 23:41
mark Дата: Четверг, 13.12.2012, 00:10 | Сообщение № 11
Группа: Пользователи
Ранг: Прохожий
Сообщений: 3
Репутация: 0 ±
Замечаний: 0% ±

Всем огромное спасибо, разобрался


Александр
 
Ответить
СообщениеВсем огромное спасибо, разобрался

Автор - mark
Дата добавления - 13.12.2012 в 00:10
  • Страница 1 из 1
  • 1
Поиск:

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