Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
7 / 7 / 1
Регистрация: 07.08.2013
Сообщений: 113
Excel

Оптимизация кода с увеличением на 1

01.12.2022, 16:47. Показов 471. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день Уважаемые форумчане!
Хотела бы спросить, как можно оптимизировать следующий код.
1) В наличии имеются строки на листе в Excel примерно 35000, размещённых в двух столбцах.
2) Считываю строки блоком по 360 строк, делаю обработку данных и сохраняю в текстовый файл.
3) Когда код пробежит 360 строк, он берёт следующую группу строк с 361 по 720 и т.д. пока не достигнет конца строк.
4) Как можно преобразовать следующий код в что-нибудь более компактное и убрать i+1, i+2, i+3...?

Заранее спасибо за всевозможные варианты!
С уважением.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 For i = 1 To UBound(Cols1) Step 360
        'Stroki
        res = Cols1(i, 1) & "  " & Cols1(i, 2) & "," & vbCrLf
        res = Cols1(i + 1, 1) & "  " & Cols1(i + 1, 2) & "," & vbCrLf
        res = Cols1(i + 2, 1) & "  " & Cols1(i + 2, 2) & "," & vbCrLf
        res = Cols1(i + 3, 1) & "  " & Cols1(i + 3, 2) & "," & vbCrLf
        res = Cols1(i + 4, 1) & "  " & Cols1(i + 4, 2) & "," & vbCrLf
        res = Cols1(i + 5, 1) & "  " & Cols1(i + 5, 2) & "," & vbCrLf
        res = Cols1(i + 6, 1) & "  " & Cols1(i + 6, 2) & "," & vbCrLf
        res = Cols1(i + 7, 1) & "  " & Cols1(i + 7, 2) & "," & vbCrLf
        res = Cols1(i + 8, 1) & "  " & Cols1(i + 8, 2) & "," & vbCrLf
        res = Cols1(i + 9, 1) & "  " & Cols1(i + 9, 2) & "," & vbCrLf
        res = Cols1(i + 10, 1) & "  " & Cols1(i + 10, 2) & "," & vbCrLf
        res = Cols1(i + 11, 1) & "  " & Cols1(i + 11, 2) & "," & vbCrLf
        res = Cols1(i + 12, 1) & "  " & Cols1(i + 12, 2) & "," & vbCrLf
        res = Cols1(i + 13, 1) & "  " & Cols1(i + 13, 2) & "," & vbCrLf
        res = Cols1(i + 14, 1) & "  " & Cols1(i + 14, 2) & "," & vbCrLf
        res = Cols1(i + 15, 1) & "  " & Cols1(i + 15, 2) & "," & vbCrLf
        ...
        res = Cols1(i + 359, 1) & "  " & Cols1(i + 359, 2) & "," & vbCrLf
Next i
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
01.12.2022, 16:47
Ответы с готовыми решениями:

Оптимизация методом Ньютона (нахождение точки минимума). Оптимизация кода
MATLAB только начал осваивать. Попытался реализовать нахождение точки минимума методом Ньютона для функции 2*X12 - X1*X2 + 3*X22 -...

Оптимизация кода. Замер времени выполнения части кода.
Доброе утро. Есть желание посмотреть сколько времени занимает выполнение какого-то блока кода/отдельной функции или процедуры/программы...

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии "оптимизатора" в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

4
ᴁ ©
Эксперт MS Access
 Аватар для АЕ
4171 / 2457 / 511
Регистрация: 13.12.2016
Сообщений: 8,342
Записей в блоге: 5
01.12.2022, 17:00
Лучший ответ Сообщение было отмечено Albina1994 как решение

Решение

Visual Basic
1
2
3
4
5
6
For i = 1 To UBound(Cols1) Step 360
        'Stroki
 For j = 0 to 359        
    res = Cols1(i+j, 1) & "  " & Cols1(i+j, 2) & "," & vbCrLf
 next
next
Добавлено через 5 минут
Меня только смущает, что вы каждый раз переменную перезаписываете...
возможно res = res & ....
2
7 / 7 / 1
Регистрация: 07.08.2013
Сообщений: 113
01.12.2022, 17:19  [ТС]
АЕ, Большое спасибо за ответ! Попробовала сейчас в коде, всё работает.
Да, вы правы. Должно быть:
Visual Basic
1
res = res & Cols1(i+j, 1) & "  " & Cols1(i+j, 2) & "," & vbCrLf
0
398 / 255 / 98
Регистрация: 04.11.2022
Сообщений: 378
02.12.2022, 21:18
АЕ, лучше
Visual Basic
1
2
3
4
5
6
For i = 1 To UBound(Cols1) Step 360
        'Stroki
  For j = i to i+359
    res = Cols1(j, 1) & "  " & Cols1(j, 2) & "," & vbCrLf
  next
next
Цитата Сообщение от Albina1994 Посмотреть сообщение
2) Считываю строки блоком по 360 строк, делаю обработку данных и сохраняю в текстовый файл.
Эту переменную res Вы записываете в файл? Не надо буферизовать вывод в файл, Бейсик и Windows с этим прекрасно справляются сами:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub S360()
Dim i&, j&, Cols1()
  Cols1 = Range("A1", Cells(Rows.Count, "B").End(xlUp)).Value2 'например
  On Error GoTo 1
  For i = 1 To UBound(Cols1) Step 360
    Open "File" & i & ".txt" For Output As #1 'файлы File1.txt, File361.txt,...
    For j = i To i + 359
      Print #1, Cols1(j, 1); "  "; Cols1(j, 2); ","
    Next
2   Close #1
  Next
  Exit Sub
 
1 If Err = 9 Then Resume 2 'Subscript out of range
  MsgBox "Error " & Err & ":" & Err.Description, vbCritical
End Sub
Заодно предложил способ обхода ошибки Subscript out of range, если длина массива не кратна 360.
1
 Аватар для Angry Old Man
3047 / 749 / 313
Регистрация: 26.03.2022
Сообщений: 1,400
Записей в блоге: 1
03.12.2022, 00:49
Цитата Сообщение от Vigilant Mole Посмотреть сообщение
предложил способ обхода ошибки
А не надо её создавать, чтобы потом её обходить.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Portion = 360
Ubou = UBound(Cols1, 1)
 
For i = 1 To Ubou Step Portion
    ii = i + Portion - 1
    res = ""
    If ii > Ubou Then ii = Ubou
    For j = i To ii
        res = res & Cols1(j, 1) & "  " & Cols1(j, 2) & "," & vbCrLf
    Next
    ' Отправляем res на обработку
Next
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2022, 00:49
Помогаю со студенческими работами здесь

Оптимизация кода
Проверяю форму на заполнение всех полей, подсвечиваю красным если не заполнены. Прошу помочь оптимизировать код, так как вижу что он...

Оптимизация кода
Уважаемые специалисты, ниже я привел код, который работает, но отрабатывает очень длительное время. Возможно ли как то его...

Оптимизация кода
Глупый и очень обширный вопрос, но как оптимизировать код? У меня есть приложение, которое занимает озу телефона около 30 Мб, приложение, в...

Оптимизация кода
Доброго времени суток. Получен рабочий код, но работающий очень медленно (пока что рекорд 56 часов =D), мне бы его оптимизировать чутка. ...

Оптимизация кода в C#
Подскажите книгу пожалуйста,по оптимизации кодов C# если такие имеют место быть!!! Пишу избыточные коды ((( хотелось бы писать более...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru