【问题标题】:Excel - Extracting data from multiple csv files conditionallyExcel - 有条件地从多个 csv 文件中提取数据
【发布时间】:2018-07-02 02:01:38
【问题描述】:

我有许多 .csv 文件,其中的数据格式为:

Time        data1       data2      data3
0:00:00     1.22        1.23       432
0:01:00     1.52        1.13       432
0:02:00     1.12        1.15       431

但是,一些 csv 文件已跳过时间段,例如:

Time        data1       data2      data3
0:00:00     1.22        1.23       432
0:03:00     1.71        1.43       431
0:04:00     1.79        1.54       432

数据来自定期收集数据的机器监控系统。当它关闭或出现问题时,它会跳过某些时间段。我想从所有 csv 文件中提取特定行,例如 data2 到 xlsx 文件中,同时将跳过的时隙保留为空单元格,例如:

Time        data2       data2      
0:00:00     1.23        1.23       
0:01:00     1.13                   
0:02:00     1.15                   
0:03:00     1.22        1.43       
0:04:00     1.71        1.54       

我不熟悉 excel 宏/VBA,但希望能提供有关如何解决此问题的任何建议,谢谢!

【问题讨论】:

  • 这些 csv 文件是否假定已经在工作簿中打开,或者我们应该为您编写代码?
  • @Jeeped 对不起,我不太明白你的问题,你能再澄清一下吗?
  • 不用担心。可以这么说,我不认为我们意见一致。
  • 如果您可以向我们提出有关您试图用您的代码解决的问题的具体问题,我们可以为您提供最好的帮助。因此,在您的情况下,首先研究如何使用 VBA 宏打开 CSV 文件,并将其解析为不同的变量(也许构建一个数组)。接下来,您将获取已读取的数据并将这些值保存到电子表格中的一系列单元格中。之后,您可能正在排序(可能按时间戳)。所以一步一步来,然后回来问具体问题。
  • @PeterT 好的,谢谢,会调查的,非常感谢

标签: excel vba csv


【解决方案1】:

您可以像这样从 CSV 读取特定内容。

Sub sbADO()
Dim sSQLQry As String
Dim ReturnArray

Dim Conn As New ADODB.Connection
Dim mrs As New ADODB.Recordset

Dim DBPath As String, sconnect As String

DBPath = "C:\Users\Excel\Desktop\"

sconnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & DBPath & ";Extended Properties='text;HDR=YES;FMT=Delimited'"

Conn.Open sconnect
    sSQLSting = "SELECT * From CSV1.csv WHERE ID = 2"
    mrs.Open sSQLSting, Conn
        ActiveSheet.Range("A2").CopyFromRecordset mrs
    'Close Recordset
    mrs.Close

Conn.Close

End Sub

或者,合并所有 CSV 文件中的所有日期,并删除您不需要/不需要的内容。

Sub AnalysisMerger2()
    Dim WSA As Worksheet
    Dim bookList As Workbook
    Dim SelectedFiles As Variant
    Dim NFile As Long
    Dim FileName As String
    Dim Ws As Worksheet, vDB As Variant, rngT As Range
    Dim vFn, myFn As String

    Application.ScreenUpdating = False

    SelectedFiles = Application.GetOpenFilename(filefilter:="Excel Files (*.csv*), *.csv*", MultiSelect:=True)
    If IsEmpty(SelectedFiles) Then Exit Sub

    For NFile = LBound(SelectedFiles) To UBound(SelectedFiles)
        FileName = SelectedFiles(NFile)
        vFn = Split(FileName, "\")
        myFn = vFn(UBound(vFn))
        myFn = Replace(myFn, ".csv", "")
        Set bookList = Workbooks.Open(FileName, Format:=2)
        Set WSA = bookList.Sheets(1)
        vDB = WSA.UsedRange
        bookList.Close (0)
        Set Ws = Sheets.Add(after:=Sheets(Sheets.Count))
        ActiveSheet.Name = myFn
        Ws.Range("a1").Resize(UBound(vDB, 1), UBound(vDB, 2)) = vDB
    Next
    Application.ScreenUpdating = True

End Sub

【讨论】:

    猜你喜欢
    • 2022-09-23
    • 2013-08-07
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多