Selektives Importieren von Datensätzen (Microsoft Excel)
Ole hatte ein Problem beim Importieren von Informationen in eine Excel-Arbeitsmappe. Es scheint, dass die Dateien, die er importieren muss, normalerweise Tausende und Abertausende von Datensätzen enthalten. Ole benötigt jedoch die meisten Eingabezeilen nicht und entfernt sie normalerweise, sobald die Datensätze in Excel importiert wurden. Ole sucht nach einer Möglichkeit, die unerwünschten Datensätze während des Importvorgangs zu entfernen, damit er weniger Arbeit hat, wenn sich die Daten in seiner Arbeitsmappe befinden.
Es gibt verschiedene Möglichkeiten, wie eine Lösung für dieses Problem gefunden werden kann. Eine Lösung besteht darin, Access als ersten Importschritt zu verwenden. Access kann problemlos die Tausenden von Datensätzen verarbeiten, die Sie importieren möchten – selbst wenn mehr Datensätze vorhanden sind, als Sie in Excel importieren können. Sie können die Datei in Access importieren, unerwünschte Datensätze herausfiltern und die resultierende Tabelle dann als Excel-Arbeitsmappe exportieren.
Die beste Lösung könnte jedoch darin bestehen, die Importfilter von Excel vollständig zu umgehen. Sie können problemlos eine Importroutine in VBA schreiben und die Verarbeitung der Importdatei zulassen. Betrachten Sie beispielsweise das folgende Makro:
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
Dieses Makro öffnet eine Datendatei und liest jeden Datensatz in der Datei. Es überprüft den Datensatz, um sicherzustellen, dass der Import in Ordnung ist, zieht ihn dann basierend auf einem Trennzeichen auseinander und fügt die Informationen in das aktuelle Arbeitsblatt ein. Sie können den Namen der Datendatei (die sFile-Variable), den Text, der auf einen fehlerhaften Datensatz hinweist (sUnwanted-Variable), und das Trennzeichen (sDelim-Variable) ändern.
Angenommen, Sie haben eine Datendatei mit dem Namen Customers.txt. Diese Datei enthält alle Ihre Kundendatensätze, Sie möchten jedoch keine Datensätze für Kunden mit Adressen innerhalb der USA importieren. Ferner verwenden die Datensätze in der Datendatei ein Tabulatorzeichen zwischen jedem Feld. In diesem Fall müssten Sie nur die folgenden Änderungen an den Variablen am Anfang des Makros vornehmen:
sFile = "d:\Customers.txt" sUnwanted = "United States" sDelim = Chr(9)
Sobald Sie das Makro ausgeführt haben, enthält das aktuelle Arbeitsblatt nur die gewünschten Daten.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (2239) gilt für Microsoft Excel 97, 2000, 2002 und 2003. Eine Version dieses Tipps für die Multifunktionsleistenschnittstelle von Excel (Excel 2007 und höher) finden Sie hier: