Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Поиск как точных так и не точных совпадений
 
Здравствуйте ещё раз мастера. Снова нужна Ваша помощь с макросом. Вкратце... Есть макрос, при нажатии на кнопку на первом листе, на листе Прайс сравниваются значения, и значения из столбца М не найденные в столбце I выводятся на лист Нет в прайсе. Так вот, путаница с нулями впереди, если впереди в одном из столбцов стоит ноль или два а дальше значения одинаковы то значение попадает на лист Нет в Прайсе, что не совсем правильно. К примеру Лист "Прайс" значение ячейки I2 равно значению ячейки М3 за исключением лишнего нуля в I2. Как бы сделать так чтобы например скрипт не обращал внимание на первые нули, но убирать их нельзя. Спасибо заранее.
 
вариант с доп.столбцами (макрос без изменений)
Конь, просто конь.
Удивление есть начало познания © Surprise me!
И да пребудет с нами сила ВПР.
 
Спасибо работает но немного не так, вы сместили ячейки а можно их как нибудь оставить на месте и не плодить новые? спасибо.
 
Если всегда будете сравнивать числа - то можно так:
Код
Sub t()
    Dim a(), b(), d, i&
    On Error Resume Next
    With ThisWorkbook.Sheets("Прайс")
        a = Range(.[i2], .Cells(Rows.Count, 9).End(xlUp)).Value
        b = Range(.[m2], .Cells(Rows.Count, 13).End(xlUp)).Resize(, 2).Value
    End With
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To UBound(b): d(--b(i, 1)) = b(i, 2): Next
    For i = 1 To UBound(a)
        d.Remove --a(i, 1)
    Next
    With ThisWorkbook.Sheets("Нет в прайсе").[a2].Resize(d.Count, 2)
        .Columns(1).NumberFormat = "@"
        .Value = Application.Transpose(Array(d.keys, d.items))
    End With
End Sub
 
у меня почему-то показывает в 1-й колонке число в виде экпоненциала :( после выгрузки - причём в словаре это число в нормальном виде, да и в строке формул в нормальном виде... кроме перевода в строковую переменную на этапе формирования словаря-  др варианта нет?.. у меня нормально в ячейке отображает число только такой вариант:
Код
Set d = CreateObject("scripting.dictionary"): d.comparemode = 1
    For i = 1 To UBound(b): d(CStr(--b(i, 1))) = b(i, 2): Next
    For i = 1 To UBound(a)
        d.Remove CStr(--a(i, 1))
    Next

или xl 14-значные числа всегда показывает в экспоненциальной форме??
Изменено: JeyCi - 15 Мар 2015 08:32:00
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Цитата
JeyCi написал:
кроме перевода в строковую переменную на этапе формирования словаря-  др варианта нет?..
Код
.Columns(1).NumberFormat = "0"
 
Спасибо за помощь. Такой еще момент, я так понимаю что формат меняется когда идет перенос в "Нет в прайсе" и формат меняется на числовой при этом нули впереди пропадают по понятным причинам, вопрос а оригинал нельзя ни как оставить т.е. в оригинальном формате  с нулями впереди, а то опять идет путаница? Спасибо. И еще вопрос, в другом макросе та же беда, посмотрите пожалуйста как решить, спасибо.
 
Нет, в данной реализации оригинал нельзя оставить - для этого придётся писать весь код иначе.
Или например добавлять ещё один словарь, где хранить оригиналы, и откуда их извлекать.

P.S. Вот добавил словарь - работает. Но правда мелкомягкие не обещали синхронность словарей - луше бы перебором по ключам одного заполнить значениями созданный под уже известный размер массив, и выгружать его.
Код
Sub t()
    Dim a(), b(), c, d, i&
    On Error Resume Next
    With ThisWorkbook.Sheets("Прайс")
        a = Range(.[i2], .Cells(Rows.Count, 9).End(xlUp)).Value
        b = Range(.[m2], .Cells(Rows.Count, 13).End(xlUp)).Resize(, 2).Value
    End With
    Set c = CreateObject("scripting.dictionary")
    Set d = CreateObject("scripting.dictionary")
    For i = 1 To UBound(b): d(--b(i, 1)) = b(i, 2): c(--b(i, 1)) = b(i, 1): Next
    For i = 1 To UBound(a)
        d.Remove --a(i, 1)
        c.Remove --a(i, 1)
    Next
    With ThisWorkbook.Sheets("Нет в прайсе").[a2].Resize(d.Count, 2)
        .Columns(1).NumberFormat = "@"
        .Value = Application.Transpose(Array(c.items, d.items))
    End With
End Sub


P.S. Могли бы в примере удалить ненужные модули, ну или хоть сказали бы где (и есть ли вообще) там макрос. Я так и недокликался... :(
Изменено: Hugo - 15 Мар 2015 16:35:45
 
 Михаил С. спасибо! - переустанавливаю всё (сама не поняла, как зашла в i'net) - дойду до офиса - буду пробовать ваш вариант 8) ...
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
Ох я очень извиняюсь за свою невнимательность с модулями..( Я все удалил посмотрите пожалуйста если не сложно. А переработанный скрипт сейчас попробую, спасибо огромное!

Люди. Помогите пожалуйста очень нужно! Спасибо.
Изменено: msd - 16 Мар 2015 14:30:25
 
Цитата
Hugo написал: Могли бы в примере удалить ненужные модули, ну или хоть сказали бы где (и есть ли вообще) там макрос. Я так и недокликался...
Спасибо предыдущий скрипт работает на УРА! Я удалил все модули кроме одного и оставил один скрипт, если не сложно подскажите как сделать там. Заранее спасибо.  
Страницы: 1
Читают тему (гостей: 1)