Excel пакетная обработка файлов

 

pablo

Пользователь

Сообщений: 10
Регистрация: 11.01.2013

Подскажите, пожалуйста, каким приемом можно редактировать большое количество файлов в exel? Например, нужно во всех файлах. xlsx, лежащих в одной папке проставить значение ячейки а1= 10 и закрасить в желтый цвет.

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Перебрать циклом все файлы в папке и выполнить для каждого нужные операции. Вопрос перебора файлов обсуждался неоднократно. Один из вариантов можно найти в разделе «Приемы»

 

pablo

Пользователь

Сообщений: 10
Регистрация: 11.01.2013

Я там так и не нашел нужного примера, только вот этот

http://www.planetaexcel.ru/techniques/12/45/

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

 

Z

Пользователь

Сообщений: 6111
Регистрация: 21.12.2012

Win 10, MSO 2013 SP1

#4

02.04.2013 14:40:38

Цитата
pablo пишет: … А как это сделать…

Скорей всего  — написать макрос, самому, или найти готовый, или заказать… ;)

«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

 

pablo

Пользователь

Сообщений: 10
Регистрация: 11.01.2013

Z, т.е. шаблонов работы с несколькими файлами xls не существует?

 

Z

Пользователь

Сообщений: 6111
Регистрация: 21.12.2012

Win 10, MSO 2013 SP1

Шаблонов — нет, макросы делали. В поиск — пакетная обработка файлов… ;)

«Ctrl+S» — достойное завершение ваших гениальных мыслей!.. ;)

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Вы чуть-чуть промазали со ссылкой: см. на одну выше )) Вот

это

Только вместо копирования листа — Ваши действия. Но сам процесс перебора файлов должен Вам подойти.

 

EducatedFool

Пользователь

Сообщений: 3631
Регистрация: 23.12.2012

#8

02.04.2013 18:13:29

Вот есть пример обработки файлов в цикле:

http://excelvba.ru/code/CombineFiles

Надо совсем немного поменять:

1) вместо

Код
  ' ==== переносим данные в наш файл (shb - кодовое имя листа, куда помещаем данные)
           shb.Range("a" & shb.Rows.Count).End(xlUp).Offset(1).Resize(, ra.Rows.Count).Value = _
            Application.WorksheetFunction.Transpose(ra.Value)
            ' ==== конец обработки данных из очередного файла

написать

Код
sh.Range("a1")=10
sh.Range("a1").interior.color = vbyellow

2) заменить

Код
 WB.Close False: DoEvents    ' закрываем обработанный файл без сохранения изменений

на

Код
 WB.Close TRUE: DoEvents    ' закрываем обработанный файл c сохранением изменений

3) заменить

Код
  ' открываем очередной файл в режиме «только чтение»
       Set WB = Nothing: Set WB = Workbooks.Open(Filename, False, True)

на

Код
  ' открываем очередной файл
       Set WB = Nothing: Set WB = Workbooks.Open(Filename)
 

The_Prist

Пользователь

Сообщений: 14181
Регистрация: 15.09.2012

Профессиональная разработка приложений для MS Office

#9

02.04.2013 18:48:33

Практически готовое решение:

Просмотреть все файлы в папке

Остается только заменить вписываемое в ячейку значение и добавить именение заливки.

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы…

Пакетная замена содержимого документов Word и Excel

Пользователи Microsoft Office Word и Office Excel наверняка знакомы с такой замечательной функцией как “Поиск и замена”, позволяющей быстро исправлять допущенные или найденные в тексте ошибки. Впрочем, функциями поиска и замены обладают практически все, даже самые простые текстовые редакторы.

Тут важен не сам факт наличия данной функции, а ее универсальность. Хорошо известно, каким ограниченным является функционал инструментов поиска и замены в Блокноте. В то же время Word и Excel хоть и имеют достаточно широкий набор инструментов для поиска и замены в текстовом содержимом, не поддерживают пакетную обработку документов. Этой способностью обладает Notepad++, но опять же он не поддерживает работу с форматами Microsoft Office.

