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

Вход

Регистрация

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

 

= Мир MS Excel/dictionary массив в значениях - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » dictionary массив в значениях (Макросы/Sub)
dictionary массив в значениях
fairylive Дата: Понедельник, 21.03.2016, 13:35 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Подскажите как в items в dictionary занести несколько ячеек.
Есть массив (таблица) который хочу запихнуть в dictionary. Ключами будет просто нумерованный список. А в значениях хотелось бы видеть ещё порядка 10 ячеек (то есть вся строка со значениями из 10 столбцов).
Как я понял в словарях одному ключу может соответствовать только одно значение. Это значение может быть массивом?
Вижу пока такое решение - в Item добавлять значения через какой-нибудь разделитель (например |) тогда получится такой словарь
Ключ1 =1; Значение1 =(Ячейка1 + | + ячейка2 + | + и так далее)
Затем при вставке значений на лист вытащить ячейки между разделителями.
Но в таком случае уже наверно не получится оперировать с ячейками. Например некоторые надо будет объединить (сложить).
 
Ответить
СообщениеПодскажите как в items в dictionary занести несколько ячеек.
Есть массив (таблица) который хочу запихнуть в dictionary. Ключами будет просто нумерованный список. А в значениях хотелось бы видеть ещё порядка 10 ячеек (то есть вся строка со значениями из 10 столбцов).
Как я понял в словарях одному ключу может соответствовать только одно значение. Это значение может быть массивом?
Вижу пока такое решение - в Item добавлять значения через какой-нибудь разделитель (например |) тогда получится такой словарь
Ключ1 =1; Значение1 =(Ячейка1 + | + ячейка2 + | + и так далее)
Затем при вставке значений на лист вытащить ячейки между разделителями.
Но в таком случае уже наверно не получится оперировать с ячейками. Например некоторые надо будет объединить (сложить).

Автор - fairylive
Дата добавления - 21.03.2016 в 13:35
Michael_S Дата: Понедельник, 21.03.2016, 13:39 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1772
Репутация: 337 ±
Замечаний: 0% ±

Excel2016
в итем может быть что угодно - число, текст, массив, другой словарь, коллекция, и т.д.


ЯД: 41001136675053
WM: R389613894253
 
Ответить
Сообщениев итем может быть что угодно - число, текст, массив, другой словарь, коллекция, и т.д.

Автор - Michael_S
Дата добавления - 21.03.2016 в 13:39
fairylive Дата: Понедельник, 21.03.2016, 14:12 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
в итем может быть что угодно - число, текст, массив, другой словарь, коллекция, и т.д.

В описании к dictionary я это читал. Но в примерах как это реализуется не видел и пока не нашёл.
 
Ответить
Сообщение
в итем может быть что угодно - число, текст, массив, другой словарь, коллекция, и т.д.

В описании к dictionary я это читал. Но в примерах как это реализуется не видел и пока не нашёл.

Автор - fairylive
Дата добавления - 21.03.2016 в 14:12
Hugo Дата: Понедельник, 21.03.2016, 14:18 | Сообщение № 4
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2671
Репутация: 599 ±
Замечаний: 0% ±

Пока нет примера непонятно что именно нужно поместить в словарь - ячейки (диапазон), значения как строку, массив значений, а может другой словарь с ключами из этих значений, раз уж там ещё что-то придётся суммировать. Потому и какой пример показывать - непонятно.
Но вот например три, все варианты, может пригодятся:
[vba]
Код

массив в словаре
Option Explicit

Sub Otbor()
    Dim a(), oDict As Object, i As Long, temp As String, kk
    
    With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    
    a = [a1].CurrentRegion.Value

    Set oDict = CreateObject("Scripting.Dictionary")
    oDict.CompareMode = vbTextCompare
    
    For i = 1 To UBound(a)

        temp = Application.Trim(a(i, 1))
        If Not oDict.Exists(temp) Then
            ReDim b(1 To UBound(a) + 1, 1 To 1)
            b(1, 1) = a(i, 1): b(2, 1) = a(i, 2)
            b(UBound(b), 1) = 3
            oDict.Add temp, b
        Else
            b = oDict.Item(temp)
            b(b(UBound(b), 1), 1) = a(i, 2): b(UBound(b), 1) = b(UBound(b), 1) + 1
            oDict.Item(temp) = b
        End If
    Next

    
    With Workbooks.Add.Sheets(1)
        i = 0
        For Each kk In oDict.keys
        i = i + 1
        b = oDict.Item(kk)
        Cells(1, i).Resize(b(UBound(b), 1)) = b
        Next
        .Cells.EntireColumn.AutoFit
    End With
    

    .DisplayAlerts = True
    .ScreenUpdating = True
    End With
