Как извлечь отфильтрованные данные из Excel?

Вопрос или проблема

Я хочу сохранить в файл (CSV или простой текстовый файл) выборку отфильтрованных ячеек.

Если я пробую свой код или другой код, он также берет нефильтрованные ячейки.

Это возможно?

Sub EstraiTabellaInFileTesto()
Dim ws As Worksheet
Dim rng As Range
Dim cell As Range
Dim testo As String
Dim percorsoFile As String
Dim FSO As Object
Dim fileTesto As Object

' Установите активный лист
Set ws = ActiveSheet

' Попросите пользователя выбрать диапазон
On Error Resume Next
Set rng = Application.InputBox("Выберите диапазон ячеек для экспорта:", Type:=8)
On Error GoTo 0

If rng Is Nothing Then
    MsgBox "Операция отменена.", vbExclamation
    Exit Sub
End If

' Попросите путь к текстовому файлу
percorsoFile = Application.GetSaveAsFilename(FileFilter:="Текстовые файлы (*.txt), *.txt")
If percorsoFile = "Falso" Then
    MsgBox "Операция отменена.", vbExclamation
    Exit Sub
End If

' Создайте текст для экспорта
testo = ""
For Each cell In rng
    If Not IsError(cell) Then
      testo = testo & cell.Value & vbTab
    End If
    If cell.Column = rng.Columns(rng.Columns.Count).Column Then
        testo = testo & vbCrLf
    End If
Next cell

' Запишите текст в файл
Set FSO = CreateObject("Scripting.FileSystemObject")
Set fileTesto = FSO.CreateTextFile(percorsoFile, True)

fileTesto.Write testo
fileTesto.Close

MsgBox "Экспорт успешно завершен!", vbInformation

End Sub

Извините за итальянский текст в моем коде.

Пока

Ответ или решение

Для того чтобы извлечь отфильтрованные данные из Excel и сохранить их в файл (CSV или простой текстовый файл), важно понять, как правильно работать с фильтрованными данными в Excel с использованием VBA (Visual Basic for Applications). Вы сталкиваетесь с проблемой, что ваш код сохраняет значения всех ячеек, а не только отфильтрованных. Давайте рассмотрим, как можно это исправить и достичь вашей цели.

Теория

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

Пример

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

Sub EstraiTabellaInFileTestoFiltrata()
    Dim ws As Worksheet
    Dim rng As Range
    Dim rngVisible As Range
    Dim cell As Range
    Dim testo As String
    Dim percorsoFile As String
    Dim FSO As Object
    Dim fileTesto As Object

    ' Установите активный лист
    Set ws = ActiveSheet

    ' Запросить у пользователя выбор диапазона
    On Error Resume Next
    Set rng = Application.InputBox("Seleziona l'intervallo di celle da esportare:", Type:=8)
    On Error GoTo 0

    If rng Is Nothing Then
        MsgBox "Operazione annullata.", vbExclamation
        Exit Sub
    End If

    ' Получить только видимые ячейки из выделенного диапазона
    Set rngVisible = rng.SpecialCells(xlCellTypeVisible)

    ' Запросить путь к файлу
    percorsoFile = Application.GetSaveAsFilename(FileFilter:="File di testo (*.txt), *.txt")
    If percorsoFile = "Falso" Then
        MsgBox "Operazione annullata.", vbExclamation
        Exit Sub
    End If

    ' Создать текст для экспорта
    testo = ""
    For Each cell In rngVisible
        If Not IsError(cell) Then
            testo = testo & cell.Value & vbTab
        End If
        If cell.Column = rngVisible.Columns(rngVisible.Columns.Count).Column Then
            testo = testo & vbCrLf
        End If
    Next cell

    ' Записать текст в файл
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set fileTesto = FSO.CreateTextFile(percorsoFile, True)

    fileTesto.Write testo
    fileTesto.Close

    MsgBox "Esportazione completata con successo!", vbInformation
End Sub

Применение

  1. Рабочий лист и диапазон: Убедитесь, что вы находитесь на нужном листе и у вас установлен корректный диапазон ячеек для экспорта. В данном случае вы используете InputBox для выбора нужного диапазона.

  2. Фильтрация видимых ячеек: Ключевым моментом является использование свойства SpecialCells(xlCellTypeVisible), которое позволяет выделить только видимые ячейки из выбранного диапазона (rng). Это помогает обойти ограничение VBA, который по умолчанию обрабатывает все ячейки, независимо от того, скрыты они или нет.

  3. Запись в файл: Вы используете FileSystemObject для создания и записи данных в текстовый файл. Убедитесь, что у вас корректно заполнен путь к файлу и он имеет нужное расширение (например, .txt или .csv в зависимости от ваших требований).

  4. Обработка ошибок: Код включает обработку ошибок для ввода диапазона и пути сохранения файла. Это важно для обеспечения работоспособности и устойчивости скрипта.

  5. Проверка и отладка: Перед запуском макроса убедитесь, что ваши данные в Excel действительно отфильтрованы согласно необходимым критериям. Это гарантирует, что видимые данные будут извлечены и сохранены согласно вашим ожиданиям.

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

Оцените материал
Добавить комментарий

Капча загружается...