Как видите, не смотря на автоматизацию, при определенных обстоятельствах поиск и замена в тексте могут оказаться весьма трудоемкими. В таком случае вам на помощь придет замечательная утилита под названием Replace Genius. Отличительной чертой этого маленького, но очень полезного и мощного приложения является его универсальность.

Благодаря богатому набору специализированных функций Replace Genius позволяет обрабатывать текстовые документы как по одному, так и в пакетном режиме в полном соответствии с вашими индивидуальными потребностями. Replace Genius поддерживается простой поиск и замена, работа с регулярными выражениями, смещение строк, изменение регистра, предпросмотр результатов в режиме реального времени и множество других функций.

Пакетная замена содержимого документов Word и Excel

Пакетная замена содержимого документов Word и Excel

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

К тому же в Replace Genius отсутствует русский язык. Одним словом, если вы не знакомы с английским языком, вам придется потратить немало времени чтобы разобраться во всех аспектах этого приложения. Приведем простейший пример пакетной замены текстовых данных. У нас есть папка с файлами в форматах doc, txt, rtf и xls.

Пакетная замена содержимого документов Word и Excel

Пакетная замена содержимого документов Word и Excel

Допустим, нам необходимо заменить слово “Windows” на “Linux”. Для этого в Replace Genius нам нужно создать пресет – шаблон, по которому утилита будет обрабатывать файлы.

Откройте программу, в левой панели переключитесь на вкладку Replace и введите в поля “Find” и “and replace with” нужные слова. Теперь давайте сохраним эту настройку в шаблон. Нажав клавишу F12, откройте менеджер пресетов, создайте в нем папку с любым удобным вам именем и нажмите “Add”. Также вы можете отредактировать уже имеющийся там шаблон Example. Затем жмем кнопку Batch и добавляем список файлов Microsoft Office.

Пакетная замена содержимого документов Word и Excel

Пакетная замена содержимого документов Word и Excel

В открывшемся опциональном окошке указываем нужный пресет, тип сохранения лучше оставить по умолчанию Save in this folder (только не забудьте указать папку, куда будут сохранены отредактированные копии) и жмем Ok. При этом откроется маленькое окошко, в котором будет обозначен список редактируемых документов.

Жмем Start и процесс пошел! Используя такие шаблоны можно за один раз редактировать множество файлов и, причем выполняя по несколько операций подряд над каждым из них. В нашем случае мы просто заменили “Windows” на “Linux”, но заодно можно выполнить еще массу других действий.

Пакетная обработка файлов. Макрос разместить в общем модуле любой книги.

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

sPath = ThisWorkbook.Path & "files2000"

Диапазоны задаются в строках

.Range("B2:B" & lRw).Value = dValue
.Range("C2:D" & lRw).ClearContents

Значение для внесения в диапазон столбца В задано константой. Можно без нее — прописать значением в строке

.Range("B2:B" & lRw).Value = 0.3

Макрос

Sub DataChange()
Dim wBook As Workbook
Dim sPath As String
Dim sFName As String
Dim lRw As Long
Const dValue As Double = 0.3
    With Application: .ScreenUpdating = False: .DisplayAlerts = False: End With
    sPath = ThisWorkbook.Path & "files2000"

    sFName = Dir(sPath & "*.xls*", vbDirectory)

    Do While sFName <> ""
        Set wBook = Workbooks.Open(Filename:=sPath & sFName)

        With wBook
            With .Worksheets(1)
                lRw = .Cells(.Rows.Count, 1).End(xlUp).Row

                If lRw > 1 Then
                    .Range("B2:B" & lRw).Value = dValue
                    .Range("C2:D" & lRw).ClearContents
                    wBook.Save
                End If
            End With

            .Close
        End With

        sFName = Dir 
    Loop

    With Application: .ScreenUpdating = True: .DisplayAlerts = True: End With
    MsgBox "OK", 64, ""
End Sub

Определение последней строки

.Cells(.Rows.Count, 1).End(xlUp).Row - последняя видимая заполненная ячейка столбца А

В обрабатываемых файлах должны быть раскрыты все строки (сняты фильтры, если есть), иначе диапазон строк может определиться неверно.