End Sub

Sub PereborFailov() 'коллекция в словаре
    Dim a, i&, t$, Dic As Object
    Dim el, col
    
    a = Range("C3", Cells(Rows.Count, "A").End(xlUp)).Value
    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        .CompareMode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, New Collection
            .Item(t).Add a(i, 2) & "|" & a(i, 3) & "|" & i
        Next
    End With
    
    For Each el In Dic.keys
        Debug.Print "Открываем файл " & el
        For Each col In Dic.Item(el)
            Debug.Print "Ищем данные " & col
        Next
        Debug.Print "Закрываем файл " & el
    Next

End Sub

Sub PereborFailov2() ' словарь в словаре
    Dim a, i&, t$, Dic As Object, Dic2 As Object
    Dim el, col
    
    a = Range("C3", Cells(Rows.Count, "A").End(xlUp)).Value
    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        .CompareMode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary")
            .Item(t).Item(a(i, 2) & "|" & a(i, 3) & "|" & i) = 0&
            
        Next
    End With
    
    For Each el In Dic.keys
        Debug.Print "Открываем файл " & el
        Set Dic2 = Dic.Item(el)
        For Each col In Dic2.keys
            Debug.Print "Ищем данные " & col '& "|" & Dic2.Item(col)
        Next
        Debug.Print "Закрываем файл " & el
    Next

End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069


Сообщение отредактировал Hugo - Понедельник, 21.03.2016, 14:29
 
Ответить
СообщениеПока нет примера непонятно что именно нужно поместить в словарь - ячейки (диапазон), значения как строку, массив значений, а может другой словарь с ключами из этих значений, раз уж там ещё что-то придётся суммировать. Потому и какой пример показывать - непонятно.
Но вот например три, все варианты, может пригодятся:
[vba]
Код

массив в словаре
Option Explicit

Sub Otbor()
    Dim a(), oDict As Object, i As Long, temp As String, kk
    
    With Application
    .DisplayAlerts = False
    .ScreenUpdating = False
    
    a = [a1].CurrentRegion.Value

    Set oDict = CreateObject("Scripting.Dictionary")
    oDict.CompareMode = vbTextCompare
    
    For i = 1 To UBound(a)

        temp = Application.Trim(a(i, 1))
        If Not oDict.Exists(temp) Then
            ReDim b(1 To UBound(a) + 1, 1 To 1)
            b(1, 1) = a(i, 1): b(2, 1) = a(i, 2)
            b(UBound(b), 1) = 3
            oDict.Add temp, b
        Else
            b = oDict.Item(temp)
            b(b(UBound(b), 1), 1) = a(i, 2): b(UBound(b), 1) = b(UBound(b), 1) + 1
            oDict.Item(temp) = b
        End If
    Next

    
    With Workbooks.Add.Sheets(1)
        i = 0
        For Each kk In oDict.keys
        i = i + 1
        b = oDict.Item(kk)
        Cells(1, i).Resize(b(UBound(b), 1)) = b
        Next
        .Cells.EntireColumn.AutoFit
    End With
    

    .DisplayAlerts = True
    .ScreenUpdating = True
    End With
End Sub

Sub PereborFailov() 'коллекция в словаре
    Dim a, i&, t$, Dic As Object
    Dim el, col
    
    a = Range("C3", Cells(Rows.Count, "A").End(xlUp)).Value
    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        .CompareMode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, New Collection
            .Item(t).Add a(i, 2) & "|" & a(i, 3) & "|" & i
        Next
    End With
    
    For Each el In Dic.keys
        Debug.Print "Открываем файл " & el
        For Each col In Dic.Item(el)
            Debug.Print "Ищем данные " & col
        Next
        Debug.Print "Закрываем файл " & el
    Next

End Sub

