VBA - сохранить первое значение каждой строки из CSV в переменную и перейти к указанному листу c - PullRequest
0 голосов
/ 30 апреля 2020

Я относительно новичок в VBA, я хотел сделать следующее, если это вообще возможно, в VBA

  1. Указывать на файл CSV
  2. L oop через каждую строку
  3. Используя первое значение каждой строки - сохраните оставшуюся часть строки в указанном c рабочем листе

Мне удалось выполнить пункты 1 и 2 Тем не менее, я борюсь за точку 3

Например: мой CSV-файл выглядит примерно так:

A00,5675,TGI,6897
R88,7647,35968,35864
R88,5968,34531,44566
Z11,2245,FGH,YIU

Я хотел бы прочитать первое значение каждой строки, в этом case, A00, R88, R88 и Z11.

Затем запишите эту указанную строку c в соответствующий лист на основе значения.

Например, строка A00 будет записана в рабочий лист с именем A00 и т. д.

Я получил это далеко для справки:

Sub ImportFile()
Dim ws As Worksheet, strFile As String

strFile = Application.GetOpenFilename("Text Files (*.csv),*.csv", , "Please select text file...") 'Select file

'If first value = A00 - write to ActiveWorkbook.Sheets("A00")
'If first value = Z99 - write to ActiveWorkbook.Sheets("Z99")

Set ws = ActiveWorkbook.Sheets("A00") 'Export to this worksheet

With ws.QueryTables.Add(Connection:="TEXT;" & strFile, Destination:=ws.Range("A1"))
     .TextFileParseType = xlDelimited
     .TextFileCommaDelimiter = True
     .Refresh
End With
End Sub

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 30 апреля 2020

Я собрал некоторый код VBA, который, кажется, работает так, как вы хотите. Он считывает файл данных построчно, разбивает эти данные на массив, используя «,» в качестве разделителя, устанавливает рабочий лист на первый элемент массива, а затем помещает остальные элементы в ячейки на первом пустом месте. line.


Sub sGetData()
    On Error GoTo E_Handle
    Dim ws As Worksheet
    Dim lngLastRow As Long
    Dim strFile As String
    Dim intFile As Integer
    Dim strInput As String
    Dim aData() As String
    Dim lngLoop1 As Long
    intFile = FreeFile
    strFile = "J:\downloads\test3.txt"
    Open strFile For Input As intFile
    Do
        Line Input #intFile, strInput
        aData() = Split(strInput, ",")
        Set ws = Worksheets(aData(LBound(aData)))
        lngLastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        For lngLoop1 = LBound(aData) + 1 To UBound(aData)
            ws.Cells(lngLastRow + 1, lngLoop1) = aData(lngLoop1)
        Next lngLoop1
    Loop Until EOF(intFile)
sExit:
    On Error Resume Next
    Close #intFile
    Exit Sub
E_Handle:
    MsgBox Err.Description & vbCrLf & vbCrLf & "sGetData", vbOKOnly + vbCritical, "Error: " & Err.Number
    Resume sExit
End Sub

Вероятно, это может быть связано с небольшим «пуленепробиваемым», чтобы иметь дело с такими вещами, как лист, не существующий и т. д., но это должно дать вам представление.

С уважением,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...