Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.02.2010, 12:03   #1
roy71
 
Регистрация: 21.01.2010
Сообщений: 6
По умолчанию Преобразование числового массива в набор текстовых файлов

Добрый день (вечер, ночь) Всем.
Помогите разобраться с кодом. Вкратце задача такая:
Есть текстовый файл с цифровым массивом представленным в виде таблицы (если конкретней, то результаты розыгрышей лотереи 6 из 49 за несколько лет) около 9000 строк. Эту таблицу надо разбить на небольшие таблицы 6х20 (6 столбцов по 20 строк) и поместить каждую отдельно в текстовый файл.

Я написал программку в Excel для выполнения этой задачи.
Работает так, сначала вручную открываем в Excel весь массив (общий текстовый файл), преобразовывая его в таблицу, после этого копируем весь массив в файл с макросом и запускаем его на обработку. В результате работы создается новая папка с файлами 1.txt, 2.txt и т.д. по количеству столбцов. Причем разбиение на столбцы организовано так, что программа сначала высчитывает общее количество столбцов и создает их таким образом что, если, допустим, столбцов 20 то первые 20 строк будут являться первыми строками 20-ти столбцов, (т.е. 1 файл будет содержать строки 1, 21, 41 и т.д.).
Теперь ближе к теме.
Для создания каждого столбца-файла макрос открывает новую книгу, создает в ней таблицу 6х20, сохраняет в текстовый файл и закрывает, затем второй и т.д.

Помощи хотелось бы вот в чем:

Как это реализовать в пределах одной книги, я сначала так и хотел сделать, но знаний не хватило, по форуму поискал, не нашел, возможно плохо искал.
Спасибо всем кто прочитал.
Макрос в общем-то свою работу делает, но мне кажется алгоритм работы не совсем нормальный (кривой), я думаю можно это как-то проще решить). Хотелось бы услышать мнение профи.

Код:
Option Explicit
Public Sub Сортировка()
Dim a, b, i, n, m, s, Filename, NewfolderName As Variant
a = ActiveSheet.UsedRange.Rows.Count        ' Считаем количество заполненных строк
s = a / 20                                  ' Определяем количество столбцов
Application.ScreenUpdating = False          ' Отключаем обновление экрана
NewfolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Columns")
MkDir NewfolderName
b = 1
For i = 1 To s                               ' Сортируем
    Application.DisplayAlerts = False
    Workbooks.Add.SaveAs "Book", FileFormat:=xlExcel8, CreateBackup:=False
    Range("A1:F1").Select                    ' Устанавливаем ширину столбцов
    Selection.ColumnWidth = 2.5
    n = b
    For m = 1 To 20
        Windows("Colum6.xls").Activate
        Sheets("Лист1").Activate
        Range(Cells(n, 1), Cells(n, 6)).Select
        Selection.Copy
        Windows("Book.xls").Activate
        Sheets("Лист1").Activate
        Cells(m, 1).Select
        ActiveSheet.Paste
        n = n + s
    Next m
    b = b + 1
    Filename = NewfolderName & Application.PathSeparator & i
    ActiveWorkbook.SaveAs Filename, FileFormat:=xlText, CreateBackup:=False ' Сохраняем текстовый файл
    ActiveWindow.Close False
Next i
Range("A1").Select
Application.ScreenUpdating = True             ' Заканчиваем работу
MsgBox ("Пипец!!!!! Котенку :))))")
End Sub

Ну и два файла в приложении.

P.S. При работе программы ни один котенок не пострадал
Вложения
Тип файла: rar Mass.rar (40.5 Кб, 11 просмотров)
roy71 вне форума Ответить с цитированием
Старый 13.02.2010, 21:18   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Только для новых Остапов , и потому,что котенок жив.
И не насилуйте Ексель такими задумками
Смотрите вложение,укажете при запросе полный путь к файлу.
1% навара на бочку
Вложения
Тип файла: rar Остап.rar (612 байт, 15 просмотров)
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 13.02.2010 в 22:33.
doober вне форума Ответить с цитированием
Старый 14.02.2010, 15:06   #3
roy71
 
Регистрация: 21.01.2010
Сообщений: 6
По умолчанию

