Excel VBA Экспорт данных в формате CSV
У меня есть файл Excel с несколькими листами. Мне нужен макрос, который делает следующее.
- Выберите лист с указанным именем листа.
- Выберите все строки на листе, где длина данных первого столбца больше единицы
- Экспортируйте выбранные данные в виде файла CSV в указанный каталог.
У меня есть базовое понимание Excel VBA, и любая помощь будет оценена.
Спасибо,
2 ответа
Это должно приблизить вас к тому месту, где вы хотите быть.
Public Sub SaveWorksheetsAsCsv()
Dim xWs As Worksheet
Dim xDir As String
Dim folder As FileDialog
Set folder = Application.FileDialog(msoFileDialogFolderPicker)
If folder.Show <> -1 Then Exit Sub
xDir = folder.SelectedItems(1)
For Each xWs In Application.ActiveWorkbook.Worksheets
xWs.SaveAs xDir & "\" & xWs.Name, xlCSV
Next
End Sub
Я предоставлю вам пример кода. Поскольку мы здесь не для написания всего кода, вашей задачей будет углубиться и собрать код вместе.
1. Если вы хотите выбрать лист, вам нужно позвонить Select
метод листового объекта. Существует несколько способов ссылки на листы, но наиболее распространенным (IMO) является Sheets("Name of the sheet").Select
,
2а. Для выбора ячеек процедура такая же, но вместо листов вы должны использовать объект ячейки, то есть: Cells(r, c).Select
(опять же, это не единственный способ ссылки на ячейки, еще один: Range("A1").Select
), где r
а также c
целые числа, представляющие строку и столбец соответственно. Как правило, вам нужно позвонить Select
на объекте Range
тип.
РЕЗЮМЕ
До сих пор я рассмотрел, как выбрать определенный объект в рабочей книге, но это не оптимальный способ сделать это. Если вам не нужно явно выбирать что-то, я бы этого не делал. Вместо этого вы можете получить значение определенной ячейки на определенном листе, используя следующий синтаксис:
Sheets("SheetName").Cells(r, c).Value
Это объединяет предыдущие части кода, который обращается к значению ячейки в строке r
и колонка c
в листе имени SheetName
без выбора ничего. Таким образом, вы можете установить или получить значение.
2b. Если вы хотите проверить что-то, например условие, используйте If
заявление. В вашем случае это будет выглядеть так:
If Len( Sheets("SheetName").Cells(r, c).Value ) > 1 Then
'do something if it's true
Else
'do something if it's false
End If
3. Вам нужно создать некоторую строковую переменную, что-то вроде Dim content As String
где вы добавите все данные из ячеек, которые прошли ваш тест. В конце концов, вы можете записать эту текстовую переменную в файл. Это может быть полезно: Как создать и записать в текстовый файл с помощью VBA
Кроме того, вам нужно пройтись по всем строкам, поэтому вам нужны операторы цикла, перейдите сюда для получения более подробной информации: Циклы в VBA
Я надеюсь, что это даст вам некоторое представление о том, что делать и как делать:)