Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 28.08.2017, 18:30   #11
strannick
Форумчанин
 
Регистрация: 20.10.2011
Сообщений: 433
По умолчанию

Срабатывает только в том случае, когда в массиве, из которого формируется словарь, нет повторяющихся данных (но это пол беды, таких по идее и не должно быть), но и когда в этом массиве нет пустых ячеек. А вот это точно будет.
strannick вне форума Ответить с цитированием
Старый 28.08.2017, 21:12   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,114
По умолчанию

Да ладно
Как напишите - так и будет срабатывать. Можно написать так, что срабатываь будет всегда. А можно и наоборот... или так, как описали
Вообще результат работы макроса сохранения в словаре индекса массива ничем не отличается от макроса с сохранением в словаре значения массива, как было у Вас
Ну т.е. ключ+значение = ключ+индекс_массива_с_значениями по которому всегда можно взять это значение.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 28.08.2017 в 21:49.
Hugo121 вне форума Ответить с цитированием
Старый 30.08.2017, 09:14   #13
RAN.
Форумчанин
 
Аватар для RAN.
 
Регистрация: 05.07.2011
Сообщений: 208
По умолчанию

Код:
Option Explicit
    Dim oDict As Object

Sub qq()
    Dim sh2 As Worksheet
    Dim ar
    Dim i&, j&
    Dim y
    
    If oDict Is Nothing Then
        Set oDict = CreateObject("scripting.dictionary")
        Set sh2 = Sheets("Товары")
        With sh2.Cells(1, 1).CurrentRegion
            With .Offset(, 1).Resize(, .Columns.Count - 1)
                ar = .Value
                For i = 1 To UBound(ar)
                    For j = 1 To UBound(ar, 2)
                        If oDict.exists(ar(i, j)) Then
                            oDict.Item(ar(i, j)) = oDict.Item(ar(i, j)) & "|" & i
                        Else
                            If Len(ar(i, j)) Then oDict.Item(ar(i, j)) = i
                        End If
                    Next
                Next
            End With
        End With
    End If
    y = 44
    If oDict.exists(y) Then
        MsgBox "Искомое содержится в строках " & Join(Split(oDict.Item(y), "|"), ", ")
    End If
End Sub
RAN. вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выводить только измененные строки. Перед каждой строкой записывать номер строки в исходном тексте.используя строки и текст.файл nero4ka C++ Builder 1 13.06.2015 07:14
Выводить только измененные строки. Перед каждой строкой записывать номер строки в исходном тексте nero4ka Помощь студентам 1 11.06.2015 11:08
Ввести число N. Вывести N строк с номером строки, двоеточием и набором чисел от 1 до N+1-k (где k-номер строки) ( в С ) Eduard12345 Помощь студентам 1 11.10.2013 06:25
Вытащить номер из X-Lite Letnab Работа с сетью в Delphi 7 03.05.2012 11:20
Как вывести на экран номер строки с максимальной суммой элементов и номер столбца с минимальной суммой? Vetal888888 C# (си шарп) 4 20.12.2011 12:46


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840