Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 4
1

При обработке массива в цикле тянутся все элементы массива

26.05.2020, 10:28. Показов 1830. Ответов 9

Author24 — интернет-сервис помощи студентам
Всем привет!
Я работаю на другом языке программирования, но есть задача, которую нужно выполнить именно в VBA.
Есть большой массив данных и в одном поле перечислены города. Необходимо "нарезать" большой файл на мелкие в соответствии с принадлежностью к городу. Я написал код, который успешно это делает......до второго города.

Дале замечаю, что при обработке цикла второй элемент включает в себя первый - соответственно поиск далее не осуществляется.
В виду ограничений со стороны сб не могу скопировать файл, вот часть кода, в которой выявлена проблема

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Sub()
Dim reg As Range, element As Variant, file_name As String
 
file_name = 'C:\project\'
 
Application.ScreenUpdating = False
 
For Each element in Worksheets("City").Range("A1:A10")
    file_name = file_name & element & ".xlsx"
    MsgBox file_name
 
Next element
 
End Sub
В качестве результата выводит ( если опустить путь и формат файла): после первой итерации выводит Город1, после второй Город1Город2 и т.д.

Здесь я указываю перебор ячеек с названием городов. Пробовал также через Array. Но результат тот же.
Помогите, пожалуйста, разобраться
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
26.05.2020, 10:28
Ответы с готовыми решениями:

Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все элементы данного массива с четными номерами, во второ
Удалить из массива целых чисел все нули. Сформировать два новых массива. В первый переписать все...

Заменить все положительные элементы на наименьший элемент массива, удалив его при этом из массива
Для произвольно выбранной последовательности целых чисел, в которой не более 30 элементов,...

Сформировать массив L из массивов A и B путем их слияния так, чтобы сначала располагались все элементы массива A, а затем все элементы массива B.
Задан массив A из N элементов и массив B из M элементов. Сформировать массив L из массивов A и B...

Сформировать и вывести на экран новый массив, который будет содержать вначале все элементы массива A(0), затем все элементы массива B(4)
Здравствуйте! Помогите написать парочку программ... 3. Даны массивы A(0) и B(4). Сформировать...

9
2724 / 1701 / 776
Регистрация: 23.03.2015
Сообщений: 5,388
26.05.2020, 10:49 2
Binwigon,
Привет нужен кусок файла ( с измененными данными, если исходный - секретный).
Тип файла
Что делить?

Тот кусок кода, который вы написали - нм к селу ни к городу.
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
26.05.2020, 11:08 3
Как написали так и выводит. Даже странно... а что должно было быть в итоге в file_name?
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 4
26.05.2020, 11:13  [ТС] 4
проблема в том, что все файлы на удаленном компьютере. Доступы на форумы перекрыты.
Пришлось перепечатывать.
напечатал все как есть, единственное, что A 10 - без пробела.

Я открываю excel - alt-F11 и вставляю в макрос
0
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
26.05.2020, 11:17 5
Навскидку алгоритм я бы строил такой:
- циклом собираем словарь городов, у каждого в итем коллекция его строк
- циклом по словарю каждому городу новый файл, циклом по коллекции копируем его строки, сохраняем.

Ну или просто словарь или коллекция городов, и в цикле по ним привлекаем фильтр-копирование в новую книгу.

Добавлено через 2 минуты
Цитата Сообщение от Binwigon Посмотреть сообщение
напечатал все как есть
- не верю. Такое не может работать в VBA.
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 4
26.05.2020, 11:18  [ТС] 6
Цитата Сообщение от Hugo121 Посмотреть сообщение
Как написали так и выводит. Даже странно... а что должно было быть в итоге в file_name?
после каждой итерации он должен формировать название файла, куда сохранять.
Для первого города получается C:\project\Воронеж.xlsx
Для него все отработала идеально. Строки удалились и файл сохранился.


