选择性导入记录(Microsoft Excel)
Ole在将信息导入Excel工作簿时遇到问题。他需要导入的文件似乎是文本文件,通常其中包含成千上万的记录。但是,Ole不需要大多数输入行,并且通常在将记录导入Excel后将其删除。 Ole正在寻找一种在导入过程中摆脱不想要的记录的方法,以便在工作簿中包含数据时减少工作量。
有两种不同的方法可以解决此问题。一种解决方案是将Access用作第一步。 Access将轻松处理您要导入的数千条记录,即使记录的数量超出了您可以导入Excel的记录的数量。您可以将文件导入Access,过滤掉不需要的记录,然后将结果表导出为Excel工作簿。
但是,最好的解决方案可能是完全绕过Excel的导入筛选器。如果您的导入数据(例如Ole的数据)在文本文件中,则此方法非常有用。您可以轻松地在VBA中编写导入例程,并允许其处理导入文件。例如,考虑以下宏:
Sub Import() Dim sFile As String Dim sUnwanted As String Dim sDelim As String Dim iRow As Integer Dim iCol As Integer Dim bBadRecord As Boolean Dim iTemp As Integer sFile = "d:\data.txt" sUnwanted = "bad text" sDelim = "," Open sFile For Input As #1 iRow = 1 While Not EOF(1) 'Scan file line by line iCol = 1 Line Input #1, sBuffer ' Check to see if should ignore record bBadRecord = Instr(sBuffer, sUnwanted) If Not bBadRecord Then iTemp = Instr(sBuffer, sDelim) While iTemp > 0 With Application.Cells(iRow, iCol) .NumberFormat = "@" 'Text formatting .Value = Left(sBuffer, iTemp-1) End With iCol = iCol + 1 sBuffer = Mid(sBuffer, iTemp+1, Len(sBuffer)) iTemp = Instr(sBuffer, sDelim) Wend If Len(sBuffer) > 0 Then With Application.Cells(iRow, iCol) .NumberFormat = "@" 'Text formatting .Value = sBuffer End With End If iRow = iRow + 1 End If Wend Close #1 End Sub
此宏将打开一个数据文件,并读取文件中的每个记录。它检查记录以确保可以导入,然后根据分隔符将记录拆开,然后将信息填充到当前工作表中。您可以更改数据文件的名称(sFile变量),指示错误记录的文本(sUnwanted变量)和定界符(sDelim变量)。
例如,假设您有一个名为Customers.txt的数据文件。该文件包含您的所有客户记录,但是您不想导入地址为美国境内的客户的记录。此外,数据文件中的记录在每个字段之间使用制表符。在这种情况下,您只需要在宏的开头对变量进行以下更改:
sFile = "d:\Customers.txt" sUnwanted = "United States" sDelim = Chr(9)
一旦运行宏,当前工作表仅包含所需的数据。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(8491)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。您可以在此处为Excel的较早菜单界面找到此技巧的版本: