• ベストアンサー

エクセルでcsvデータを自動読み込みする方法(至急)

csv形式のファイル(内容は計測値データ)をエクセルに読み込み、csvファイルの各データが規定値内に納まっているかの確認が容易できる方法を探しています。 このとき条件として、 (1)csvファイル内のデータは10項目程度。 (2)csvデータはランダムに更新される。 (3)エクセルに読み込むときはエクセルシート内の決められたセルにそれぞれデータが格納されること。 (例)csvファイルに"110"と"119"の2種類のデータがあった場合、あらかじめxlsファイルのセルA1に「警察」、セルA2に「消防署」と記入しておき、csvファイルのデータを読み込んだとき、セルB1に"110"、セルB2に"119"と入力される。 (4)csvファイル自体は開かず、必要なときにあらかじめ作成したxlsファイルを立ち上げると、自動でcsvファイルの内容を吸い上げる。 (5)入力されたデータの適否をそれぞれ判定する。 (6)xlsファイルを立ち上げている間にcsvファイルが更新された場合、xlsファイルの更新方法は手動と自動を選択できる。 こんなこと出来るでしょうか? 特に(4)が困っています。csvファイルをエクセルで開いた状態であれば、この内容で出来たのですが・・・。 どなたか良い方法があったら教えて下さい。お願いします。

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

  • ベストアンサー
  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.3

(4)に対する回答です(応用すれば(6)もできるでしょう)。 たぶん、マクロを使わないとできないと思います。マクロを使っていいならいろいろ方法はあるでしょうが 一例として 1)マクロを組み込みたいブックを開き、[Alt]+[F11]でVBエディタを開きます。 2)通常左上に表示されるプロジェクトエクスプローラーの「ThisWorkbook」をWクリックします。 3)右側のエディタウィンドウに以下のコードを貼り付けます。 Private Sub Workbook_Open() Workbooks("abc.xls").Sheets(1).Activate Cells.Select Selection.ClearContents With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & "c:\xyz.csv", Destination:=Range("A1")) .TextFileCommaDelimiter = True .Refresh BackgroundQuery:=False End With End Sub ※ここで「abc.xls」はこのブック自身のファイル名、「c:\xyz.csv」は取り込みたいcsvファイルのパス・ファイル名です。  また、Sheets(1)は1枚目のシートに貼り付ける指定です。それぞれ適当に変更します。 4)ブックを保存終了し、再度、このブックを開いてください。 Excel自体、マクロを使用できない設定になっていると動きません。その際は、 [ツール]→[オプション]→[セキュリティ]→[マクロセキュリティ]→[セキュリティレベル] で「中」か「低」に設定してください。 うまくできますように......

MohMoh
質問者

お礼

大変参考になりました。本音はマクロを組まずにできれば良かったのですが、ここは妥協します。止む終えません。 csvファイルを開かずにデータを取り出せたので、あとは教えて頂いたプログラムを参考に応用してみます。 実際は質問で書いた内容より複雑なことをやろうとしていますが、今のところそれなりにできつつあります。 本当にありがとうございました。

その他の回答 (2)

  • palmmy
  • ベストアンサー率38% (841/2169)
回答No.2

>特に(4)が困っています。 VBやACCESSならやったことがあります。 EXCELにもタイマーがあればできるとは思いますが…

MohMoh
質問者

お礼

ありがとうございました。 とりあえずVBで検討してみることにします。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> (4)csvファイル自体は開かず、 開かないと読めません。 Excelワークシートとしてではなく、VBAにコードを書いて、テキストファイルとして読めばよろしいか、と。 ファイルの位置(ドライブ+パス+ファイル名)が固定されているなら、かなり簡単です。 110、119の条件も、作り込み可能ですし。

MohMoh
質問者

お礼

なかなか都合良くはいかないようですね。 ファイルの位置は決まっているのでVBで検討してみます。 ありがとうございました。

関連するQ&A