Sub PereborFailov2() ' словарь в словаре
    Dim a, i&, t$, Dic As Object, Dic2 As Object
    Dim el, col
    
    a = Range("C3", Cells(Rows.Count, "A").End(xlUp)).Value
    Set Dic = CreateObject("Scripting.Dictionary")
    With Dic
        .CompareMode = 1
        For i = 1 To UBound(a)
            t = a(i, 1)
            If Not .exists(t) Then .Add t, CreateObject("Scripting.Dictionary")
            .Item(t).Item(a(i, 2) & "|" & a(i, 3) & "|" & i) = 0&
            
        Next
    End With
    
    For Each el In Dic.keys
        Debug.Print "Открываем файл " & el
        Set Dic2 = Dic.Item(el)
        For Each col In Dic2.keys
            Debug.Print "Ищем данные " & col '& "|" & Dic2.Item(col)
        Next
        Debug.Print "Закрываем файл " & el
    Next

End Sub
[/vba]

Автор - Hugo
Дата добавления - 21.03.2016 в 14:18
fairylive Дата: Понедельник, 21.03.2016, 14:38 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Hugo, здесь на форуме создавал тему
Так вот задача та же только кроме деталей и их количества есть ещё один столбец - длина деталей и суммировать количество деталей надо не только если одинаковое название детали но И если одинаковая длина. Кроме это в моей реальной задаче есть и другие столбцы - артикул, ед.изм, примечание (без них можно конечно и обойтись - добавить уже в итоговую таблицу в конце) которые тоже хотелось бы переносить в конце в итоговую таблицу. Сейчас там решение такое - имена деталей запихиваются в ключ словаря, а количество деталей в значения. С количествами идёт манипулирование - сложение и перемножение. И вот как выяснилось появляется ещё одна переменная - длина.
 
Ответить
СообщениеHugo, здесь на форуме создавал тему
Так вот задача та же только кроме деталей и их количества есть ещё один столбец - длина деталей и суммировать количество деталей надо не только если одинаковое название детали но И если одинаковая длина. Кроме это в моей реальной задаче есть и другие столбцы - артикул, ед.изм, примечание (без них можно конечно и обойтись - добавить уже в итоговую таблицу в конце) которые тоже хотелось бы переносить в конце в итоговую таблицу. Сейчас там решение такое - имена деталей запихиваются в ключ словаря, а количество деталей в значения. С количествами идёт манипулирование - сложение и перемножение. И вот как выяснилось появляется ещё одна переменная - длина.

Автор - fairylive
Дата добавления - 21.03.2016 в 14:38
Hugo Дата: Понедельник, 21.03.2016, 14:57 | Сообщение № 6
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2671
Репутация: 599 ±
Замечаний: 0% ±

Чем бегать по темам и вникать где там какой ещё может быть столбец - давайте к вопросу конкретный файл.


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
СообщениеЧем бегать по темам и вникать где там какой ещё может быть столбец - давайте к вопросу конкретный файл.

Автор - Hugo
Дата добавления - 21.03.2016 в 14:57
fairylive Дата: Понедельник, 21.03.2016, 15:31 | Сообщение № 7
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Вот файл. Он очень близок к тому что я делаю. Вот здесь нашёл про то что спрашивал в первом сообщении. Массив в значениях. Видимо я до этого что-то не так делал - в упор не получалось.
К сообщению приложен файл: 0660989.xlsm(39Kb)
 
Ответить
СообщениеВот файл. Он очень близок к тому что я делаю. Вот здесь нашёл про то что спрашивал в первом сообщении. Массив в значениях. Видимо я до этого что-то не так делал - в упор не получалось.

Автор - fairylive
Дата добавления - 21.03.2016 в 15:31
Hugo Дата: Понедельник, 21.03.2016, 21:59 | Сообщение № 8
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2671
Репутация: 599 ±
Замечаний: 0% ±

