Oleは、Excelブックへの情報のインポートで問題が発生しました。彼がインポートする必要のあるファイルには、通常、何千ものレコードが含まれているようです。ただし、Oleはほとんどの入力行を必要とせず、通常、レコードがExcelにインポートされるとそれらを削除します。 Oleは、インポートプロセス中に不要なレコードを削除する方法を探しています。これにより、データがワークブックにあるときに行う作業が少なくなります。

この問題の解決策に取り組むには、いくつかの異なる方法があります。 1つの解決策は、最初のインポート手順としてAccessを使用することです。 Accessは、Excelにインポートできるレコードよりも多くのレコードがある場合でも、インポートする数千のレコードを簡単に処理します。ファイルをAccessにインポートし、不要なレコードを除外して、結果のテーブルをExcelブックとしてエクスポートできます。

ただし、最善の解決策は、Excelのインポートフィルターを完全にバイパスすることです。 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トレーニングのソースです。

このヒント(2239)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。