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

Вход

Регистрация

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

 

= Мир MS Excel/Очистить ячейку - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Очистить ячейку
Anubis13 Дата: Суббота, 15.10.2022, 10:46 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 1
Репутация: 0 ±
Замечаний: 20% ±

Добрый день.
Подскажите, как можно через VBA очистить ячейки (не сдвигать остальной текст), которые не содержат <name>, <desc>, </name>, </desc>. Можно конечно использовать фильтр по НЕ СОДЕРЖИТ, но очень много файлов и столбцов (и выбрать можно только 2 значения)
Примем и оригинальный фаил


Сообщение отредактировал Anubis13 - Суббота, 15.10.2022, 10:58
 
Ответить
СообщениеДобрый день.
Подскажите, как можно через VBA очистить ячейки (не сдвигать остальной текст), которые не содержат <name>, <desc>, </name>, </desc>. Можно конечно использовать фильтр по НЕ СОДЕРЖИТ, но очень много файлов и столбцов (и выбрать можно только 2 значения)
Примем и оригинальный фаил

Автор - Anubis13
Дата добавления - 15.10.2022 в 10:46
msi2102 Дата: Понедельник, 17.10.2022, 10:18 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 415
Репутация: 129 ±
Замечаний: 0% ±

Excel 2007
Попробуйте так:
[vba]
Код
Sub Clear_1()
    Dim sFolder As String, sFiles As String, wb As Workbook, rng As Range, rc As Range, ws As Worksheet
    Set Re = CreateObject("VBScript.RegExp")
    Re.IgnoreCase = True:    Re.Pattern = "<(/?)(?:name|desc)>"
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        Set wb = Application.Workbooks.Open(sFolder & sFiles)
        For Each ws In Worksheets     ' Если не нужно удалять на всех листах, то удалите или закомментируйте эту строку
            For Each rc In ws.UsedRange.SpecialCells(xlCellTypeConstants)     ' Если не нужно удалять на всех листах, то закомментируйте эту строку и раскомментируйте следующую
'            For Each rc In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)     ' Будет удалять только на активном листе
                If Not Re.Test(rc.Value) Then
                    If rng Is Nothing Then Set rng = rc Else Set rng = Union(rng, rc)
                End If
            Next rc
            If Not rng Is Nothing Then rng.Clear
            Set rng = Nothing
        Next ws     'Если не нужно удалять на всех листах, то удалите или закомментируйте эту строку
        wb.Close True
        sFiles = Dir
    Loop
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub
[/vba]
Будет очищать ячейки в выбранной папке из всех экселевских файлов
К сообщению приложен файл: 6743625.xlsm (18.1 Kb)


Сообщение отредактировал msi2102 - Понедельник, 17.10.2022, 11:08
 
Ответить
СообщениеПопробуйте так:
[vba]
Код
Sub Clear_1()
    Dim sFolder As String, sFiles As String, wb As Workbook, rng As Range, rc As Range, ws As Worksheet
    Set Re = CreateObject("VBScript.RegExp")
    Re.IgnoreCase = True:    Re.Pattern = "<(/?)(?:name|desc)>"
    With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = False Then Exit Sub
        sFolder = .SelectedItems(1)
    End With
    sFolder = sFolder & IIf(Right(sFolder, 1) = Application.PathSeparator, "", Application.PathSeparator)
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    sFiles = Dir(sFolder & "*.xls*")
    Do While sFiles <> ""
        Set wb = Application.Workbooks.Open(sFolder & sFiles)
        For Each ws In Worksheets     ' Если не нужно удалять на всех листах, то удалите или закомментируйте эту строку
            For Each rc In ws.UsedRange.SpecialCells(xlCellTypeConstants)     ' Если не нужно удалять на всех листах, то закомментируйте эту строку и раскомментируйте следующую
'            For Each rc In ActiveSheet.UsedRange.SpecialCells(xlCellTypeConstants)     ' Будет удалять только на активном листе
                If Not Re.Test(rc.Value) Then
                    If rng Is Nothing Then Set rng = rc Else Set rng = Union(rng, rc)
                End If
            Next rc
            If Not rng Is Nothing Then rng.Clear
            Set rng = Nothing
        Next ws     'Если не нужно удалять на всех листах, то удалите или закомментируйте эту строку
        wb.Close True
        sFiles = Dir
    Loop
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
End Sub
[/vba]
Будет очищать ячейки в выбранной папке из всех экселевских файлов

Автор - msi2102
Дата добавления - 17.10.2022 в 10:18
  • Страница 1 из 1
  • 1
Поиск:

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