Нет сейчас желания делать, но думаю чтоб особо не напрягаться - можно просто создать ещё один аналогичный словарь, где вместо количества собирать длину.
Т.е. делаем всё так же, только из другого столбца берём данные, ну а в финале выгружаем рядом.
P.S. Хотя нашёл в файле код, чуть дописал и чуть сократил:
[vba]
Код
Sub ttt()
    Dim ws As Worksheet
    'Создае объект - словарь
    Dim Zakaz As Object: Set Zakaz = CreateObject("Scripting.Dictionary")
    Dim Zakaz2 As Object: Set Zakaz2 = CreateObject("Scripting.Dictionary")
    Dim arr(), arr1(), I As Long, J As Long

    'Вычисляем последнюю заполенную строку на листе и создаем 2-х мерный массив из диапазона с названием изделий и их количеством
    With Sheets("ЗАКАЗ")
        arr1 = .Range("B3:C" & .Cells(.Rows.Count, 2).End(xlUp).Row).Value
    End With
    'Перебераем все листы в рабочей книге
    For Each ws In Worksheets
        With ws
            For J = 1 To UBound(arr1)
                'Перебираем все названия изделий, взятые с листа ЗАКАЗ, проверяем на равенство названию листа
                If .Name = arr1(J, 1) Then
                    'Создаем 2-х мерный массив из названий деталей и их количества в изделии
                    arr = .Range("A2:C" & .Cells(.Rows.Count, 2).End(xlUp).Row).Value
                    'Перебираем название деталей, если они уже есть, прибавляем количество деталей, умноженное на количество изделий
                    For I = 1 To UBound(arr)
                        If arr(I, 1) <> "" Then
                            If Zakaz.exists(arr(I, 1)) Then
                    Zakaz.Item(arr(I, 1)) = Zakaz.Item(arr(I, 1)) + (arr(I, 2) * arr1(J, 2))
                    Zakaz2.Item(arr(I, 1)) = Zakaz.Item(arr(I, 1)) + (arr(I, 3) * arr1(J, 2))
                            Else
                    'Если их нет, создаем новый элемент в словаре, равный количеству деталей в изделии, _
                    умноженному на количество изделий
                    Zakaz.Add Key:=arr(I, 1), Item:=arr(I, 2) * arr1(J, 2)
                    Zakaz2.Add Key:=arr(I, 1), Item:=arr(I, 3) * arr1(J, 2)
                            End If
                        End If
                    Next
                End If
            Next
        End With
    Next
    'Очищаем и заполняем соответствующй диапазон на листе Изготовление
    With Sheets("Изготовление")
        .Range("A3:C" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
        .Cells(3, 1).Resize(Zakaz.Count, 3) = WorksheetFunction.Transpose(Array(Zakaz.keys, Zakaz.items, Zakaz2.items))
    End With
    'На всякий случай очищае переменные
    Erase arr: Erase arr1: Set Zakaz = Nothing
End Sub
[/vba]


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069


Сообщение отредактировал Hugo - Понедельник, 21.03.2016, 22:10
 
Ответить
СообщениеНет сейчас желания делать, но думаю чтоб особо не напрягаться - можно просто создать ещё один аналогичный словарь, где вместо количества собирать длину.
Т.е. делаем всё так же, только из другого столбца берём данные, ну а в финале выгружаем рядом.
P.S. Хотя нашёл в файле код, чуть дописал и чуть сократил:
[vba]
Код
Sub ttt()
    Dim ws As Worksheet
    'Создае объект - словарь
    Dim Zakaz As Object: Set Zakaz = CreateObject("Scripting.Dictionary")
    Dim Zakaz2 As Object: Set Zakaz2 = CreateObject("Scripting.Dictionary")
    Dim arr(), arr1(), I As Long, J As Long

    'Вычисляем последнюю заполенную строку на листе и создаем 2-х мерный массив из диапазона с названием изделий и их количеством
    With Sheets("ЗАКАЗ")
        arr1 = .Range("B3:C" & .Cells(.Rows.Count, 2).End(xlUp).Row).Value
    End With
    'Перебераем все листы в рабочей книге
    For Each ws In Worksheets
        With ws
            For J = 1 To UBound(arr1)
                'Перебираем все названия изделий, взятые с листа ЗАКАЗ, проверяем на равенство названию листа
                If .Name = arr1(J, 1) Then
                    'Создаем 2-х мерный массив из названий деталей и их количества в изделии
                    arr = .Range("A2:C" & .Cells(.Rows.Count, 2).End(xlUp).Row).Value
                    'Перебираем название деталей, если они уже есть, прибавляем количество деталей, умноженное на количество изделий
                    For I = 1 To UBound(arr)
                        If arr(I, 1) <> "" Then
                            If Zakaz.exists(arr(I, 1)) Then
                    Zakaz.Item(arr(I, 1)) = Zakaz.Item(arr(I, 1)) + (arr(I, 2) * arr1(J, 2))
                    Zakaz2.Item(arr(I, 1)) = Zakaz.Item(arr(I, 1)) + (arr(I, 3) * arr1(J, 2))
                            Else
                    'Если их нет, создаем новый элемент в словаре, равный количеству деталей в изделии, _
                    умноженному на количество изделий
                    Zakaz.Add Key:=arr(I, 1), Item:=arr(I, 2) * arr1(J, 2)
                    Zakaz2.Add Key:=arr(I, 1), Item:=arr(I, 3) * arr1(J, 2)
                            End If
                        End If
                    Next
                End If
            Next
        End With
    Next
    'Очищаем и заполняем соответствующй диапазон на листе Изготовление
    With Sheets("Изготовление")
        .Range("A3:C" & .Cells(.Rows.Count, 1).End(xlUp).Row).ClearContents
        .Cells(3, 1).Resize(Zakaz.Count, 3) = WorksheetFunction.Transpose(Array(Zakaz.keys, Zakaz.items, Zakaz2.items))
    End With
    'На всякий случай очищае переменные
    Erase arr: Erase arr1: Set Zakaz = Nothing
End Sub
[/vba]

Автор - Hugo
Дата добавления - 21.03.2016 в 21:59
fairylive Дата: Понедельник, 21.03.2016, 23:33 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
Hugo,
Спасибо! Там только длина не должна умножаться на кол-во. Немного поправил строчки

[vba]
Код
Zakaz2.Item(arr(I, 3)) = Zakaz.Item(arr(I, 3))
[/vba]
[vba]
Код
Zakaz2.Add Key:=arr(I, 1), Item:=arr(I, 3)
[/vba]

Сам думал над этим - чтобы второй словарь сделать, но боялся что словари будут не совпадать. Сейчас проверил - всё работает. То что надо. И гораздо проще чем через разделители или целый массив в значениях (с которым у меня так ничего и не получилось).

PS Пока только учусь поэтому много чего не понимаю. Например конструкции вида вообще для меня не очевидны [vba]
Код
arr = .Range("A2:C" & .Cells(.Rows.Count, 2).End(xlUp).Row).Value
[/vba] Вы не могли пояснить что тут для чего?
 
Ответить
СообщениеHugo,
Спасибо! Там только длина не должна умножаться на кол-во. Немного поправил строчки

[vba]
Код
Zakaz2.Item(arr(I, 3)) = Zakaz.Item(arr(I, 3))
[/vba]
[vba]
Код
Zakaz2.Add Key:=arr(I, 1), Item:=arr(I, 3)
[/vba]

Сам думал над этим - чтобы второй словарь сделать, но боялся что словари будут не совпадать. Сейчас проверил - всё работает. То что надо. И гораздо проще чем через разделители или целый массив в значениях (с которым у меня так ничего и не получилось).

PS Пока только учусь поэтому много чего не понимаю. Например конструкции вида вообще для меня не очевидны [vba]
Код
arr = .Range("A2:C" & .Cells(.Rows.Count, 2).End(xlUp).Row).Value
[/vba] Вы не могли пояснить что тут для чего?

Автор - fairylive
Дата добавления - 21.03.2016 в 23:33
Hugo Дата: Понедельник, 21.03.2016, 23:40 | Сообщение № 10
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2671
Репутация: 599 ±
Замечаний: 0% ±

что тут для чего?
- часть после & до последней скобки даёт номер последней занятой строки, т.е. первой занятой с низу.
В итоге получаем например если это число 123:
[vba]
Код
arr = .Range("A2:C123").Value
[/vba]
что уже вполне ведь понятно?
По словарям - вообще порядок ключей в словаре не регламентирован, поэтому надёжнее (но дольше и больше кода) делать так - сперва выгружаем ключи одного массива, затем идём по ним циклом и рядом выгружаем соответствующие этому конкретному ключу item'ы из обоих словарей. По одному. Но можно делать через массив - размеры ведь все известны, так будет не намного дольше.


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
Сообщение
что тут для чего?
- часть после & до последней скобки даёт номер последней занятой строки, т.е. первой занятой с низу.
В итоге получаем например если это число 123:
[vba]
Код
arr = .Range("A2:C123").Value
[/vba]
что уже вполне ведь понятно?
По словарям - вообще порядок ключей в словаре не регламентирован, поэтому надёжнее (но дольше и больше кода) делать так - сперва выгружаем ключи одного массива, затем идём по ним циклом и рядом выгружаем соответствующие этому конкретному ключу item'ы из обоих словарей. По одному. Но можно делать через массив - размеры ведь все известны, так будет не намного дольше.

Автор - Hugo
Дата добавления - 21.03.2016 в 23:40
fairylive Дата: Вторник, 22.03.2016, 00:19 | Сообщение № 11
Группа: Пользователи
Ранг: Участник
Сообщений: 93
Репутация: 3 ±
Замечаний: 0% ±

Excel 2016
что уже вполне ведь понятно?

Я саму конструкцию не очень понимаю. Как её прочитать по русски? Почему там именно цифра 2? Везде используются эти примеры, но я пока не буду понимать каждую точку перед каждым словом, скобочки все эти, вряд ли смогу построить нечто подобное сам. Придется слепо копировать. Так обучение не очень продвигается)

