• ベストアンサー

TXTファイルデーターをEXCELで読み込む

Aというテキストファイルがあります。 そのファイルのは、 1 12 123 1234 という様なスペースで分けられた文字列が並んでいます。 これを、新規作成したEXCELファイルで読み込みたいのですが、出来ますでしょうか? 現状は、テキストファイルをスペース区切りでEXCELに変換しているのですが、ファイル量が多くなりそうで手間がかかります。 ですので、テキストファイルから直接読み取りEXCELに貼り付けたいのです。(自動リンクのイメージでリンク元がAというテキストファイル) 以上、ご教示お願い致します。

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

  • ベストアンサー
  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.9

#8 です。 データの様子や動作仕様で不明な点はありますが、とりあえず現状の VBA コードをアップしてみます。 リンクってのがよく分かりませんが、テキストのインポートでやりました。 下記のコードを実行すると、次の動作を行います。 1. このコードが書かれた同一フォルダ内の D*.txt をDOSコマンドで連結   し、ファイル MergeData.txt に出力します。 2. MergeData.txt のデータを行単位でメモリ上に読み込みます。 3. 2.をアクティブシートのセルに展開します。 4. 最後にスペース区切りで各要素をセルに分割します。 なお、動作確認は WindowsXPsp2 + Excel2002sp3 の環境です。 30個程度のファイルなら、ループで回しても良かったのですが、何となく、、 ちなみに、テキストファイル毎に1枚のシートであれば、これはボツですね。 Option Explicit Declare Function SetCurrentDirectory Lib "kernel32" _   Alias "SetCurrentDirectoryA" _   (ByVal lpPathName As String) As Long Sub InportTextFile_Sample()      Const ForReading& = 1, ForWriting& = 2, ForAppending& = 8   Const BufSize& = 2000 '2000行      Dim objShell As Object   Dim FS    As Object, TS As Object   Dim Buf()  As String   Dim i    As Long   Dim strPath As String      'カレントディレクトリー設定   strPath = ThisWorkbook.Path   SetCurrentDirectory strPath      'テキストファイルマージ   Set objShell = CreateObject("WScript.Shell")     objShell.Run "%ComSpec% /c COPY /b D*.txt MergeData.txt", 0, True   Set objShell = Nothing      'データバッファ   ReDim Buf(BufSize)   strPath = strPath & "\MergeData.txt"   Set FS = CreateObject("Scripting.FileSystemObject")   Set TS = FS.OpenTextFile(strPath, ForReading)     Do Until TS.AtEndOfStream       Buf(i) = Trim$(CStr(TS.ReadLine))       i = i + 1       If i > 65536 Then Exit Do       If Not i Mod BufSize Then         ReDim Preserve Buf(i + BufSize)       End If     Loop     ReDim Preserve Buf(i)     TS.Close   Set TS = Nothing: Set FS = Nothing      'セルに書き込み   Application.ScreenUpdating = False   ActiveSheet.Range("A1") _     .Resize(UBound(Buf) + 1).Value = Application.Transpose(Buf)      'バッファクリア   Erase Buf      'ソートするならここに書く      '要素分割(SP区切り)   ActiveSheet.Columns("A:A").TextToColumns _     DataType:=xlDelimited, _     TextQualifier:=xlDoubleQuote, _     ConsecutiveDelimiter:=True, _     Space:=True   Application.ScreenUpdating = True   MsgBox "終了しました.", vbInformation End Sub

kohrem
質問者

お礼

