Добрый день! на просторах интернета нашел макрос, который очень мне подходит. ВПР Макросом. Побывал подогнать его совсем под свои нужды. Например, искать параметры из другого столбца, в других массивах. Пробу пера начал с текущего макроса, что бы понять этапы. На текущем примере добавил на "Sheet 2" новый столбец "ЕЩЕ", внес данные. И хотел переписать макрос, что бы еще и искал значение в этом столбце. Т.к. с макросами на ВЫ, соответственно ни чего не получилось. Вы сможете мне помочь? Объяснить, на примере этого макроса логику поиска? Есть ли она вообще? Если брать формулу, все понятно, (что ищем; в какой таблице; в каком столбце;0) Возможна примерна такая же привязка? Заранее благодарю.
Добрый день! на просторах интернета нашел макрос, который очень мне подходит. ВПР Макросом. Побывал подогнать его совсем под свои нужды. Например, искать параметры из другого столбца, в других массивах. Пробу пера начал с текущего макроса, что бы понять этапы. На текущем примере добавил на "Sheet 2" новый столбец "ЕЩЕ", внес данные. И хотел переписать макрос, что бы еще и искал значение в этом столбце. Т.к. с макросами на ВЫ, соответственно ни чего не получилось. Вы сможете мне помочь? Объяснить, на примере этого макроса логику поиска? Есть ли она вообще? Если брать формулу, все понятно, (что ищем; в какой таблице; в каком столбце;0) Возможна примерна такая же привязка? Заранее благодарю.Re:Я
_Boroda_ Благодарю Вас. Работает. Счастье есть.... Все перебирал, ставил d3. Вот этот блок очень плохо понял. С помощью переводчика все понятия переводил))) Вы не могли бы мне разъезживать суть этого. [vba]
Код
.[B3].Resize(UBound(c), 3) = c
[/vba] (извините, наверное нарушил правила вставки, но не знаю как правильно.) Что такое [ ]? B3 -это куда вставлять наверное. Bound "Связанный наверное массив" почему с и почему = с [moder]В Правилах есть синяя ссылка на объяснялку пользования тегами. Для макросов - кнопка #. Поправил на первый раз[/moder]
_Boroda_ Благодарю Вас. Работает. Счастье есть.... Все перебирал, ставил d3. Вот этот блок очень плохо понял. С помощью переводчика все понятия переводил))) Вы не могли бы мне разъезживать суть этого. [vba]
Код
.[B3].Resize(UBound(c), 3) = c
[/vba] (извините, наверное нарушил правила вставки, но не знаю как правильно.) Что такое [ ]? B3 -это куда вставлять наверное. Bound "Связанный наверное массив" почему с и почему = с [moder]В Правилах есть синяя ссылка на объяснялку пользования тегами. Для макросов - кнопка #. Поправил на первый раз[/moder]Re:Я
Сообщение отредактировал _Boroda_ - Пятница, 03.06.2016, 11:22
[/vba] 1) .(точка) - подразумевает, что выше есть по крайней мере один With ххххх. ".Что-то" - это короткая запись "ххххх.Что-то" 2) .[B3] - равносильно хххх.Range("B3") 3) ааа.Resize(h,w) - растяжение от ааа на h вниз и на w вправо 4) [vba]
Код
UBound(c)
[/vba] - последний индекс массива с. Равен количеству элементов массива с 5) все вместе - В листе, который в With, в ячейки, начиная с ячейки В3 на количество элементов массива "с" вниз и на 3 вправо вставить то, что у нас находится в массиве "с"
[vba]
Код
.[B3].Resize(UBound(c), 3) = c
[/vba] 1) .(точка) - подразумевает, что выше есть по крайней мере один With ххххх. ".Что-то" - это короткая запись "ххххх.Что-то" 2) .[B3] - равносильно хххх.Range("B3") 3) ааа.Resize(h,w) - растяжение от ааа на h вниз и на w вправо 4) [vba]
Код
UBound(c)
[/vba] - последний индекс массива с. Равен количеству элементов массива с 5) все вместе - В листе, который в With, в ячейки, начиная с ячейки В3 на количество элементов массива "с" вниз и на 3 вправо вставить то, что у нас находится в массиве "с"_Boroda_
Добрый день. Начинаю данный макрос подстраивать под свои конкретные цели. Но не выходит. Выдает ошибку 424 и выделяет желтым цветом строку где я указываю столбец в котором мне надо искать значение. Ищу я данные которые у меня находяться в 38-м столюце. Что не так делаю? Благодарю!
[vba]
Код
Sub Макрос2 () Dim a, b, c, d, iLastrow As Long, i As Long, ii As Long
With Sheet1 [color=#FFFF00]iLastrow = .Cells(Rows.Count, 38).End(xlUp).Row[/color] a = Range(.[al2], .Range("AL" & iLastrow)).Value End With
With Sheet2 iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row b = Range(.[b2], .Range("B" & iLastrow)).Value End With
ReDim c(1 To UBound(a), 1 To 3)
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(b) .Item(b(i, 1)) = i Next
For i = 1 To UBound(a) If .exists(a(i, 1)) Then c(i, 1) = b(.Item(a(i, 1)), 2) c(i, 2) = b(.Item(a(i, 1)), 3) c(i, 3) = b(.Item(a(i, 1)), 4) End If Next End With
With Sheet1 .[AO3].Resize(UBound(c), 3) = c .Activate End With
End Sub
[/vba]
Добрый день. Начинаю данный макрос подстраивать под свои конкретные цели. Но не выходит. Выдает ошибку 424 и выделяет желтым цветом строку где я указываю столбец в котором мне надо искать значение. Ищу я данные которые у меня находяться в 38-м столюце. Что не так делаю? Благодарю!
[vba]
Код
Sub Макрос2 () Dim a, b, c, d, iLastrow As Long, i As Long, ii As Long
With Sheet1 [color=#FFFF00]iLastrow = .Cells(Rows.Count, 38).End(xlUp).Row[/color] a = Range(.[al2], .Range("AL" & iLastrow)).Value End With
With Sheet2 iLastrow = .Cells(Rows.Count, 2).End(xlUp).Row b = Range(.[b2], .Range("B" & iLastrow)).Value End With
ReDim c(1 To UBound(a), 1 To 3)
With CreateObject("Scripting.Dictionary")
For i = 1 To UBound(b) .Item(b(i, 1)) = i Next
For i = 1 To UBound(a) If .exists(a(i, 1)) Then c(i, 1) = b(.Item(a(i, 1)), 2) c(i, 2) = b(.Item(a(i, 1)), 3) c(i, 3) = b(.Item(a(i, 1)), 4) End If Next End With
With Sheet1 .[AO3].Resize(UBound(c), 3) = c .Activate End With
Да существует. Файл не могу прикрепить. Не соответствует Правилам. Поле архивирования весит 138, а а не 100 [moder]Ну так откусите от него кусок[/moder]
Да существует. Файл не могу прикрепить. Не соответствует Правилам. Поле архивирования весит 138, а а не 100 [moder]Ну так откусите от него кусок[/moder]Re:Я
Сообщение отредактировал _Boroda_ - Среда, 15.06.2016, 11:11
УФ.... И в мыслях обмана не было, что Вы.... Ведь, как писал, все ищу в нете, стараюсь под себя сделать. Где логика не работает, начинаю все выспрашивать. Даже ни разу не имея стеснения. Учится и постигать новое, ни когда не стыдно. (имхо). Особенно такому как я "...кудесник, любимец ба’гов..." в данном вопросе ))) Благодарю. Доработал по остальным столбцам. Работает.... Пошел дальше ба’гить....))) уж очень понравилось выражение....
УФ.... И в мыслях обмана не было, что Вы.... Ведь, как писал, все ищу в нете, стараюсь под себя сделать. Где логика не работает, начинаю все выспрашивать. Даже ни разу не имея стеснения. Учится и постигать новое, ни когда не стыдно. (имхо). Особенно такому как я "...кудесник, любимец ба’гов..." в данном вопросе ))) Благодарю. Доработал по остальным столбцам. Работает.... Пошел дальше ба’гить....))) уж очень понравилось выражение....Re:Я
For i = 1 To UBound(a) If .exists(a(i, 1)) Then c(i, 1) = b(.Item(a(i, 1)), 2) c(i, 2) = b(.Item(a(i, 1)), 3) c(i, 3) = b(.Item(a(i, 1)), 4)
Спасибо большое Александру, за хороший пример, что выложил, но как быть если данные в таблице стоят левее аргумента?..У меня в базовой таблице аргумент стоит в 89-м столбце, а все данные там левее. По коду, предоставленным Александром, находит аргумент и даже подтягивает данные, но все что правее. И я так понимаю, что у меня ошибка кроется именно в этом фрагменте. Пробовал ставить Минус типа :c(i, 1) = b(.Item(a(i, 1)), -2), но ругается...Как быть? Подскажите пожалуйста
For i = 1 To UBound(a) If .exists(a(i, 1)) Then c(i, 1) = b(.Item(a(i, 1)), 2) c(i, 2) = b(.Item(a(i, 1)), 3) c(i, 3) = b(.Item(a(i, 1)), 4)
Спасибо большое Александру, за хороший пример, что выложил, но как быть если данные в таблице стоят левее аргумента?..У меня в базовой таблице аргумент стоит в 89-м столбце, а все данные там левее. По коду, предоставленным Александром, находит аргумент и даже подтягивает данные, но все что правее. И я так понимаю, что у меня ошибка кроется именно в этом фрагменте. Пробовал ставить Минус типа :c(i, 1) = b(.Item(a(i, 1)), -2), но ругается...Как быть? Подскажите пожалуйстаalex808