Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Создать таблицу из файлов CSV, лежащих в разных папах с ... - Страница 2 - Мир MS Excel

Старая форма входа
  • Страница 2 из 2
  • «
  • 1
  • 2
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создать таблицу из файлов CSV, лежащих в разных папах с ... (Формулы)
Создать таблицу из файлов CSV, лежащих в разных папах с ...
Hugo Дата: Пятница, 08.11.2013, 12:21 | Сообщение № 21
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Конечно не то :(

[vba]
Код
For Each varItem In dctDict
             y = 6
[/vba]

Перевожу -
для каждого имени файла в словаре
переменная номера листа будет шесть
и далее 3 раза открываете этот один файл...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеКонечно не то :(

[vba]
Код
For Each varItem In dctDict
             y = 6
[/vba]

Перевожу -
для каждого имени файла в словаре
переменная номера листа будет шесть
и далее 3 раза открываете этот один файл...

Автор - Hugo
Дата добавления - 08.11.2013 в 12:21
Evg72 Дата: Пятница, 08.11.2013, 12:28 | Сообщение № 22
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Перевожу -
для каждого имени файла в словаре
переменная номера листа будет шесть
и далее 3 раза открываете этот один файл...

Точно !!! тут косечёк есть, но почему остальные листы 7,8,9 и тд. не заполняются?
 
Ответить
Сообщение
Перевожу -
для каждого имени файла в словаре
переменная номера листа будет шесть
и далее 3 раза открываете этот один файл...

Точно !!! тут косечёк есть, но почему остальные листы 7,8,9 и тд. не заполняются?

Автор - Evg72
Дата добавления - 08.11.2013 в 12:28
Hugo Дата: Пятница, 08.11.2013, 12:49 | Сообщение № 23
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Да потому что
"для каждого имени файла в словаре переменная номера листа будет шесть"


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДа потому что
"для каждого имени файла в словаре переменная номера листа будет шесть"

Автор - Hugo
Дата добавления - 08.11.2013 в 12:49
Evg72 Дата: Пятница, 08.11.2013, 13:04 | Сообщение № 24
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Спасибо. Понял ошибку, y=6 переместил выше начала цикла, спасибо за наводку. сейчас думаю как 3 раз по 3 файла убрать.
 
Ответить
СообщениеСпасибо. Понял ошибку, y=6 переместил выше начала цикла, спасибо за наводку. сейчас думаю как 3 раз по 3 файла убрать.

Автор - Evg72
Дата добавления - 08.11.2013 в 13:04
Hugo Дата: Пятница, 08.11.2013, 13:13 | Сообщение № 25
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Да что тут думать... :)[vba]
Код


                   Workbooks.OpenText Filename:= _
                      varItem _
                      , Origin:=866, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
                      xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
                      Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo:= _
                      Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
                   Range("A1:B26").Copy ThisWorkbook.Worksheets(y).Range("A1")
                   Range("B3:B26").Copy ThisWorkbook.Worksheets(y).Range("C3")
                   Range("B3:B26").Copy ThisWorkbook.Worksheets(y).Range("D3")
                   ActiveWindow.Close
[/vba]
Правда Range("B3:B26") сомневаюсь, что нужно дублировать рядом 2 раза...
А если надо - то можно сделать отимальнее иначе... Ну да ладно, так понятнее для начала.

Далее -
Range("B3:D23").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _ ...

Нужно указать, на каком листе этот диапазон, и можно без select:

[vba]
Код
sheets(y).Range("B3:D23").Replace What:=".", Replacement:=",", LookAt:=xlPart, _ ...
[/vba]


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеДа что тут думать... :)[vba]
Код


                   Workbooks.OpenText Filename:= _
                      varItem _
                      , Origin:=866, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
                      xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
                      Comma:=False, Space:=False, Other:=True, OtherChar:="|", FieldInfo:= _
                      Array(Array(1, 1), Array(2, 1)), TrailingMinusNumbers:=True
                   Range("A1:B26").Copy ThisWorkbook.Worksheets(y).Range("A1")
                   Range("B3:B26").Copy ThisWorkbook.Worksheets(y).Range("C3")
                   Range("B3:B26").Copy ThisWorkbook.Worksheets(y).Range("D3")
                   ActiveWindow.Close
[/vba]
Правда Range("B3:B26") сомневаюсь, что нужно дублировать рядом 2 раза...
А если надо - то можно сделать отимальнее иначе... Ну да ладно, так понятнее для начала.

Далее -
Range("B3:D23").Select
Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _ ...

Нужно указать, на каком листе этот диапазон, и можно без select:

[vba]
Код
sheets(y).Range("B3:D23").Replace What:=".", Replacement:=",", LookAt:=xlPart, _ ...
[/vba]

Автор - Hugo
Дата добавления - 08.11.2013 в 13:13
Evg72 Дата: Пятница, 08.11.2013, 13:25 | Сообщение № 26
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Не в случае с дублированием информация предыдущего файла будет затираться следующим, здесь похоже надо применить if ... then ... где будет проверяться название файла ММС или ММС2. Правильно я думаю?

