• ベストアンサー

VBAでEXCELファイルからデータを抽出する方法

VBAで、サーバーにある大量のデータを含むCSVファイルから、ある条件に一致するデータを抽出する方法を教えてください。 (例)  コード   名称  在庫数  その他データ  A12300  ○○○  999   XXXXXXXX  A12400  ○○○  999   XXXXXXXX  B12500  ○○○  999   XXXXXXXX  B11100  ○○○  999   XXXXXXXX  C11200  ○○○  999   XXXXXXXX 上記データからコードの一桁目が「A」と「C」のものを抽出する場合の、VBAを教えてください。 抽出後、EXCELの別ファイルに上書き保存します。 デイリーで処理をするので、VBAで自動化したいのです。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.4

#1です。 参照URLの下の方に、代替関数があります。 buf = Split(tmp, ",") 3番目を抽出したいなら、buf(3) 5番目を抽出したいなら、buf(5) になるかと思います。

参考URL:
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub05_800_080.html
yasmail65_1965
質問者

お礼

ありがとうございました! 結局、少し違う方法でできました。 が、大変参考になりました。 お二人ともありがとうございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

>データを抽出する方法を・・ エクセルファイルを作るのか、どちらか不明だが、 条件に合うレコードを抜き出したCSVファイルを作るのなら Sub test01() Dim n As Long, buf As Variant, tmp As String, ctmp As String n = FreeFile() p = FreeFile() + 1 Open "C:\Documents and Settings\OTO\My Documents\Test01.txt" For Input As #n Open "C:\Documents and Settings\OTO\My Documents\Test02.txt" For Output As #p Do Until EOF(1) Line Input #n, inputa fld = Split(inputa, ",") cmp = Left(fld(0), 1) 'A列の場合。C列ならfld(2) If cmp = "a" Or cmp = "c" Then '大文字ならA,C Print #p, inputa End If Loop Close #n Close #p End Sub でしょう。

yasmail65_1965
質問者

お礼

ありがとうございます! 自宅ではできました! しかしながら、会社のPCではエクセルのバージョンが古い為?SPLIT関数が使用できません。 その場合はどうしたらいいでしょう? また、3列めと5列目のデータだけを抜き出すとすれば、どう記述すればいいでしょうか? 誠に申し訳ないのですが、ご教示願います。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.2

返事が遅れて申し訳ありません。 C列って、先頭から何文字めでしょうか? ctmp =Left(tmp,1) を次のように変えます。 10文字目ならば、 ctmp =Mid(tmp,10,1) これは、10文字目から1文字を取り出すという命令です。

yasmail65_1965
質問者

お礼

ありがとうございます! 自宅ではできました! しかしながら、会社のPCではエクセルのバージョンが古い為?SPLIT関数が使用できません。 その場合はどうしたらいいでしょう? また、3列めと5列目のデータだけを抜き出すとすれば、どう記述すればいいでしょうか? 誠に申し訳ないのですが、ご教示願います。

  • kokorone
  • ベストアンサー率38% (417/1093)
回答No.1

Sub Sample22() Dim n As Long, buf As Variant, tmp As String,ctmp As String Dim idx As Integer,cnt As String n = FreeFile Open "D:\Test.txt" For Input As #n idx = 1 Do Until EOF(1) Line Input #n, tmp buf = Split(tmp, ",") ctmp =Left(tmp,1) If ctmp = "A" Or ctmp = "C" Then cnt ="A" & idx & ":D" & idx Worksheets("Sheet1").Range(cnt) = buf idx = idx +1 EndIf Loop Close #n End Sub テキストデータで読み込み、1文字目(左から1番目の文字)をチェックします。

yasmail65_1965
質問者

補足

ありがとうございます! 大体はできました。 しかしながら、実はコードが「C列」にあるのです。 その場合の記述はどのようにすれば?

関連するQ&A