А на счёт надёжности. Я вот из этих соображений первоначально и хотел запихать массив (диапазон ячеек) в item. Тогда для одного ключа(детали) значением был бы массив и с количество и с длиной и с прочими ячейками. Тут правда с перемножением мне не очевидно становится уже. Но я так и не понял как прописать массив в Item.
 
Ответить
Сообщение
что уже вполне ведь понятно?

Я саму конструкцию не очень понимаю. Как её прочитать по русски? Почему там именно цифра 2? Везде используются эти примеры, но я пока не буду понимать каждую точку перед каждым словом, скобочки все эти, вряд ли смогу построить нечто подобное сам. Придется слепо копировать. Так обучение не очень продвигается)

А на счёт надёжности. Я вот из этих соображений первоначально и хотел запихать массив (диапазон ячеек) в item. Тогда для одного ключа(детали) значением был бы массив и с количество и с длиной и с прочими ячейками. Тут правда с перемножением мне не очевидно становится уже. Но я так и не понял как прописать массив в Item.

Автор - fairylive
Дата добавления - 22.03.2016 в 00:19
RAN Дата: Вторник, 22.03.2016, 00:38 | Сообщение № 12
Группа: Друзья
Ранг: Участник клуба
Сообщений: 4421
Репутация: 876 ±
Замечаний: 0% ±