[vba]
Код
If InStr(varItem, "DVN-stats.txt") Then
                    Range("A1:B26").Copy ThisWorkbook.Worksheets(y).Range("A1")
                    End If
                     If InStr(varItem, "MMS-stats.txt") Then
                     Range("B3:B26").Copy ThisWorkbook.Worksheets(y).Range("C3")
                     End If
                     If InStr(varItem, "MMS2-stats.txt") Then
                     Range("B3:B26").Copy ThisWorkbook.Worksheets(y).Range("D3")
                     End If
[/vba]


Сообщение отредактировал Evg72 - Пятница, 08.11.2013, 13:35
 
Ответить
СообщениеНе в случае с дублированием информация предыдущего файла будет затираться следующим, здесь похоже надо применить if ... then ... где будет проверяться название файла ММС или ММС2. Правильно я думаю?

[vba]
Код
If InStr(varItem, "DVN-stats.txt") Then
                    Range("A1:B26").Copy ThisWorkbook.Worksheets(y).Range("A1")
                    End If
                     If InStr(varItem, "MMS-stats.txt") Then
                     Range("B3:B26").Copy ThisWorkbook.Worksheets(y).Range("C3")
                     End If
                     If InStr(varItem, "MMS2-stats.txt") Then
                     Range("B3:B26").Copy ThisWorkbook.Worksheets(y).Range("D3")
                     End If
[/vba]

Автор - Evg72
Дата добавления - 08.11.2013 в 13:25
Hugo Дата: Пятница, 08.11.2013, 13:34 | Сообщение № 27
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну мне не известна задача в целом, зачем меняете листы, ну и если на каждый файл новый лист - то что там затирать, если он новый?
Я вообще в начале предполагал, что выгрузка будет копироваться на один лист, но сдигаясь по столбцам. Поэтому я там в начале приводил пример с x и y.

ММС или ММС2 - вообще непонятная штука... Но их можно проверять где угодно - Вы ведь перебираете имена файлов, отбираете по "-stats.txt", так можно отбирать далее (или сразу) и по "ММС-stats.txt" или "ММС2-stats.txt" и в зависимости от результата менять обработку.


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу мне не известна задача в целом, зачем меняете листы, ну и если на каждый файл новый лист - то что там затирать, если он новый?
Я вообще в начале предполагал, что выгрузка будет копироваться на один лист, но сдигаясь по столбцам. Поэтому я там в начале приводил пример с x и y.

ММС или ММС2 - вообще непонятная штука... Но их можно проверять где угодно - Вы ведь перебираете имена файлов, отбираете по "-stats.txt", так можно отбирать далее (или сразу) и по "ММС-stats.txt" или "ММС2-stats.txt" и в зависимости от результата менять обработку.

Автор - Hugo
Дата добавления - 08.11.2013 в 13:34
Evg72 Дата: Пятница, 08.11.2013, 14:47 | Сообщение № 28
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Здесь такая ситуация:
как вы уже поняли есть каталог
____
2013---
|________
| 2013-11|--
|__________
|2013-11-11|--
| _________
|--| 00:00:00| - в каждом часе есть несколько файлов и 3 из них -stats.txt
| _________
|--| 01:00:00|
| _________
|--| 02:00:00|
|
| _________
|--| 23:00:00|

В Excel мы сначала на страницах 00,01 ... 23 собираем данные из файлов .TXT, каждый час на своем листе куда попадают данные из 3-х файлов (из своей папки), потом сводим в статистику и потом рисуем графики. Вот такая идея

А в этой строке можно написать чтобы рассматривались только .TXT файлы?
[vba]
Код
If GetFiles("C:\stats\2013\2013-11\2013-11-11", dctDict, True) Then    'заполняется объект Dyctionary: dctDict
[/vba]


Сообщение отредактировал Evg72 - Пятница, 08.11.2013, 15:15
 
Ответить
СообщениеЗдесь такая ситуация:
как вы уже поняли есть каталог
____
2013---
|________
| 2013-11|--
|__________
|2013-11-11|--
| _________
|--| 00:00:00| - в каждом часе есть несколько файлов и 3 из них -stats.txt
| _________
|--| 01:00:00|
| _________
|--| 02:00:00|
|
| _________
|--| 23:00:00|

В Excel мы сначала на страницах 00,01 ... 23 собираем данные из файлов .TXT, каждый час на своем листе куда попадают данные из 3-х файлов (из своей папки), потом сводим в статистику и потом рисуем графики. Вот такая идея

А в этой строке можно написать чтобы рассматривались только .TXT файлы?
[vba]
Код
If GetFiles("C:\stats\2013\2013-11\2013-11-11", dctDict, True) Then    'заполняется объект Dyctionary: dctDict
[/vba]

