Please Note: This article is written for users of the following Microsoft Excel versions: 2007, 2010, and 2013. If you are using an earlier version (Excel 2003 or earlier), this tip may not work for you. For a version of this tip written specifically for earlier versions of Excel, click here: Selectively Importing Records.

Selectively Importing Records

by Allen Wyatt
(last updated February 1, 2016)

5

Ole ran into a problem importing information into an Excel workbook. It seems that the files he needs to import typically have thousands and thousands of records in them. Ole doesn't need most of the input rows, however, and normally gets rid of them once the records are imported into Excel. Ole is looking for a way to get rid of the unwanted records during the import process, so that he has less work to do when the data is in his workbook.

There are a couple of different ways that a solution to this problem can be approached. One solution is to use Access as your first importing step. Access will easily handle the thousands of records you want to import—even if there are more records than what you can import into Excel. You could import the file into Access, filter out the unwanted records, and then export the resulting table as an Excel workbook.

The best solution, however, may be to bypass Excel's import filters entirely. You can easily write an import routine in VBA, and allow it to process the import file. For instance, consider the following macro:

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

This macro opens a data file and reads each record in the file. It checks the record to make sure it is OK to import, and then pulls the record apart, based on a delimiter, and stuffs the information into the current worksheet. You can change the name of the data file (the sFile variable), the text that indicates a bad record (sUnwanted variable) and the delimiter (sDelim variable).

As an example, let's assume that you have a data file named Customers.txt. This file contains all your customer records, but you don't want to import the records for customers with addresses inside the United States. Further, the records in the data file use a tab character between each field. In this case, you would only need to make the following changes to the variables at the beginning of the macro:

    sFile = "d:\Customers.txt"
    sUnwanted = "United States"
    sDelim = Chr(9)

Once you run the macro, the current worksheet contains just the desired data.

ExcelTips is your source for cost-effective Microsoft Excel training. This tip (8491) applies to Microsoft Excel 2007, 2010, and 2013. You can find a version of this tip for the older menu interface of Excel here: Selectively Importing Records.

Author Bio

Allen Wyatt

With more than 50 non-fiction books and numerous magazine articles to his credit, Allen Wyatt is an internationally recognized author. He  is president of Sharon Parq Associates, a computer and publishing services company. ...

MORE FROM ALLEN

Digital Signatures for Macros

The security features built into Excel 2002 and 2003 allow you to digitally sign your macros so that users can rest ...

Discover More

Getting Rid of Custom Toolbars

If you start Word and get a bunch of unwanted toolbars displayed on the screen, you can be scratching your head (or ...

Discover More

Shortcut to Display Bookmarks

It can be helpful to see where the bookmarks are located in a document. This tip provides a quick way that you can both ...

Discover More

Program Successfully in Excel! John Walkenbach's name is synonymous with excellence in deciphering complex technical topics. With this comprehensive guide, "Mr. Spreadsheet" shows how to maximize your Excel experience using professional spreadsheet application development tips from his own personal bookshelf. Check out Excel 2013 Power Programming with VBA today!

More ExcelTips (ribbon)

Adding Leading Zeroes to ZIP Codes

Import a bunch of ZIP Codes into Excel, and you may be surprised that any leading zeroes disappear. Here's a handy little ...

Discover More

Determining If a Number is Odd or Even

If you need to know whether a particular value is odd or even, you can use this simple formula. Designed to be used in a ...

Discover More

Swapping Two Strings

Strings are used quite frequently in macros. You may want to swap the contents of two string variables, and you can do so ...

Discover More
Subscribe

FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."

View most recent newsletter.

Comments

If you would like to add an image to your comment (not an avatar, but an image to help in making the point of your comment), include the characters [{fig}] in your comment text. You’ll be prompted to upload your image when you submit the comment. Maximum image size is 6Mpixels. Images larger than 600px wide or 1000px tall will be reduced. Up to three images may be included in a comment. All images are subject to review. Commenting privileges may be curtailed if inappropriate images are posted.

What is eight minus 3?

2016-02-01 21:54:42

Thomson

Power Query also good in this kind of work with minimum programming. Saving Excel Macro file in corporate environment might be hard sometime..


2016-02-01 10:48:06

Shandor

This is a workable solution, but in the big picture this workflow belongs in a database, with a reporting front end like Tableau or Birst. Old Access needs to be retired, along with Excel methods beyond prototyping and ad hoc data manipulation. AWS is commoditizing big data, and convenient tools will soon make even small businesses crunch numbers like Fortune 500's! Just thought I'd share a glimpse of the future that's here already.


2013-05-22 06:16:24

Barry Fitzpatrick

I don't think this will work if the import file has text fields (typically delimited by quotation marks) if the enclosed text contains the delimiting character (commonly a comma in CSV formatted files).

Excels own import filters ignore delimiter characters if enclosed with quotations marks.


2013-05-21 10:41:11

Américo Fernandes

Hi,
how I can, within this macro, convert the source informtion in UTF-8 to Unicode before doing the split into cells?


2013-05-20 13:22:27

Tony Moore

Similar topic to "Selectively Importing Records". MS Query under importing external data could be employed. The problem I've had with MS Query is that is does not release the access file after running and showing the result on the worksheet, until the excel file is closed. During that time, the access file can't be opened by users. I need to figure out how to set up MS Query so people can open an excel file, see current data being queried, yet still allow the Access Db to be used. If you have tips on MS Query, that would be very useful. (as are a lot of the weekly tips) Thanks, Tony


This Site

Got a version of Excel that uses the ribbon interface (Excel 2007 or later)? This site is for you! If you use an earlier version of Excel, visit our ExcelTips site focusing on the menu interface.

Newest Tips
Subscribe

FREE SERVICE: Get tips like this every week in ExcelTips, a free productivity newsletter. Enter your address and click "Subscribe."

(Your e-mail address is not shared with anyone, ever.)

View the most recent newsletter.