Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/35: Рейтинг темы: голосов - 35, средняя оценка - 4.54
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134

Как создать массив массивов

19.12.2012, 17:07. Показов 7132. Ответов 53
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день. Очень нужна ваша помощь. Есть папка, в ней БОЛЬШЕ 80 книг, в каждой, КАК МИНИМУМ, одни лист
с таблицей. Все! таблицы имеют отношение к определенной главной теме. Во всей этой массе, только
2/3 таблиц содержат данные по интересующей меня в даный момент конкретной"подтеме". Названия книг
посторонняя программа формирует так, что не сразу понятно, что конкретно и в какой таблице.
Поэтому, открываю все и сразу. Ниже приведенным макросом перебираю книги и листы. Если нахожу что
нужно (определенная таблица содержит в названии определенную фразу) - "\"название книги; название листа
заганяю в фразу, "неинтересную" книгу закрываю. И т.д. Затем из фразы формирую массив
"книга (инд1)" - "лист книги(инд1) (инд2). Потом уже все просто -переганяю по дэлимитарам в массив, перелопачиваю/обрабатываю все в массивах и т.д и т.п.
ПРОБЛЕМА в "....заганяю в фразу...". Ну не получается как-то массив массивов (а может можно иначе?), хоть плачь!
Подтолкните, кто-нибудь и как-нибудь, ПОЖАЛУЙСТА!

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Sub BooksAndSheetsNamesInArray()
    Dim oldWB As Object, newSheet As Object
    Dim iWrbCount%
    Dim strGeneralBookName$, strPersonalBookName$
    Dim mStr$, newstr$
    
    iMyCounter = 0
    mStr = ""
    newstr = ""
    
    Set oldWB = ThisWorkbook
    iWrbCount = Application.Workbooks.Count '
    
    strGeneralBookName = oldWB.Name
    strPersonalBookName = "PERSONAL.XLS"
 
    For i = iWrbCount To 1 Step -1
        If Workbooks(i).Name <> strGeneralBookName And _
                Workbooks(i).Name <> strPersonalBookName Then
            Workbooks(i).Activate
            
                With ActiveWorkbook
                    iShCount = .Sheets.Count
                        For Each newSheet In .Sheets
                            With newSheet
                                If Not IsEmpty(.UsedRange) Then ' тут спасибо "Казанский"
                                    newSheet.Select
                                        If fun_PhraseSearch _
                                                ("bla-bla-bla", , , 25, , False) = True Then
                                            On Error Resume Next
                                            mStr = mStr & "\" & Workbooks(i).Name & _
                                                                                        ";" & newSheet.Name '
                                            newstr = mStr & "\" & Workbooks(i).Name & _
                                                                                        ";" & newSheet.Name ' _
                                                                                        if outside the line limit
                                            On Error GoTo 0
                                        End If
                                End If
                            End With
                        Next
                End With
        End If
    Next i
End Sub
Добавлено через 1 час 14 минут
Приношу извинения. Со строки 29 необходимо использовать
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
                                              If fun_PhraseSearch _
                                                ("bla-bla-bla", , , 25, , False) = True Then
                                            On Error Resume Next
                                            mStr = mStr & "\" & Workbooks(i).Name & _
                                                                                        ";" & newSheet.Name '
                                             If Err.Number <> 0 Then
                                                newstr = "\" & Workbooks(i).Name & _
                                                                                        ";" & newSheet.Name ' _
                                                                                        if outside the line limit
                                            End If
                                            On Error GoTo 0
                                                Else: Workbooks(i).Close
                                        End If
                                End If
                            End With
                        Next
                End With
        End If
    Next i
    If newstr <> "" Then mStr = mStr & newstr
End Sub
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
19.12.2012, 17:07
Ответы с готовыми решениями:

Как создать нужное количество массивов
У меня задача: на листе Excel человек должен выделить любое количество диапазонов (одновременно), после этого нужно все эти диапазоны...

Как создать массив массивов
как создать массив массивов, аналогично в С++ создавал так. double a1;double a2;double a3;double a4;double a5; double a6;double...

Как создать массив массивов
Привет всем!!!! У меня вопрос такой: можно ли в Си++ задать массив, например, 3на5, в котором элементами будут также массивы 5на5? и если...

53
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
22.12.2012, 14:48  [ТС]
Студворк — интернет-сервис помощи студентам
Добрый день! Понравилось - не то слово. На счет Net - установлен, пробую все, что рекомендуют, а вот использую то, что не понимаю до конца, только от временной безисходности. У меня к Вам (Hugo121) большущая просьба. Если есть какой-нибудь пример массива массивов, киньте пример, пожалуйста. Уверен, что разобраться и с этим - не помешает.