Автор - Evg72
Дата добавления - 08.11.2013 в 14:47
Hugo Дата: Пятница, 08.11.2013, 15:14 | Сообщение № 29
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Ну тогда нужно делать иначе - выделять из пути к очередному файлу имя листа, далее DVN/MMS/MMS2, далее идём на этот лист, и выгружаем как в добавленном позже коде выше.
Т.е. в переменную y заносим то, что выберем из конкретного полного пути к файлу, а не просто счётчик.

"А в этой строке можно написать чтобы рассматривались только .TXT файлы? " - нет, да и не нужно - их ведь всё равно нужно проанализировать все (имя файла).
А вот именно в этой функции можно заносить в словарь только текстовые. Но тогда нужно корректировать текст функции.
Хотя принципиальной разницы нет, где проводить отбор - разве что если отбирать до заполнения словаря, то естественно словарь будет полегче. Но там ведь не миллион файлов? Пара сотен лишних строк погоды не сделает...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеНу тогда нужно делать иначе - выделять из пути к очередному файлу имя листа, далее DVN/MMS/MMS2, далее идём на этот лист, и выгружаем как в добавленном позже коде выше.
Т.е. в переменную y заносим то, что выберем из конкретного полного пути к файлу, а не просто счётчик.

"А в этой строке можно написать чтобы рассматривались только .TXT файлы? " - нет, да и не нужно - их ведь всё равно нужно проанализировать все (имя файла).
А вот именно в этой функции можно заносить в словарь только текстовые. Но тогда нужно корректировать текст функции.
Хотя принципиальной разницы нет, где проводить отбор - разве что если отбирать до заполнения словаря, то естественно словарь будет полегче. Но там ведь не миллион файлов? Пара сотен лишних строк погоды не сделает...

Автор - Hugo
Дата добавления - 08.11.2013 в 15:14
Evg72 Дата: Пятница, 08.11.2013, 15:42 | Сообщение № 30
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
%)


Сообщение отредактировал Evg72 - Пятница, 08.11.2013, 15:43
 
Ответить
Сообщение%)

Автор - Evg72
Дата добавления - 08.11.2013 в 15:42
Evg72 Дата: Пятница, 08.11.2013, 15:43 | Сообщение № 31
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
"А в этой строке можно написать чтобы рассматривались только .TXT файлы? " - нет, да и не нужно - их ведь всё равно нужно проанализировать все (имя файла).
А вот именно в этой функции


Это в какой?
 
Ответить
Сообщение
"А в этой строке можно написать чтобы рассматривались только .TXT файлы? " - нет, да и не нужно - их ведь всё равно нужно проанализировать все (имя файла).
А вот именно в этой функции


Это в какой?

Автор - Evg72
Дата добавления - 08.11.2013 в 15:43
Hugo Дата: Пятница, 08.11.2013, 16:42 | Сообщение № 32
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Если "в строке" - то в той, что Вы привели.
А если "в функции" - в GetFiles()


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеЕсли "в строке" - то в той, что Вы привели.
А если "в функции" - в GetFiles()

Автор - Hugo
Дата добавления - 08.11.2013 в 16:42
Evg72 Дата: Пятница, 29.11.2013, 14:12 | Сообщение № 33
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
спасибо большое всем, получилось очень даже красиво (с моей точки зрения) :)
 
Ответить
Сообщениеспасибо большое всем, получилось очень даже красиво (с моей точки зрения) :)

Автор - Evg72
Дата добавления - 29.11.2013 в 14:12
Evg72 Дата: Пятница, 29.11.2013, 15:44 | Сообщение № 34
Группа: Пользователи
Ранг: Новичок
Сообщений: 18
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
А файлы .csv тоже можно так собирать ? там столбцов больше и в некоторых местах есть запятые которые макросом интерпретируются как разрыв столбца.
 
Ответить
СообщениеА файлы .csv тоже можно так собирать ? там столбцов больше и в некоторых местах есть запятые которые макросом интерпретируются как разрыв столбца.

Автор - Evg72
Дата добавления - 29.11.2013 в 15:44
Hugo Дата: Пятница, 29.11.2013, 17:55 | Сообщение № 35
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3255
Репутация: 707 ±
Замечаний: 0% ±

2019
Файл csv - это тот же текст, только с другим расширением. Так что тоже можно.
И так даже правильнее их открывать - можно заранее задать формат столбцам, чтоб даты были в нужном виде, ведущие нули на месте, дроби не превращались в даты...


excel@nxt.ru
webmoney: E265281470651 Z422237915069
 
Ответить
СообщениеФайл csv - это тот же текст, только с другим расширением. Так что тоже можно.
И так даже правильнее их открывать - можно заранее задать формат столбцам, чтоб даты были в нужном виде, ведущие нули на месте, дроби не превращались в даты...

Автор - Hugo
Дата добавления - 29.11.2013 в 17:55
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Создать таблицу из файлов CSV, лежащих в разных папах с ... (Формулы)
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!