レコードを選択的にインポートする(Microsoft Excel)
Oleは、Excelブックへの情報のインポートで問題が発生しました。彼がインポートする必要のあるファイルは、通常、何千ものレコードが含まれているテキストファイルのようです。ただし、Oleはほとんどの入力行を必要とせず、通常、レコードがExcelにインポートされるとそれらを削除します。 Oleは、インポートプロセス中に不要なレコードを削除する方法を探しています。これにより、データがワークブックにあるときに行う作業が少なくなります。
この問題の解決策に取り組むには、いくつかの異なる方法があります。 1つの解決策は、最初のインポート手順として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_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(8491)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。