Импорт определенных столбцов из файла csv - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь импортировать файл csv и определенные столбцы для Excel, а затем разделяю данные в соответствии с определенным столбцом

Я немного новичок в программировании VBA и знаю только базовое c программирование, К сожалению, коды, которые я пробовал, не дали желаемого результата.

Я включил ссылку на файл csv, который хотел бы импортировать в Excel: или снимок экрана:

enter image description here

This file is a stock list exported from the accounting software we need to try and sort this list for stock take purposes, the following needs to be adjusted to the csv file:

  1. The file needs to be imported to excel and only certain columns need to be imported which are

Column A: Code

Column B: description

Column C: Category

Column AA: Text User Field 1 (which in the accounting software it is the Bin number, this is important as the stock take is usually done according to the bin number of the parts)

Column AP: Quantity

The export data will always be the same columns and headings

  1. Затем файл excel необходимо разделить в соответствии со столбцом AA: текстовое поле пользователя 1

  2. Указанные c данные в столбце AA: текстовое поле пользователя 1, «SO0000» необходимо отфильтровать, чтобы включить только те элементы (столбцы A и B), которые не равны нулю (столбец AP: количество), то есть все элементы (столбец A: код), которые имеют нулевые количества (столбец AP: количество) и имеют "SO0000" (столбец AA: текстовое поле пользователя 1) следует удалить из списка.

Я думал об использовании кнопок на листе 1, где они названы:

Кнопка импорта товаров : в импортировать файл csv на лист 2 файла Excel.

Кнопка разделения данных : чтобы разделить элементы в соответствии с столбцом AA: текстовое поле пользователя 1, было бы здорово, если бы каждый рабочий лист можно назвать в соответствии с данными в столбце AA: текстовое поле пользователя 1

Я был бы очень признателен, если бы кто-нибудь помог мне с программированием VBA для этого.

1 Ответ

2 голосов
/ 13 июля 2020
Sub CsvFile_Read()
    Dim vR(), vDB
    Dim WbCSV As Workbook, Wb As Workbook
    Dim Ws As Worksheet
    Dim i As Long, n As Integer
    Dim vFile As Variant

    
    Application.ScreenUpdating = False
    Set Wb = ThisWorkbook
    Set Ws = Wb.Sheets(2)
    
    'Select a text file through the file dialog.
    'Get the path and file name of the selected file to the variable.
    vFile = Application.GetOpenFilename("ExcelFile *.txt,*.txt;*.csv", _
       Title:="Select CSV file", MultiSelect:=False)
       
    'If you don't select file, exit sub.
    If TypeName(vFile) = "Boolean" Then Exit Sub
    
    'The selected text file is imported into an Excel file. format:2 is csv, format:1 is tab
    Set WbCSV = Workbooks.Open(Filename:=vFile, Format:=2)
    
    'Bring all the contents of the sheet into an array.
    With WbCSV.Sheets(1)
        vDB = .UsedRange
        For i = 1 To UBound(vDB, 1)
            'AA column = 27, AP column = 42
            If vDB(i, 27) = "SO0000" And vDB(i, 42) = 0 Then
            Else
                'Get the contents corresponding to the dynamic array. Bring the matrix to the inverted state.
                n = n + 1
                ReDim Preserve vR(1 To 5, 1 To n)
                vR(1, n) = vDB(i, 1)
                vR(2, n) = vDB(i, 2)
                vR(3, n) = vDB(i, 3)
                vR(4, n) = vDB(i, 27)
                vR(5, n) = vDB(i, 42)
            End If
        Next i
    End With
    'Colse the text file
    WbCSV.Close (0)
        
    'The dynamic array is recorded in sheet2.Bring the row to the inverted state.
    With Ws
        .UsedRange.Clear
        .Range("a1").Resize(n, 5).Value = WorksheetFunction.Transpose(vR)
    End With
    Application.ScreenUpdating = True
End Sub
...