Спасибо большое, я предполагал, что сия задача проще решается скриптом, но увы по скриптам у меня знаний еще меньше чем по VBA. Если не трудно подскажите как теперь этот скрипт переделать чтобы он создавал не 20 текстовых файлов, а создавал N-файлов которые бы содержали 20 строк, где N = количество строк в текстовом файле деленное на 20, как вот здесь:
Код:
a = ActiveSheet.UsedRange.Rows.Count        ' Считаем количество заполненных строк
s = a / 20                                                         ' Считаем количество файлов
Еще раз спасибо, будем изучать скрипты. Может подскажите литературу какую почитать?
roy71 вне форума Ответить с цитированием
Старый 15.02.2010, 02:58   #4
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

А где проценты?
Читать
Здесь

Здесь
Вложения
Тип файла: rar Остап2.rar (615 байт, 10 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 15.02.2010, 06:47   #5
roy71
 
Регистрация: 21.01.2010
Сообщений: 6
По умолчанию

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

Цитата:
Сообщение от doober Посмотреть сообщение
А где проценты?
Да я бы поделился, если бы выигрыш был, а так мало того, что эта лотерея проводится в Германии (в текстовом файле в начале присутствуют буковки DE), так я этим и не увлекаюсь. Мне интересен сам алгоритм работы. Прецедент конечно был, знакомый спросил можно ли на Excel'e сделать такое, я попытался изобразить, но у меня возникли большие сомнения по поводу правильности использования Excel'я. Поэтому я и обратился к знающим людям.
Спасибо большое за ответы.
roy71 вне форума Ответить с цитированием
Старый 15.02.2010, 07:47   #6
roy71
 
Регистрация: 21.01.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от roy71 Посмотреть сообщение
А не подскажите, есть оболочки для пошаговой проверки и отладки работы скрипта
Вроде то, что надо
Редактор VBScript
roy71 вне форума Ответить с цитированием
Старый 15.02.2010, 11:42   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Исправил кривизну
Вложения
Тип файла: rar Остап2 М.rar (618 байт, 13 просмотров)
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 15.02.2010, 12:13   #8
roy71
 
Регистрация: 21.01.2010
Сообщений: 6
По умолчанию

Цитата:
Сообщение от doober Посмотреть сообщение
Исправил кривизну
Спасибо большое, я наверно уже надоел со своими расспросами, полдня сижу разбираюсь с кодом, если можно кое что уточнить
1. Строка c = 0 по моему лишняя?
2. Строк в файле 8060 т.е. файлов должно быть 403, а их 404, и не совсем понятно откуда скрипт еще 20 строк набрал?
3. Оператор vbCr - это перенос строки? А можно его заменить на знак табуляции.
roy71 вне форума Ответить с цитированием
Старый 15.02.2010, 12:19   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

с=0 - это мусор.
Лишний файл-это как раз выиграшная комбинация.
Вставте весь код в кнопку в Екселе и тестируйте.
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 15.02.2010, 17:43   #10
roy71
 
Регистрация: 21.01.2010
Сообщений: 6
По умолчанию

Да я его уже в PrimalScript тестировал, пока не понятны действия некоторых операторов, но думаю разберусь, литературу уже нашел.
Еще раз спасибо за помощь.
Но проблема еще осталась. Дело в том что эти файлы надо загружать в программу "ЛотоПомошник" (это я с помощью ее тестирую результат). При попытке загрузить данные в программу, она воспринимает их как строку и отказывается с ними работать, а вот файлы которые я делаю в Excel, она воспринимает на ура (как таблицу).
Но это уже не важно, я еще со скриптом поковыряюсь, может просветление наступит в голове . Польза все равно будет.

P.S.
Еще небольшой вопросик. Макрос я писал в Excel 2007, а как он будет себя вести в Excel 2003? Имеется в виду на другом компьютере, на котором MSO 2007 отродясь не стояло.

Цитата:
Сообщение от doober Посмотреть сообщение
Лишний файл-это как раз выиграшная комбинация.
Осталось выбрать какой из 400-х сотен

Последний раз редактировалось roy71; 15.02.2010 в 17:47.
roy71 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка двумерного числового массива «спиралью» vicvtor Помощь студентам 2 06.07.2011 09:10
Паскаль. процедура сортировки числового массива методом выбора Оксаночка:) Помощь студентам 2 24.08.2009 11:41
Обработка текстовых файлов Frenki Помощь студентам 4 17.05.2009 14:52
Конец числового массива char Байт Общие вопросы C/C++ 4 04.02.2009 21:19
Сравнение текстовых файлов BR17UY Общие вопросы Delphi 15 07.05.2007 20:18