2010
Почему там именно цифра 2?

Поглядите справку по Cells.
как прописать массив в Item.

[vba]
Код
Zakaz2.Item(arr(I, 3)) = ar
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Почему там именно цифра 2?

Поглядите справку по Cells.
как прописать массив в Item.

[vba]
Код
Zakaz2.Item(arr(I, 3)) = ar
[/vba]

Автор - RAN
Дата добавления - 22.03.2016 в 00:38
Hugo Дата: Вторник, 22.03.2016, 00:55 | Сообщение № 13
Группа: Друзья
Ранг: Участник клуба
Сообщений: 2671
Репутация: 599 ±
Замечаний: 0% ±

С массивом в Item будет гемор когда понадобится его менять - нужно извлекать его во временный массив, менять, класть назад. Куча кода, отслеживать каждую букву... Я ведь там выше дал пример.
На два значения проще сделать два словаря с одинаковыми ключами - код простой.


excel@nxt.ru
webmoney: E265281470651 R418926282008 Z422237915069
 
Ответить
СообщениеС массивом в Item будет гемор когда понадобится его менять - нужно извлекать его во временный массив, менять, класть назад. Куча кода, отслеживать каждую букву... Я ведь там выше дал пример.
На два значения проще сделать два словаря с одинаковыми ключами - код простой.

Автор - Hugo
Дата добавления - 22.03.2016 в 00:55
Wasilich Дата: Вторник, 22.03.2016, 01:38 | Сообщение № 14
Группа: Друзья
Ранг: Старожил
Сообщений: 1195
Репутация: 316 ±
Замечаний: 0% ±

2003
Вот файл. Он очень близок к тому что я делаю.
Посмотрел я на файл и подумал, а если все таблицы вложить в один лист. Не проще ли будет.
Это я так подумал, не вникая в выше написанное. :D
К сообщению приложен файл: fairylive.xls(44Kb)
 
Ответить
Сообщение
Вот файл. Он очень близок к тому что я делаю.
Посмотрел я на файл и подумал, а если все таблицы вложить в один лист. Не проще ли будет.
Это я так подумал, не вникая в выше написанное. :D

Автор - Wasilich
Дата добавления - 22.03.2016 в 01:38
Мир MS Excel » Вопросы и решения » Вопросы по VBA » dictionary массив в значениях (Макросы/Sub)
Страница 1 из 11
Поиск:

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