Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/82: Рейтинг темы: голосов - 82, средняя оценка - 4.91
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
Excel

Макрос для извлечения значений из txt файла

05.06.2010, 15:13. Показов 15114. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется файл текстовый с примерным содержанием

Начало файла
Список злостных дядек за 2010
по Российской Федерации
.
________________________________________ _______
| цу| пп | гд | ВВ | зз | уу | ув | ыва| уке |
________________________________________ _______
| 12 | 13 | 1 | 8 |фпук |2.2.3| 21| 85 | |
| 12 | 23 | 1 | 8 |упукп|1.5.8| 25 | 23 | |
| 12 | 41 | 1 | 8 |прьпр|5.2.6| 63| 65 | |
| 12 | 46 | 1 | 8 |рьпрь|4.5.3| 89| 24| |
| 12 | 11| 1 | 8 |перь |1.6.9| 43 | 42 | еку |
| 12 | 673| 1 | 8 | прь |8.7.3| 52 | 63 | |
| 12 | 65 | 1 | 8 |еке |3.2.6| 57 | 53 | |
| 12 | 20| 1 | 8 |уке |2.5.9| 42 | 33 | |
| 12 | 34 | 1 | 8 |апр |1.2.5| 65| 85 | |
________________________________________ _______

В отчёте много строк, а конкретно столько
Конец файла

В этом файле нужно сложить цифирьки в пятом столбце "ыва" и вывести сумму в первой ячейке, а во второй сколько чисел было сложено, или наоборот
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.06.2010, 15:13
Ответы с готовыми решениями:

