Страницы: 1
RSS
Массовая замена данных или удаление строк из нескольких файлов
 
Добрый день!
Возникла необходимость редактировать сотни файлов.
1. Например, необходимо в каждом из 100 файлов удалить строку , в ячейке которой, соответствующей столбцу А, встречается определенное значение.
2. Например, необходимо в каждом из 100 файлов заменить значение ячейки, аналогично ctrl+H, но во всех файлах сразу.

Есть возможность реализовать это в excel 2010?
Или есть какой то стандартный функционал? или спец программы?
 
сразу - это только если каждый файл на отдельном компе и вы найдете 100 человек, которые по команде одновременно произведут замену

а так, как обычно, файл за файлом.. можно написать макрос, который это сделает за вас, но все же не сразу, а поочередно во всех файлах
Живи и дай жить..
 
Цитата
Слэн пишет: но все же не сразу, а поочередно во всех файлах
Да, это я понимаю. Так и нужно.
Но учитывая скорость вычслений, можно сказать, что макрос заменит все одним разом))))
 
У меня есть вот такой макрос удаления строк по критерию в ячейке:
Код
Sub Del_SubStr()
    Dim sSubStr As String 'искомое слово или фраза(может быть указанием на ячейку)
    Dim lCol As Long 'номер столбца с просматриваемыми значениями
    Dim lLastRow As Long, li As Long
 
    sSubStr = InputBox("Укажите значение, которое необходимо найти в строке", "Запрос параметра", "")
    lCol = Val(InputBox("Укажите номер столбца, в котором искать указанное значение", "Запрос параметра", 1))
    If lCol = 0 Then Exit Sub
 
    lLastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
 
    Application.ScreenUpdating = 0
    For li = lLastRow To 1 Step -1
        If Cstr(Cells(li, lCol)) = sSubStr Then Rows(li).Delete
    Next li
    Application.ScreenUpdating = 1
End Sub


Но он работает только на одном файле...
 
закройте тему, пож.!
 
А как решился вопрос?
Тоже надо удалить первую строку из множества файлов (подчистить шапку)
 
Цитата
Зёма Родимый написал:
удалить первую строку из множества файлов
Код
Sub Main()
    Dim arr As Variant
    arr = GetFileDialog()
    If IsArray(arr) Then
        Dim vFile As Variant
        For Each vFile In arr
            JobFile vFile
        Next
    End If
End Sub
'
Sub JobFile(ByVal vFile As String)
    Dim wb As Workbook
    Set wb = Workbooks.Open(vFile)
    With wb
        With .Sheets(1)
            .Rows(1).Delete
        End With
    End With
    wb.Close True
End Sub
'
Function GetFileDialog() As Variant
    Dim arr As Variant
    Dim oFD As FileDialog
    Dim lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
        .AllowMultiSelect = True
        .Title = "Выбрать фильтр" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xlsb;*.xlsm;*.xlsx;*.xls", 1 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = ThisWorkbook.Path 'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
            'msoFileDialogViewDetails
            'msoFileDialogViewLargeIcons
            'msoFileDialogViewList
            'msoFileDialogViewPreview
            'msoFileDialogViewProperties
            'msoFileDialogViewSmallIcons
            'msoFileDialogViewThumbnail
            'msoFileDialogViewTiles
            'msoFileDialogViewWebView
        If oFD.Show = 0 Then
        Else
            ReDim arr(0 To .SelectedItems.Count - 1)
            'цикл по коллекции выбранных в диалоге файлов
            For lf = 1 To .SelectedItems.Count
                arr(lf - (1 - LBound(arr, 1))) = .SelectedItems(lf)
            Next
        End If
    End With
    
    GetFileDialog = arr
End Function
 
Огромнейшее спасибо!
3000 файлов обработано менее чем за 5 минут!
 
Появился связанный вопрос. Чтобы не плодить тему, продолжу тут.
Собственно вопрос по выше приведённому макросу.
Можете подсказать, какая часть этого кода отвечает за открытие файла и за его закрытие после обработки.
Собственно захотелось на его основе решить задачу массового переименования файлов, путем добавления к имени файла порядкового номера.
Т.е. открыл файл, выбрал "сохранить как", прилепил к имени файла очередной порядковый номер и сохранил файл под новым именем. Пусть даже и в ту же папку.
 
Вот здесь практически та же задача:
Как сменить формат сразу для нескольких файлов Excel
А в вышеприведенном коде вот эта процедура отвечает за открытие и закрытие файлов:
Код
Sub JobFile(ByVal vFile As String)    Dim wb As Workbook
    Set wb = Workbooks.Open(vFile)
    With wb
        With .Sheets(1)
            .Rows(1).Delete
        End With
    End With
    wb.Close True
End Sub
вроде это вполне заметно по коду(Workbooks.Open - открытие, wb.Close True - закрытие).
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
И если хотите сохранить под другими именами
Код
Sub Main()
    Dim arr As Variant
    arr = GetFileDialog()
    
    Dim i As Variant
    i = InputBox("Введите первый индекс", , 1)
    
    If i Then
        If IsArray(arr) Then
            Dim vFile As Variant
            For Each vFile In arr
                JobFile vFile, i
            Next
        End If
    End If