Найти нижнюю границу по размеру пользовательского диапазона (принимаем, что в строке 1 находится «шапка» таблицы):

lRw = .UsedRange.Rows.Count

Недостаток этого варианта — в диапазон попадут все форматированные строки, в том числе и без данных (такое часто встречается при неумелом копировании: заполнено 10 строк, а диапазон — на миллион).

Диапазон заполненных строк относительно ячейки:

lRw = .Range("A1").CurrentRegion.Rows.Count

При этом должна быть уверенность, что диапазон данных неразрывен (данные не разделены пустыми строками и стобцами)

Пакетная обработка файлов

t330

Дата: Среда, 06.02.2019, 17:37 |
Сообщение № 1

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 147


Репутация:

0

±

Замечаний:
20% ±


Excel 2016

Изучаю VBA по Уокенбаху Эксель 2010 профессиональное программирование на ВБА по рекомендации преподавателя с Курсов Специлаист из Бауманки…
К сожалению, в этой книжке большинство примеров даны просто как данность без подробного объяснения как и для чего работает каждая строка кода…

Сейчас ломаю голову над примером Пакетная обработка файлов:

[vba]

Код

Option Explicit

Sub BatchProcess()
          Dim FileSpec As String
          Dim i As Integer
          Dim FileName As String
          Dim FileList() As String
          Dim FoundFiles As Integer

      ‘   Указание пути и файла
10        FileSpec = ThisWorkbook.Path & «» & «text??.txt»
20        FileName = Dir(FileSpec)

                ‘   Был ли найден файл?
30        If FileName <> «» Then
40            FoundFiles = 1
50            ReDim Preserve FileList(1 To FoundFiles)
60            FileList(FoundFiles) = FileName
70        Else
80            MsgBox «Не найдены файлы, которые соответствуют » & FileSpec
90            Exit Sub
100       End If

                ‘   Получение других имен файлов
110       Do
120           FileName = Dir
130           If FileName = «» Then Exit Do
140           FoundFiles = FoundFiles + 1
150           ReDim Preserve FileList(1 To FoundFiles)
160           FileList(FoundFiles) = FileName & «*»
170       Loop

      ‘   Циклический обход и обработка файлов
180       For i = 1 To FoundFiles
190           Call ProcessFiles(FileList(i))
200       Next i
End Sub

Sub ProcessFiles(FileName As String)
      ‘   Import the file
210       Workbooks.OpenText FileName:=FileName, _
              Origin:=xlWindows, _
              StartRow:=1, _
              DataType:=xlFixedWidth, _
              FieldInfo:= _
              Array(Array(0, 1), Array(3, 1), Array(12, 1))
      ‘   Ввод итоговых формул
220       Range(«D1»).Value = «A»
230       Range(«D2»).Value = «B»
240       Range(«D3»).Value = «C»
250       Range(«E1:E3»).Formula = «=COUNTIF(B:B,D1)»
260       Range(«F1:F3»).Formula = «=SUMIF(B:B,D1,C:C)»
End Sub

[/vba]

Помогите пожалуйста разобраться.
1.При выполнении код выдает ошибку , что не найден файл Text01.txt хотя он (и другие два файла Text02 и Text03)лежит в том же каталоге, что и рабочая книга…
2.Почему, когда в строке 40 написано
[vba]

[/vba]
в строке 50 переменная FoundFiles при пошаговом Дебаге показывает значение =3
[vba]

Код

50            ReDim Preserve FileList(1 To FoundFiles)

[/vba]

Архив в файлом с макросом и текстовыми файлами во вложении.

К сообщению приложен файл:

__.rar
(18.0 Kb)

Сообщение отредактировал t330Среда, 06.02.2019, 21:35

 

Ответить

bmv98rus

Дата: Среда, 06.02.2019, 18:35 |
Сообщение № 2

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016

При выполнении код выдает ошибку , что не найден файл Text01.txt хотя он (и другие два файла Text02 и Text03)лежит в том же каталоге, что и рабочая книга…

но открыть вы пытаетесь его из текущей папки, а не из паки ThisWorkbook.Path
или менять в коде [vba]