Макрос для извлечения телефона из Word
Здравствуйте, в программировании профан, но необходимо из фордовского файла вытащить номера телефонов (в файле они заключены в скобки типа ...

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

Как брать из внешнего .TXT файла макрос ?
Как брать из внешнего .TXT файла макрос(в модул)

22
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
05.06.2010, 15:45
А пример файла?
0
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
05.06.2010, 16:03  [ТС]
вот такое примерное содержание файла
Вложения
Тип файла: txt tmp.txt (4.1 Кб, 322 просмотров)
0
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
05.06.2010, 17:55
Подойдет так?
Вложения
Тип файла: xls Мкр.xls (26.0 Кб, 547 просмотров)
0
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
05.06.2010, 18:56  [ТС]
Цитата Сообщение от Vlanib Посмотреть сообщение
Подойдет так?
Спасибо! для небольшого файла всё читается нормально, а вот в файле который "боевой" выдаёт ошибку, так как в нём больше 200тысячь таких строк. i остановилось на значении 32767
0
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
05.06.2010, 19:33
В 2003 Excele всего 65536 строк. Даже если объявить i как long, то 65 тыщ должен отсчитать. Надо тогда другой подход искать, сильно велик у тебя файлик. Я пока не готов выдать решение. Может у кого другого идеи появятся?
0
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
05.06.2010, 19:45
Ну как выход можно попробовать запустить макрос в 2007. Может и получится - у меня просто негде проверить. Ну а так надо вручную парсить текст, считать данные из массива, и только потом с Excel работать. Как то так.
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
06.06.2010, 04:33
если это надо сделать один раз, то можно примерно так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Sub b()
Dim s As Currency
Open "D:tmp.txt" For Input As #1
Debug.Print Time
Do While Not EOF(1)
Input #1, strValue
If n > 6 Then
    a = Split(strValue, "|")
    If a(0) = "" Then
        s = s + CCur(Replace(Trim(a(8)), ".", ","))
        m = m + 1
    End If
Else
    n = n + 1
End If
Loop
Close #1
Debug.Print Time
MsgBox "îáùèé îñòàòîê " & s & Chr(13) & "êàäðîâ " & m
End Sub
сколько по времени будет считать 200000 строк, низнаю
1
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
06.06.2010, 06:04  [ТС]
Цитата Сообщение от ironegg Посмотреть сообщение
если это надо сделать один раз, то можно примерно так
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Public Sub b()
Dim s As Currency
Open "D:tmp.txt" For Input As #1
Debug.Print Time
Do While Not EOF(1)
Input #1, strValue
If n > 6 Then
    a = Split(strValue, "|")
    If a(0) = "" Then
        s = s + CCur(Replace(Trim(a(8)), ".", ","))
        m = m + 1
    End If
Else
    n = n + 1
End If
Loop
Close #1
Debug.Print Time
MsgBox "îáùèé îñòàòîê " & s & Chr(13) & "êàäðîâ " & m
End Sub
сколько по времени будет считать 200000 строк, низнаю
Ошибка
Run-time error '9':
Subscript out of range

жёлтым выделяется вот эта строчка
Visual Basic
1
s = s + CCur(Replace(Trim(a(8)), ".", ","))
у меня стоит Excel 2007
0
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
06.06.2010, 07:06
Так если у тебя 2007 офис, то какие проблемы? В первом варианте при объявлении переменных замени i as Long и запускай. Должно всё отработать.
1
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
06.06.2010, 09:37  [ТС]
Цитата Сообщение от Vlanib Посмотреть сообщение
Так если у тебя 2007 офис, то какие проблемы? В первом варианте при объявлении переменных замени i as Long и запускай. Должно всё отработать.
Да, заработало, суммируется, спасибо!

Добавлено через 51 секунду
а макрос что выложил ironegg как справиться с ошибкой
0
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
06.06.2010, 12:15
У меня вариант ironegg работает, ну естественно с заменой
Visual Basic
1
Open ActiveWorkbook.Path & "\tmp.txt " For Input As #1
Всё считает, по крайней мере с усеченным вариантом строк.
0
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
06.06.2010, 13:03  [ТС]
с усечённым вариантом у меня тоже считается
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
06.06.2010, 14:29
проверь отладчиком, где останавливается код (в переменной m содержится количество обработанных строк). если в начале, выложи начало боевого файла, если в конце - конец. ну вдруг если в середине... попробуй нужное место найти и выложить его.
так же сообщи какое конкретно выражение из этой строки возвращает ошибку (например поместив в окно Watch выражение
Visual Basic
1
2
3
a(8)
'или
CCur(Replace(Trim(a(8)), ".", ","))
)
скорее всего дело в неожиданной комбинации символов в боевом файле
0
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
06.06.2010, 14:51  [ТС]
Цитата Сообщение от ironegg Посмотреть сообщение
проверь отладчиком, где останавливается код (в переменной m содержится количество обработанных строк). если в начале, выложи начало боевого файла, если в конце - конец. ну вдруг если в середине... попробуй нужное место найти и выложить его.
так же сообщи какое конкретно выражение из этой строки возвращает ошибку (например поместив в окно Watch выражение
Visual Basic
1
2
3
a(8)
'или
CCur(Replace(Trim(a(8)), ".", ","))
)
скорее всего дело в неожиданной комбинации символов в боевом файле
когда поместил в окно Watch a(8) там появился следующий текст subscript out of range
0
 Аватар для ironegg
1905 / 782 / 31
Регистрация: 11.02.2010
Сообщений: 1,567
06.06.2010, 15:02
в массиве нет элемента под номером 8? без нужного кусочка файла не разобраться. скорее всего в конце файл затерялся лишний знак "|". или его не хватает в кокой то строчке в таблице
1
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
06.06.2010, 15:50  [ТС]
нашёл я строчку в которой ошибка, но почему-то на мой взгляд в ней всё нормально

Добавлено через 2 минуты
а нет есть отличие в пятом поле имеется запятая

Добавлено через 8 минут
убрал зяпятую и всё заработало, спасибо! VBA это удивительно, это я сейчас радуюсь как младенец погремушке, а что будет со мной когда такие макросы я смогу писать самостоятельно
0
Частенько бываю
 Аватар для Vlanib
750 / 331 / 42
Регистрация: 20.06.2007
Сообщений: 854
06.06.2010, 16:11
Цитата Сообщение от Repa_M Посмотреть сообщение
... VBA это удивительно, это я сейчас радуюсь как младенец погремушке, а что будет со мной когда такие макросы я смогу писать самостоятельно
Чё то улыбнуло. Дежавю.
0
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
07.06.2010, 17:28  [ТС]
задался задачей посложнее, в похожем файле txt
в столбце "вид" присутствуют цифры 43 и 45 они определяют нужность строки с данными, из которой нужно взять значение "филиал" и "остаток"
вот как бы сделать так чтоб напротив каждого филиала выводилась сумма и количество этих сумм. причём сумма указывалась в диапазонах от 1тысячи до 30, от 30 до 300, от 300 и выше
0
 Аватар для Repa_M
0 / 0 / 0
Регистрация: 05.06.2010
Сообщений: 17
07.06.2010, 17:30  [ТС]
файлик
Вложения
Тип файла: 7z tmp.7z (9.0 Кб, 61 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.06.2010, 17:30
Помогаю со студенческими работами здесь

Сформировать макрос по выгрузке данных из файла excel в файл txt
Здравствуйте!!!Срочно!!! Помогите пожалуйста сформировать макрос по выгрузке данных из файла excel в файл txt. Выгрузка должна быть...

Макрос для транспонирования значений из строк в столбцы с копированием значений
Приветствую, друзья! Требуется Ваша помощь. Долго думал какой написать заголовок, но думаю из него всё равно ничего не понятно. Сейчас...

Макрос для транспонирования значений из строк в столбцы с копированием значений из исходной строки
Приветствую, друзья! Требуется Ваша помощь. Долго думал какой написать заголовок, но думаю из него всё равно ничего не понятно. Сейчас...

Парсинг текстового файла для извлечения строки IP
Как в c# текстовом файле data.txt найти определенную строку, в моем случае "</span> <big id="d_clip_button">(дальше идет...

Записал небольшой макрос для подсчета значений, как вывести сообщение с расчетом значений?
Здравствуйте, снова появилась идейка для быстродействия, записал макрос, он работает, сортирует как надо, но как прикрутить вывод сообщения...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru