Страницы: 1
RSS
Создать словарь через Split, VBA
 
Здравствуйте.
Пытаюсь вытащить kod из текстовой строки, через Split, создав при этом словарь.
Подскажите пожалуйста, где моя ошибка?

Спасибо.
Изменено: Владимир - 27.11.2015 09:08:07
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Код
=ПСТР(B2;ПОИСК("Код: ";B2;1)+5;100)
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Код
[b2].CurrentRegion.Value

охватывает и ячейку A1
Учимся сами и помогаем другим...
 
isx = [b2].CurrentRegion.Value здесь у вас массив формируется не такой как вы хотели. F8 в vba в помощь
 
А зачем словарь?
Код
Sub kod()
    Dim kod, isx(), i%
    Range("a2:a300").ClearContents
    isx = [B2].Resize(WorksheetFunction.CountA([B2].EntireColumn), 1).Value
    
    For i = 1 To UBound(isx)
        [a2].Offset(i - 1) = Split(isx(i, 1), "Код: ")(1)
    Next
End Sub
Изменено: ber$erk - 27.11.2015 09:19:41
Учимся сами и помогаем другим...
 
Там не будет слова "Нужно.." - это лишь для примера.
Цитата
ber$erk написал: А зачем словарь?
Затем, что это маленькая часть другого проекта. Нужен именно словарь.  
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
словарь уберет дубли - это вам тоже нужно?
Код
Sub kod()
Dim kod, isx(), i%, sd As Object
Range("a2:a300").ClearContents
isx = Range([b2], [b2].End(xlDown)).Value

Set sd = CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(isx)
        kod = Split(isx(i, 1), "Код: ")(1)
        sd.Item(kod) = ""
    Next
[A2].Resize(sd.Count) = Application.Transpose(sd.Keys)

End Sub
 
Там нет дублей, видно ошибка при создании примера затесалась.
Ребята, всем большое спасибо.
V, Вам отдельное vip-спасибо.
:-)
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
А как быть если повторы всё-таки есть? Или в этом случае словарь уже не метод?
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, может коллекции?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
Я только учусь, не знаю что это. С удовольствием рассмотрю коллекции.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, может пригодится?
 
Иван, спасибо. У меня это есть.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
а зачем Вам в словаре хранить дубли?
 
У меня цель  - найти соответствие в другом файле.
Для продаж данный код подходит, а вот для заказов уже нет, т.к. там одна и та же позиция может быть заказана не раз.
Изменено: Владимир - 03.12.2015 16:38:11 (Перезалил)
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
можно составить составной ключ для словаря (например код&"_"&количество) и по нем проверять соответствие.
просто с примера не понятно, что Вы пытаетесь с чем сопоставить

Дошло, Вам просто нужно слева либо № либо код подставить? Так для этого словарь не нужен
Изменено: Ivan.kh - 03.12.2015 16:52:22
 
Код
With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr)
        temp = Split(arr(i, 1), "Код: ")(1)
        .Item(temp) = ""
    Next
[a2].Resize(.Count) = Application.Transpose(.keys)
Вывожу первый диапазон, который вытаскивает Сплитом из текстовой строки код.

arr2 = [a2].Resize(UBound(arr)).Value,  - это диапазон который получился после Сплита.
Код
Set TempZak = Workbooks.Open("F:\QQQ\Файл.XLS")
kod = Range("N3:P" & Cells(Rows.Count, 14).End(xlUp).Row).Value
TempZak.Close
Открываю другую книгу и делаю ссылку на диапазон Range("N3:P..") , т.к. именно в этом файле находится нужный мне код товара, который нужно переместить в исходный файл.
 
Код
    For i = 1 To UBound(kod)
            .Item(kod(i, 3)) = i
        Next
        ReDim c(1 To UBound(arr), 1 To 1)
        For i = 1 To UBound(arr)
            If .exists(arr2(i, 1)) Then
                ii = .Item(arr2(i, 1))
                c(i, 1) = kod(ii, 1)
            End If
        Next
End With
Columns(1).NumberFormat = "@"
[a2].Resize(UBound(arr)) = c()
Переместил благополучно. Но когда попробовал использовать этот метод с повторяющимися кодами, то потерпел фиаско.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
 
Владимир, ответил Вам в почту.
 
Иван, спасибо большое.
Очень красивый код.
"..Сладку ягоду рвали вместе, горьку ягоду я одна."
Страницы: 1
Наверх