Для второго:C:\project\Воронеж.xlsxC:\project\Москва.xlsx
Для третьего: C:\project\Воронеж.xlsxC:\project\Москва.xlsxC:\project\Самара.xlsx
0
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
26.05.2020, 11:19 7
Лучший ответ Сообщение было отмечено Binwigon как решение

Решение

Binwigon,

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Test()
    Dim path_name$, file_name$, cell As Range
    path_name = "C:\project\"
 
    For Each cell In Worksheets("City").Range("A1:A10")
        file_name = path_name & cell & ".xlsx"
        MsgBox file_name
    Next
End Sub
1
6922 / 2832 / 543
Регистрация: 19.10.2012
Сообщений: 8,645
26.05.2020, 11:23 8
Лучший ответ Сообщение было отмечено Binwigon как решение

Решение

Так не добавляйте строку к ранее собранному, берите снова исходник. А для этого нужна или другая переменная, или вообще только одна исходная и element

Добавлено через 2 минуты
Вот например попаразитрую
Visual Basic
1
2
3
4
5
6
7
8
Private Sub Test()
    Dim file_name$, cell As Range
    file_name = "C:\project\"
 
    For Each cell In Worksheets("City").Range("A1:A10")
        MsgBox file_name & cell & ".xlsx"
    Next
End Sub
1
4134 / 2238 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
26.05.2020, 11:30 9
Пример без паразитизма Если нет Option Explicit, то можно и без Dim el

Visual Basic
1
2
3
4
5
6
Private Sub Test2()
    Dim el 'As Variant 
    For Each el In Worksheets("City").Range("A1:A10").Value
        MsgBox "C:\project\" & el & ".xlsx"
    Next
End Sub
0
0 / 0 / 0
Регистрация: 26.05.2020
Сообщений: 4
26.05.2020, 11:35  [ТС] 10
Цитата Сообщение от pashulka Посмотреть сообщение
Binwigon,

Visual Basic
1
2
3
4
5
6
7
8
9
Private Sub Test()
    Dim path_name$, file_name$, cell As Range
    path_name = "C:\project\"
 
    For Each cell In Worksheets("City").Range("A1:A10")
        file_name = path_name & cell & ".xlsx"
        MsgBox file_name
    Next
End Sub
Спасибо Большое!
Работает как надо!

Добавлено через 2 минуты
Цитата Сообщение от Hugo121 Посмотреть сообщение
Так не добавляйте строку к ранее собранному, берите снова исходник. А для этого нужна или другая переменная, или вообще только одна исходная и element

Добавлено через 2 минуты
Вот например попаразитрую
Visual Basic
1
2
3
4
5
6
7
8
Private Sub Test()
    Dim file_name$, cell As Range
    file_name = "C:\project\"
 
    For Each cell In Worksheets("City").Range("A1:A10")
        MsgBox file_name & cell & ".xlsx"
    Next
End Sub
Спасибо за помощь!!!
0
26.05.2020, 11:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.05.2020, 11:35
Помогаю со студенческими работами здесь

Переписать элементы массива А в массив В так, чтобы все отрицательные элементы располагались в начале массива, а все остальные в конце
очень нужна помощь Задача 10. Заполнить массив из 10 элементов с помощью генератора...

Заданы два массива A и B. Удалить из массива А все элементы, входящие в состав массива В
Половину я сделала, задала массивы, а дальше не получается :sorry: %-) Поможете? program...

Умножить на 3 все элементы во второй половине массива A; Разделить на 2 все элементы массива A,
1.Умножить на 3 все элементы во второй половине массива a (считать, что в массиве чётное число...

Как разделить все элементы одного массива на все элементы другого массива?
Как разделить все элементы одного массива на все элементы другого массива, и вывести все...

Функции обработки массива (определить произведение элементов массива, заменить модулем все элементы массива, уничтожить элемент с заданным значением)
Вот задания,не могу сделать ни одного из них,буду благодарен за помощь. Написать функции для...

Получить из него два массива: в один записать все положительные элементы, в другой – отрицательные элементы исходного массива
Дан массив. Получить из него два массива: в один записать все положительные элементы, в другой –...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru