VBA批量读取csv数据到excel表格

本文介绍了如何使用VBA在Excel中处理CSV文件,包括读取文件、利用Split函数拆分字符串、将数据存储在二维数组中,并将数据写入工作表,同时展示了数据透视表的使用方法。
摘要由CSDN通过智能技术生成

VBA在处理数据时会碰到需要处理csv文档数据的情况,这种情况与处理txt文档类似,都需要去读取文本,然后获取其中的字符串,然后将满足要求的字符串通过数组或者循坏的方式写入excel表格中,然后再进一步处理。

下述代码就是读取csv文档并将数据写入到excel工作表的示例,具体实现方法如下:

Sub Dat_anl()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'这部分代码是定义工作表名称,并清除指定范围内容
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    Application.ScreenUpdating = False   '禁止屏幕更新
    Datatfile = ThisWorkbook.Name

    Set shR = Workbooks(Datatfile).Sheets("Raw data")  '定义worksheet名称
    Set shM = Workbooks(Datatfile).Sheets("My data")
    Set shF = Workbooks(Datatfile).Sheets("Fly data")
    Set shD = Workbooks(Datatfile).Sheets("Delta data")
    Set shS = Workbooks(Datatfile).Sheets("Start sheet")
    Set shPivot = Workbooks(Datatfile).Sheets("Pivot")
    
    shS.Range("F6:F11").ClearContents   '清除指定range的内容
    shD.Range("A2:W160000").ClearContents
    shF.Range("A2:U160000").ClearContents
    shM.Range("A2:U160000").ClearContents
    shR.Range("A2:S160000").ClearContents
    
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'这部分代码是打开csv文件,并利用split函数拆分字符串
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''     
    shS.Select
    FilePath = "C:\Users\Desktop\Measurement data\"
    ChDrive "C"
    ChDir FilePath
    Dim fso As Object, sFile As Object, blnExist As Boolean
    Dim FileName As String, LineText As Variant, i As Integer, iCol As Integer
    Const ForReading = 1
    
    Set fso = CreateObject("Scripting.FileSystemObject")    '创建FileSystemObject对象
    Openfilename = Application.GetOpenFilename("raw files (*.csv), *.csv")   '打开*.csv文件
    blnExist = fso.FileExists(Openfilename) '判断文件是否存在,如果不存在,则退出过程
    If Not blnExist Then MsgBox "Please Open .CSV File !": Exit Sub
    Set sFile = fso.OpenTextFile(Openfilename, ForReading)  '创建并打开名为sFile的TextStream对象
    
    i = 0
    j = 0
    
    Openfile = Split(Openfilename, "\")   'Split函数拆分字符串
    lotid = Split(Openfilename, "_")
    
    shS.Cells(6, 6) = lotid(UBound(lotid) - 1)
    shS.Cells(7, 6) = Openfilename
    shS.Cells(10, 6) = Now()
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'这部分代码是逐行读取csv文档,并寻找满足条件的字符串,先写入到二维数组中,再写入到工作表中
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    Do While Not sFile.AtEndOfStream    '如果不是文本文件的尾端,则读取数据 
        LineText = sFile.ReadLine       '逐行读取文本
        Check_Text = Left(LineText, 13)
        
        If Check_Text = "[Measurement]" Then
            i = i + 1
            All_Text = Split(LineText, ",")
            shR.Cells(2, j + 1) = All_Text(1)    
                j = j + 1

            Dim Arr_MTF(0 To 288, 0 To 13)
                For m = 0 To 288      
                        For n = 0 To 13            
                            Arr_MTF(m, n) = All_Text(n)   '将满足条件的文本写入到二维数组
                        Next n
                        j = 0
                Next m

                shM.Cells(2 + i - 1, 1) = i
                shM.Cells(2 + i - 1, 2) = shR.Cells(2, 1)
                shM.Cells(2 + i - 1, 3) = shR.Cells(2, 2)
                shM.Cells(2 + i - 1, 4) = shR.Cells(2, 1) & "," & shR.Cells(2, 2)
                
                shF.Cells(2 + i - 1, 1) = i
                shF.Cells(2 + i - 1, 2) = shR.Cells(2, 1)
                shF.Cells(2 + i - 1, 3) = shR.Cells(2, 2)
                shF.Cells(2 + i - 1, 4) = shR.Cells(2, 1) & "," & shR.Cells(2, 2)
                
                shD.Cells(2 + i - 1, 1) = i
                shD.Cells(2 + i - 1, 2) = shR.Cells(2, 1)
                shD.Cells(2 + i - 1, 3) = shR.Cells(2, 2)
                shD.Cells(2 + i - 1, 4) = shR.Cells(2, 1) & "," & shR.Cells(2, 2)
                
                shR.Range("C2:P290") = Arr_MTF   '二维数组的内容写入到工作表
            
                shPivot.Select
                ActiveSheet.PivotTables("Pivot").PivotCache.Refresh   '刷新数据透视表
                Range("B5:R5").Copy   '复制单元格内容                  
                shM.Cells(2 + i - 1, 5).Select   '粘贴到指定单元格
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
                    
                Sheets("Pivot").Range("B10:R10").Select
                Application.CutCopyMode = False
                Selection.Copy
                shF.Cells(2 + i - 1, 5).Select
                Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                    :=False, Transpose:=False
                Application.CutCopyMode = False

                For k = 0 To 16
                    shD.Cells(2 + i - 1, 5 + k) = (shF.Cells(2 + i - 1, 5) - shF.Cells(2 + i - 1, 5 + k)) * 1000
                Next k

                shD.Cells(2 + i - 1, 22) = (shD.Cells(2 + i - 1, 18) + shD.Cells(2 + i - 1, 20)) / 2
                shD.Cells(2 + i - 1, 23) = (shD.Cells(2 + i - 1, 19) + shD.Cells(2 + i - 1, 21)) / 2
            Else
        End If
  
    Loop
    sFile.Close
    
    Application.ScreenUpdating = True   '打开屏幕刷新,与Application.ScreenUpdating=false成对存在   
    shS.Cells(9, 6) = i
    shS.Cells(11, 6) = Now()
    MsgBox ("   Done !")
    
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
'这部分代码是将工作簿另存在指定路径下
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
    ThisWorkbook.SaveAs FileName:=FilePath & "\" & shS.Cells(6, 6) & "-data Summary.xlsm"  
    
End Sub

上述代码要点总结:
1.读取csv文档内容及split拆分字符串(与读取txt文档内容的方法一致)
2.将多个字符串写入二维数组,进而写入到excel工作表
3.数据透视表的使用方法

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用VBA编写代码来读取CSV文件并将其导入到Excel工作表中。以下是一个示例代码: ```vb Sub ImportCSV() Dim filePath As String Dim targetWorksheet As Worksheet Dim targetRange As Range '设置CSV文件路径 filePath = "C:\example.csv" '设置导入目标工作表和范围 Set targetWorksheet = ActiveWorkbook.Worksheets("Sheet1") Set targetRange = targetWorksheet.Range("A1") '导入CSV数据 With targetWorksheet.QueryTables.Add(Connection:="TEXT;" & filePath, Destination:=targetRange) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True 'CSV文件使用逗号分隔 .Refresh End With End Sub ``` 在这个示例代码中,我们首先使用`filePath`变量设置CSV文件的路径,然后使用`Set`语句设置要导入数据的目标工作表和范围。接下来,我们使用`QueryTables`对象的`Add`方法创建一个查询表,并将CSV文件的路径和目标范围作为参数传递。最后,我们设置查询表的属性,包括数据类型和分隔符,并调用`Refresh`方法来导入CSV数据。 请注意,此示例假设CSV文件中的数据以逗号分隔。如果CSV文件使用其他分隔符,可以使用`TextFileTabDelimiter`、`TextFileSemicolonDelimiter`等属性来指定分隔符。 ### 回答2: VBA是Visual Basic for Applications的缩写,是一种用于自动化任务和宏编程的编程语言。要将CSV文件读取Excel工作表中,我们可以使用VBA编写一段代码来实现。 首先,需要打开Excel并创建一个新的工作簿。然后,在VBA编辑器中,我们可以定义一个Sub过程,命名为"ReadCSV"。 在这个"ReadCSV"过程中,我们需要使用一些对象和方法来完成任务。首先,我们需要使用FileSystemObject对象来访问文件系统。然后,我们使用它的OpenTextFile方法打开CSV文件。 接下来,我们可以使用Excel的Workbook对象中的Worksheets属性来访问我们新创建的工作簿的工作表。我们可以使用Add方法创建一个新的工作表,并将其分配给一个名为"Sheet1"的变量。 然后,我们可以使用Worksheet对象中的Cells属性,将CSV文件中的数据逐行逐列地复制到工作表中。我们可以使用FileSystemObject对象的ReadLine方法来逐行读取CSV文件,然后使用Split函数将每一行的文本分割成一个数组。 最后,我们关闭CSV文件并保存Excel工作簿。我们可以使用Workbook对象中的Save方法来保存工作簿,然后使用Workbook对象中的Close方法来关闭工作簿。 以下是一个示例VBA代码段,用于将CSV文件读取Excel工作表中: ``` Sub ReadCSV() Dim fso As Object Dim csvFile As Object Dim dataLine As String Dim dataArray() As String Dim rowNum As Integer Dim colNum As Integer Set fso = CreateObject("Scripting.FileSystemObject") Set csvFile = fso.OpenTextFile("C:\path\to\your\csv\file.csv") Set Sheet1 = ThisWorkbook.Worksheets.Add rowNum = 1 Do While Not csvFile.AtEndOfStream dataLine = csvFile.ReadLine dataArray = Split(dataLine, ",") colNum = 1 For Each dataItem In dataArray Sheet1.Cells(rowNum, colNum).Value = dataItem colNum = colNum + 1 Next dataItem rowNum = rowNum + 1 Loop csvFile.Close ThisWorkbook.Save ThisWorkbook.Close End Sub ``` 以上是一个简单的示例,供参考。你可以根据自己的需求进行修改和扩展。 ### 回答3: VBA是一种用于自动化操作Excel的编程语言,可以通过VBA读取CSV文件并将其内容导入到Excel工作表中。 首先,我们需要使用VBA中的文件对话框功能来选择要导入的CSV文件。代码示例如下: ```vba Sub ImportCSVFile() Dim fd As FileDialog Dim csvFileName As String Dim wb As Workbook Dim ws As Worksheet '创建文件对话框对象 Set fd = Application.FileDialog(msoFileDialogFilePicker) '设置文件对话框的类型 fd.Title = "请选择要导入的CSV文件" fd.Filters.Clear fd.Filters.Add "CSV Files", "*.csv" '如果用户选择了文件并按下了"打开"按钮 If fd.Show = -1 Then csvFileName = fd.SelectedItems(1) Else Exit Sub End If '打开CSV文件 Set wb = Workbooks.Open(csvFileName) Set ws = wb.Sheets(1) '假设CSV文件中的数据在第一个工作表中 '将CSV文件中的内容复制到当前工作簿的工作表中 ws.UsedRange.Copy Range("A1") '关闭CSV文件 wb.Close SaveChanges:=False '释放对象 Set wb = Nothing Set ws = Nothing Set fd = Nothing End Sub ``` 在以上代码中,我们首先创建了一个文件对话框对象,然后设置了对话框的标题和类型,只允许选择CSV文件。当用户选择了文件并点击了"打开"按钮后,我们将选择的文件路径保存在`csvFileName`变量中。 接下来,我们使用`Workbooks.Open`方法打开了CSV文件,并将文件中的数据导入到一个工作表对象`ws`中。在这里假设CSV文件中的数据在第一个工作表中。然后,通过`ws.UsedRange.Copy Range("A1")`将CSV文件中的内容复制到当前工作簿的工作表中的A1单元格处。 最后,我们关闭了CSV文件,释放了创建的对象。 以上就是使用VBA读取CSV文件并将其内容导入到Excel工作表中的过程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值