End Sub
'
Sub JobFile(ByVal vFile As String, i As Variant)
    Dim wb As Workbook
    Set wb = Workbooks.Open(vFile)
    With wb
        With .Sheets(1)
            .Rows(1).Delete
        End With
    End With
    wb.SaveCopyAs wb.Path & "\" & Format(i, "0000") & " " & wb.Name
    i = i + 1
    wb.Close True
End Sub
'
Function GetFileDialog() As Variant
    Dim arr As Variant
    Dim oFD As FileDialog
    Dim lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    With oFD 'используем короткое обращение к объекту
        .AllowMultiSelect = True
        .Title = "Выбрать файлы" 'заголовок окна диалога
        .Filters.Clear 'очищаем установленные ранее типы файлов
        .Filters.Add "Excel files", "*.xlsb;*.xlsm;*.xlsx;*.xls", 1 'добавляем возможность выбора текстовых файлов
        .FilterIndex = 1 'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)
        .InitialFileName = ThisWorkbook.Path 'назначаем папку отображения и имя файла по умолчанию
        .InitialView = msoFileDialogViewDetails 'вид диалогового окна(доступно 9 вариантов)
            'msoFileDialogViewDetails
            'msoFileDialogViewLargeIcons
            'msoFileDialogViewList
            'msoFileDialogViewPreview
            'msoFileDialogViewProperties
            'msoFileDialogViewSmallIcons
            'msoFileDialogViewThumbnail
            'msoFileDialogViewTiles
            'msoFileDialogViewWebView
        If oFD.Show = 0 Then
        Else
            ReDim arr(0 To .SelectedItems.Count - 1)
            'цикл по коллекции выбранных в диалоге файлов
            For lf = 1 To .SelectedItems.Count
                arr(lf - (1 - LBound(arr, 1))) = .SelectedItems(lf)
            Next
        End If
    End With
     
    GetFileDialog = arr
End Function
 
Добрый день! Надеюсь еще тема жива! Можете помочь, надо чтоб по файлам проходился макрос и удалял строки где встречается определенное значение. Не могу сообразить как это сделать. Заранее спасибо!  
 
Цитата
написал:
Цитата
Зёма Родимый написал:
удалить первую строку из множества файлов
 
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31  32  33  34  35  36  37  38  39  40  41  42  43  44  45  46  47  48  49  50  51  52  53  54  55  56  57      Sub   Main()          Dim   arr   As   Variant          arr = GetFileDialog()          If   IsArray(arr)   Then              Dim   vFile   As   Variant              For   Each   vFile   In   arr                  JobFile vFile              Next          End   If    End   Sub    '    Sub   JobFile(  ByVal   vFile   As   String  )          Dim   wb   As   Workbook          Set   wb = Workbooks.Open(vFile)          With   wb              With   .Sheets(1)                  .Rows(1).Delete              End   With          End   With          wb.Close   True    End   Sub    '    Function   GetFileDialog()   As   Variant          Dim   arr   As   Variant          Dim   oFD   As   FileDialog          Dim   lf   As   Long          'назначаем переменной ссылку на экземпляр диалога          Set   oFD = Application.FileDialog(msoFileDialogFilePicker)          With   oFD   'используем короткое обращение к объекту              .AllowMultiSelect =   True              .Title =   "Выбрать фильтр"   'заголовок окна диалога              .Filters.Clear   'очищаем установленные ранее типы файлов              .Filters.Add   "Excel files"  ,   "*.xlsb;*.xlsm;*.xlsx;*.xls"  , 1   'добавляем возможность выбора текстовых файлов              .FilterIndex = 1   'устанавливаем тип файлов по умолчанию - Text files(Текстовые файлы)              .InitialFileName = ThisWorkbook.Path   'назначаем папку отображения и имя файла по умолчанию              .InitialView = msoFileDialogViewDetails   'вид диалогового окна(доступно 9 вариантов)                  'msoFileDialogViewDetails                  'msoFileDialogViewLargeIcons                  'msoFileDialogViewList                  'msoFileDialogViewPreview                  'msoFileDialogViewProperties                  'msoFileDialogViewSmallIcons                  'msoFileDialogViewThumbnail                  'msoFileDialogViewTiles                  'msoFileDialogViewWebView              If   oFD.Show = 0   Then              Else                  ReDim   arr(0   To   .SelectedItems.Count - 1)                  'цикл по коллекции выбранных в диалоге файлов                  For   lf = 1   To   .SelectedItems.Count                      arr(lf - (1 - LBound(arr, 1))) = .SelectedItems(lf)                  Next              End   If          End   With                   GetFileDialog = arr    End   Function   
 
То есть вот это, но вместо первой строки из файла из таблицы проходил определенный столбец, искал в нем и удалял эти строки. Нужно на множестве файлов это сделать. Заранее спасибо!  
Страницы: 1
Наверх