丁寧なご説明ありがとうございます。 やはり、VBAになりますかぁ・・・ ◆1点目 問)テキストファイル毎に1枚のシートにするのですか? 捕)できればそうしたいと考えています。理由は、内線の発呼が2千/日以内と決まっているわけでは無い為、#8様が仰るように、1つのシートにまとめると行数不足になる恐れがあるためです・・・ ◆2点目 問)処理効率からの点で・・・ 捕)やはり、インポートしないと無理ですか・・・   自動作成される課金レポートの中身は以下のようになっています。 ・内線番号 通話日時 発信先  ↑このフォーマットでその日のうちの発呼分(おおよそ2千) これを、インポートすればそれぞれ、A1,B1,C1に入ってくれるので、後は普通に計算できるのですが、これではこのインポート作業を1ヶ月分(30ファイル)行う必要がありますよね?ただこれを、#5様にご教示頂いたソフトで一括ファイルにしてしまえば1回のインポートで済むのですが、行数に不安があります。 なので、できるならば、インポートせずに(テキストファイルをいじることなく)計算用ファイルに1ファイル/1シートで読み込ませたかったのです・・・ ◆3点目 問)インポートの際に邪魔になりそうなものはありませんか? 捕)特にありません。 この場をお借りして・・・ この様な稚拙な質問に対し皆様方には大変役立つご回答して頂き、ありがとうございます。  今回の内容を自分なりにもう一度考えて、また必要な時に再質問させて頂きますので、いったん、閉めさせて頂きます。

その他の回答 (8)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.8

こんにちは。KenKen_SP です。 フォルダ内のファイルを一括処理するなら VBA による方法になると 思います。 ◆1点目 > 社内電話の課金日報レポートが毎日01:00のテキストファイルで作成 > されます。(おおよそ2千行) どうやら集計したいみたいなので、1つシートに1ヶ月分のテキストの データをインポートする仕組みでコードを書いていたのですが、 #6 の方の書き込みをみて、次のことに気が付きました(汗) 2,000行/1日であれば1ヶ月なら、2,000行×最大31日=62,000行... になりますので、Excel ではちょっと厳しいですね.....行が不足し そうです。テキストファイル毎に1枚のシートにするのですか? 1つのシートにまとめたい、、と考えているなら ACCESS の方が良さ そうです。 ◆2点目 処理効率からの点で、予めテキストファイルを連結させてからインポー トする方法を考えました。インポートした後で、ソートのキーとなる フィールド(列)はありますか? ◆3点目 テキストデータは1行目に見出しなり、インポートの際に邪魔になりそう なものはありませんか?

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

>、1つのセルに全ての列が入ってしまいました・・・(;_;) これは、タブ区切りではないという これは当たり前。 この後、メニューのデーターデータ区切り、でスペースを区切りに指定して ウイザードの指示に従えば、各フィールドに分離してくれます。 >ファイル量が多くなりそうで手間がかかります 上記操作はデータ量で差が出るものではない。

noname#223623
noname#223623
回答No.6

#5です。1個のテキストファイルを1枚のシートにするのかな?だとすると#5は関係ないので無視してください。#4さんのおっしゃるようにTABにすれば簡単だと思います。

noname#223623
noname#223623
回答No.5

問題がよくわからないのですが、テキストファイルが多くてExcelでいちいち開くのが大変、ということですか? テキストファイルを1つにまとめていっぺんに処理するのではだめなのかな? 開き方は#1、#3さんのやり方で。 質問を読むと空白で区切るのが大変、ともとれるのですが... ↓テキストファイルをまとめるツール

参考URL:
http://www.vector.co.jp/soft/win95/util/se347042.html
  • asahina02
  • ベストアンサー率47% (95/202)
回答No.4

#1で回答した者です。 では、ちょっと視点を変えてスペース区切りではなく、タブ区切りで変換することは出来ないでしょうか? タブ区切りになっていれば、ファイルをドラッグ&ドロップするだけで、 ご希望の形式でEXCELに展開されると思います。

kohrem
質問者

補足

