dポイントプレゼントキャンペーン実施中!

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

以上、ご教示お願い致します。

A 回答 (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
    • good
    • 0
この回答へのお礼

丁寧なご説明ありがとうございます。
やはり、VBAになりますかぁ・・・

◆1点目
問)テキストファイル毎に1枚のシートにするのですか?
捕)できればそうしたいと考えています。理由は、内線の発呼が2千/日以内と決まっているわけでは無い為、#8様が仰るように、1つのシートにまとめると行数不足になる恐れがあるためです・・・

◆2点目
問)処理効率からの点で・・・
捕)やはり、インポートしないと無理ですか・・・
  自動作成される課金レポートの中身は以下のようになっています。
・内線番号 通話日時 発信先
 ↑このフォーマットでその日のうちの発呼分(おおよそ2千)
これを、インポートすればそれぞれ、A1,B1,C1に入ってくれるので、後は普通に計算できるのですが、これではこのインポート作業を1ヶ月分(30ファイル)行う必要がありますよね?ただこれを、#5様にご教示頂いたソフトで一括ファイルにしてしまえば1回のインポートで済むのですが、行数に不安があります。
なので、できるならば、インポートせずに(テキストファイルをいじることなく)計算用ファイルに1ファイル/1シートで読み込ませたかったのです・・・

◆3点目
問)インポートの際に邪魔になりそうなものはありませんか?
捕)特にありません。

この場をお借りして・・・
この様な稚拙な質問に対し皆様方には大変役立つご回答して頂き、ありがとうございます。
 今回の内容を自分なりにもう一度考えて、また必要な時に再質問させて頂きますので、いったん、閉めさせて頂きます。

お礼日時:2005/09/14 09:09

こんにちは。

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行目に見出しなり、インポートの際に邪魔になりそう
なものはありませんか?
    • good
    • 0

>、1つのセルに全ての列が入ってしまいました・・・(;_;)


これは、タブ区切りではないという
これは当たり前。
この後、メニューのデーターデータ区切り、でスペースを区切りに指定して
ウイザードの指示に従えば、各フィールドに分離してくれます。

>ファイル量が多くなりそうで手間がかかります
上記操作はデータ量で差が出るものではない。
    • good
    • 0

#5です。

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

問題がよくわからないのですが、テキストファイルが多くてExcelでいちいち開くのが大変、ということですか?


テキストファイルを1つにまとめていっぺんに処理するのではだめなのかな?
開き方は#1、#3さんのやり方で。

質問を読むと空白で区切るのが大変、ともとれるのですが...

↓テキストファイルをまとめるツール

参考URL:http://www.vector.co.jp/soft/win95/util/se347042 …
    • good
    • 0

#1で回答した者です。



では、ちょっと視点を変えてスペース区切りではなく、タブ区切りで変換することは出来ないでしょうか?

タブ区切りになっていれば、ファイルをドラッグ&ドロップするだけで、
ご希望の形式でEXCELに展開されると思います。

この回答への補足

再度のご回答ありがとうございます。
教えていただいた事を試してみました!・・・
が、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.これより後は、希望手順と同じ。

以上ですが、わかりますか?

補足日時:2005/09/13 18:01
    • good
    • 0

データ-外部データの取り込み-テキストファイルのインポート


から、#1さんのテキストファイルウィザードを実行してみてください。
貼り付けられたセルを選択して「データの更新」とすると元のファイルの内容を再び読み込みます。

「データベースクエリ」でも同じことができそうですが、空白区切りの処理の仕方がわかりませんでした。
    • good
    • 0

ご質問は単純に



テキストをリンク貼り付けしたい・・・ということですか?
その場合、EXCELでそのデータを今後加工して使用していくという前提はあると考えていいのでしょうか?

それとも以下のようなことでしょうか?

データ入力されたソフトが存在。
そこからテキスト書き出しで何種類かテキストファイルを作成した。
EXCELで読み込むとファイル量が多いので処理が大変。

データ入力してあるソフトから自動的にEXCELに読み込む方法がしりたい。

どちらでしょう・・・?

この回答への補足

ご回答ありがとうございます。
テキストをリンク貼り付けしたい・・・
と、言う事ですね。正確に申しますと、リンク貼り付けの操作を手動ではなく自動でなのです。

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

補足日時:2005/09/13 16:41
    • good
    • 0

Excelを先に起動し、ファイルメニューから開くを選択して、上記のようなテキストファイルを指定してあげると、データの変換ウィザードが出てきます。


これで区切り文字をスペースとして選択してやるとエクセルの形式で開くことが出来ます。

1 12 123 1234
というファイルの場合、
セルA1に「1」、B1に「12」、C1に「123」、D1に「1234」
となります。

あとはエクセル形式で保存してあげるだけです。


と、こういう回答でよかったのでしょうか?
検討違いだったらすいません。

この回答への補足

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

補足日時:2005/09/13 15:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!