Код

FileList(FoundFiles) = ThisWorkbook.Path & «» & FileName

[/vba]
или [vba]

Код

Workbooks.OpenText FileName:=ThisWorkbook.Path & «» & FileName

[/vba]

в строке 50 переменная FoundFiles при пошаговом Дебаге показывает значение =3

не верю, может в строке 150?


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rusЧетверг, 07.02.2019, 11:40

 

Ответить

китин

Дата: Четверг, 07.02.2019, 07:47 |
Сообщение № 3

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

Замечаний:
0% ±


Excel 2007;2010;2016

bmv98rus, Миша ну вот от кого, кого. а от тебя не ожидал. тебе тоже надо ссылку на Как оформлять сообщения?


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

bmv98rus

Дата: Четверг, 07.02.2019, 11:32 |
Сообщение № 4

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016

китин, Есть грех, накидал отправил, а при двух цитатах править уже — ад крамешный. Сейчас попытаюсь скорректировать.
Сделал все что мог :-)


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rusЧетверг, 07.02.2019, 11:41

 

Ответить

t330

Дата: Понедельник, 11.02.2019, 22:17 |
Сообщение № 5

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 147


Репутация:

0

±

Замечаний:
20% ±


Excel 2016

но открыть вы пытаетесь его из текущей папки,

Не совсем понял, что значит открыть я эти текстовые файлы пытаюсь из «текущей папки» ? Из какой «текущей папки»?

не верю, может в строке 150?

Да, тут верно, моя ошибка.

 

Ответить

boa

Дата: Вторник, 12.02.2019, 10:19 |
Сообщение № 6

Группа: Друзья

Ранг: Ветеран

Сообщений: 543


Репутация:

166

±

Замечаний:
0% ±


2013, 365

t330,

Из какой «текущей папки»?

вот она

К сообщению приложен файл:

2538729.jpg
(47.4 Kb)


 

Ответить

bmv98rus

Дата: Вторник, 12.02.2019, 10:56 |
Сообщение № 7

Группа: Друзья

Ранг: Участник клуба

Сообщений: 4009


Репутация:

760

±

Замечаний:
0% ±


Excel 2013/2016

boa, не совсем так. Это папка по молчанию, но она может быть изменена во время работы при открытии файла например, но направление верное.
t330,
? curdir — покажет текущую.


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rusВторник, 12.02.2019, 19:39

 

Ответить

t330

Дата: Четверг, 14.02.2019, 22:17 |
Сообщение № 8

Группа: Проверенные

Ранг: Форумчанин

Сообщений: 147


Репутация:

0

±

Замечаний:
20% ±


Excel 2016

Всем огромное спасибо!

Сообщение отредактировал t330Четверг, 14.02.2019, 22:18

 

Ответить

Студворк — интернет-сервис помощи студентам

Здравствуйте!

Хотел бы попросить помочь мне в написании макроса, самому это сделать ума не хватает.

Есть множество файлов эксель, которые должны пройти через фильтр (файл эксель) и потом экспортироваться в .PDF.
Подробнее о процессе:
1 – Открытие диалогового окна для выбора папки, из которой будут браться файлы для обработки (если можно сделать так, чтобы и сразу можно было бы выбрать папку для сохранения/экспорта — то было бы супер)
2 – Обработка. Собственно сама обработка выглядит следующим образом:
2.1 — очистка листа «report(csv)»
2.2 — импорт сюда же файла из выбранной папки
2.3 — обновление всех данных книги
3 – Экспорт. Экспортируется лист «Výstup». Было бы вообще замечательно, если бы названия экспортирующихся файлов содержали значение ячейки B4 из листа «Výstup» + пробел со словом «FactOrEasy», а в случае, когда эта ячейка пустая — сохранить под порядковым номером + Výstup

Буду вам очень благодарен!

Like this post? Please share to your friends:
  • Excel очистить ячейку от текста
  • Excel очистить ячейки по условию excel
  • Excel очистить ячейки от границ
  • Excel очистить форматирование таблицы в excel
  • Excel очистить фильтры горячие клавиши