再度のご回答ありがとうございます。 教えていただいた事を試してみました!・・・ が、1つのセルに全ての列が入ってしまいました・・・(;_;) これは、タブ区切りではないという事でしょうか? ちなみに、大変言い辛いのですが、この内容は私の希望する事とは違います・・・ んー・・・どうもうまく伝わりませんねぇ、すみませんm(_ _)m 私の希望する手順を書いてみます。 1.課金用テキストファイルが1つ/1日自動作成(フォーマット決まっている)される。 2.”1”のファイルが一月分(30ファイル)出来上がる。 3.そのファイルを所定のフォルダに入れる。 4.”2”と同じフォルダ内にある課金料金計算用EXCELファイルを開く ※計算用ファイルは事前に作成(リンク元はテキストファイル) 5.内線毎の利用状態が計算されている。 以上です。 これは、元データーが既にEXCELファイルでしたら問題なく可能ですよね? ですが、テキストファイルなので、皆様が仰るように種種の方法でいったんEXCELに変換し、保存→そのファイルにリンクさせる。 手順でいえば、 1および2,3の手順は同じ 4.テキストファイルをEXCELで読み出し、拡張子を.xlsに変えて保存。 5.”3”の手順を一月分のファイル数(約30個)だけ繰り返し行う。 6.これより後は、希望手順と同じ。 以上ですが、わかりますか?

  • OsieteG00
  • ベストアンサー率35% (777/2173)
回答No.3

データ-外部データの取り込み-テキストファイルのインポート から、#1さんのテキストファイルウィザードを実行してみてください。 貼り付けられたセルを選択して「データの更新」とすると元のファイルの内容を再び読み込みます。 「データベースクエリ」でも同じことができそうですが、空白区切りの処理の仕方がわかりませんでした。

回答No.2

ご質問は単純に テキストをリンク貼り付けしたい・・・ということですか? その場合、EXCELでそのデータを今後加工して使用していくという前提はあると考えていいのでしょうか? それとも以下のようなことでしょうか? データ入力されたソフトが存在。 そこからテキスト書き出しで何種類かテキストファイルを作成した。 EXCELで読み込むとファイル量が多いので処理が大変。 ↓ データ入力してあるソフトから自動的にEXCELに読み込む方法がしりたい。 どちらでしょう・・・?

kohrem
質問者

補足

ご回答ありがとうございます。 テキストをリンク貼り付けしたい・・・ と、言う事ですね。正確に申しますと、リンク貼り付けの操作を手動ではなく自動でなのです。 詳細をいいますと、 社内電話の課金日報レポートが毎日01:00のテキストファイルで作成されます。(おおよそ2千行) これを内線番号別に料金を割り振る為、EXCELで計算したいのですが、元データーがテキストファイルなので、いったん、No1,3様が仰る操作でEXCELベースに変換させて、文字列を認識させていますが、課金情報で必要なのは1ヶ月単位の為、月末に処理する事となり、毎月30又は31日のテキストファイルを繰り返し変換して認識させなければならず面倒です(^_^; 従って、料金計算用のEXCELファイルにはあらかじめ、リンク元を指定入力しておき、(A1にテキストファイル名+データー入力セル?)月末のファイルが出揃った時に一括して30ないし31のテキストファイルを料金計算用EXCELファイルの指定したフォルダに入れる事で自動計算したい・・・という事なのですが、意味わかりますか? 尚、自動作成される課金レポートファイル(テキスト)名は、 D年月日です。 例えば、2005/09/01ですと、 D050901となります。 以上です。

  • asahina02
  • ベストアンサー率47% (95/202)
回答No.1

Excelを先に起動し、ファイルメニューから開くを選択して、上記のようなテキストファイルを指定してあげると、データの変換ウィザードが出てきます。 これで区切り文字をスペースとして選択してやるとエクセルの形式で開くことが出来ます。 1 12 123 1234 というファイルの場合、 セルA1に「1」、B1に「12」、C1に「123」、D1に「1234」 となります。 あとはエクセル形式で保存してあげるだけです。 と、こういう回答でよかったのでしょうか? 検討違いだったらすいません。

kohrem
質問者

補足

早速のご回答ありがとうございます。 私の説明不足で申し訳ありません。 No1ご回答者様の方法はごもっともなのですが、この方法ではテキストファイルが多い場合大変です。 なので、テキストファイルを開くことなく、読み込み、ご回答者様が仰るような配列(A1に1,B1に12・・・)で表示したいのです。

関連するQ&A

専門家に質問してみよう