Добавлено через 19 минут
Ого! Это насчет "Массивы и коллекции в Visual Basic .NET". Сейчас не очень есть время (программирование - не то, чем зарабатываю на жизнь), Но! Второго! Января! Протрезвею!!! (надеюсь) и ганять буду до потери пульса. Спасибо!

Добавлено через 10 минут
Номера типа #-#-# все-таки надо разбивать. Если сортировка идет номеров вида 1-10-1, 1-1-10, 1-1-1, 10-1-10 и т.п. - результат не тот, что нужно. Не это уже детская задача.

Добавлено через 30 минут
Нет никакой силы воли. Не удержался. Попробовал использовать при обьявлении выражение типа Dim a () As Integer = {1, 2, 3, 4, 5}. Грубит железяка, ошибка компиляции. Compile error: syntax error

Добавлено через 51 минуту
Обновил Framework до 4.5. Не помогло.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.12.2012, 14:57
И сдались Вам эти типы!
Не работает - значит не нужно! В моём варианте вообще в a() в итоге помещаются строки (ключи словаря).

Ну а примера массива массивов из практики не нашёл - потому что удоьнее вместо них использовать словари с массивами/коллекциями.
Нарисовал такой синтетический пример - смотрите содержимое a() в окне Locals:

Visual Basic
1
2
3
4
5
6
7
8
9
10
Sub test()
    Dim a(1 To 3)
    Dim b(1 To 3)
    Dim i&
 
    For i = 1 To 3
        b(i) = i * 2
        a(i) = b
    Next
End Sub
Добавлено через 46 секунд
UDF из последнего примера работает?
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
22.12.2012, 15:04  [ТС]
Ваша функция Unique(DRange As Variant) As Variant - как швейцарские часы. Вот только что такое UDF? Могу предположить, что это User defined function?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.12.2012, 15:17
Да, так оно и есть
Если работает - значит Net в деле
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
22.12.2012, 15:26  [ТС]
Тогда получается, что выражение Dim a () As Integer = {1, 2, 3, 4, 5} справедливо только для Visual Basic .NET, или еще для VB6?
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.12.2012, 15:30
Я Net и VB не знаю.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
22.12.2012, 15:36  [ТС]
И в чем может быть проблема? Я уже "и по колесам постучал, и дверь закрыл" - в смысле, проверил "а" на латынистость и т.д.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.12.2012, 15:43
А в чём проблема?
Чего хотите достичь?
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
22.12.2012, 15:50  [ТС]
Вы дали ссылку на статью, которая меня заинтересовала. Я оттуда вытянул это выражение Dim a() As Integer = {1, 2, 3, 4, 5}, как первый шаг. И сразу тормоз. А хочу проработать информацию по статье.
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.12.2012, 15:55
Да, я тоже что-то оттуда пробовал - в VBA не работает.
Но System.Collections.ArrayList работает, как и SortedList.
0
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
22.12.2012, 15:56  [ТС]
И очень хорошо работает!
0
6998 / 2896 / 555
Регистрация: 19.10.2012
Сообщений: 8,804
22.12.2012, 16:03
Но как уже анализировалось в статье по сссылке - по скорости эти коллекции проигрывают словарям и коллекциям VBA.
Т.е. если данных мало - то используем что нравится и что удобнее.
Если много - уже нужно анализировать, скорость может отличаться в разы.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18035 / 7738 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
25.12.2012, 22:54
Цитата Сообщение от Igor_Tr Посмотреть сообщение
Dim a () As Integer = {1, 2, 3, 4, 5}
Нет, в VBA/VB6 можно только так:
Visual Basic
1
2
Dim a()
a = array(1, 2, 3, 4, 5)
1
4377 / 661 / 36
Регистрация: 17.01.2010
Сообщений: 2,134
25.12.2012, 23:26  [ТС]
Да я уже понял, что это VB6 и VB.net. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.12.2012, 23:26

Как создать и использовать массив массивов
подскажите как можно использовать массив массивов по элементарному примеру

Как объявить или создать массив массивов?
нужно занести несколько массивов в один. Можно так сделать? int a = new int ; int b = new int ; int c = new int ; int d = new int ;...

Как в классе создать поле массив массивов?
Пробовал вот так сделать но это не правильно. class Kcar { private string index = new string; public string...

Создать массив структур без использования массивов и нотации массивов
Доброго времени суток! Есть задание, в котором нужно создать массив структур, имея следующую структуру: struct name { string...

Как создать вспомогательный массив C и вывести в него только ИНДИВИДУАЛЬНЫЕ элементы первых двух массивов?
namespace ConsoleApplication2 { class proba { static void Main() { int n, m, i, j,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
Новые блоги и статьи
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru