
Aというテキストファイルがあります。
そのファイルのは、
1 12 123 1234
という様なスペースで分けられた文字列が並んでいます。
これを、新規作成したEXCELファイルで読み込みたいのですが、出来ますでしょうか?
現状は、テキストファイルをスペース区切りでEXCELに変換しているのですが、ファイル量が多くなりそうで手間がかかります。
ですので、テキストファイルから直接読み取りEXCELに貼り付けたいのです。(自動リンクのイメージでリンク元がAというテキストファイル)
以上、ご教示お願い致します。
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
丁寧なご説明ありがとうございます。
やはり、VBAになりますかぁ・・・
◆1点目
問)テキストファイル毎に1枚のシートにするのですか?
捕)できればそうしたいと考えています。理由は、内線の発呼が2千/日以内と決まっているわけでは無い為、#8様が仰るように、1つのシートにまとめると行数不足になる恐れがあるためです・・・
◆2点目
問)処理効率からの点で・・・
捕)やはり、インポートしないと無理ですか・・・
自動作成される課金レポートの中身は以下のようになっています。
・内線番号 通話日時 発信先
↑このフォーマットでその日のうちの発呼分(おおよそ2千)
これを、インポートすればそれぞれ、A1,B1,C1に入ってくれるので、後は普通に計算できるのですが、これではこのインポート作業を1ヶ月分(30ファイル)行う必要がありますよね?ただこれを、#5様にご教示頂いたソフトで一括ファイルにしてしまえば1回のインポートで済むのですが、行数に不安があります。
なので、できるならば、インポートせずに(テキストファイルをいじることなく)計算用ファイルに1ファイル/1シートで読み込ませたかったのです・・・
◆3点目
問)インポートの際に邪魔になりそうなものはありませんか?
捕)特にありません。
この場をお借りして・・・
この様な稚拙な質問に対し皆様方には大変役立つご回答して頂き、ありがとうございます。
今回の内容を自分なりにもう一度考えて、また必要な時に再質問させて頂きますので、いったん、閉めさせて頂きます。
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行目に見出しなり、インポートの際に邪魔になりそう
なものはありませんか?
No.7
- 回答日時:
>、1つのセルに全ての列が入ってしまいました・・・(;_;)
これは、タブ区切りではないという
これは当たり前。
この後、メニューのデーターデータ区切り、でスペースを区切りに指定して
ウイザードの指示に従えば、各フィールドに分離してくれます。
>ファイル量が多くなりそうで手間がかかります
上記操作はデータ量で差が出るものではない。
No.6
- 回答日時:
#5です。
1個のテキストファイルを1枚のシートにするのかな?だとすると#5は関係ないので無視してください。#4さんのおっしゃるようにTABにすれば簡単だと思います。No.5
- 回答日時:
問題がよくわからないのですが、テキストファイルが多くてExcelでいちいち開くのが大変、ということですか?
テキストファイルを1つにまとめていっぺんに処理するのではだめなのかな?
開き方は#1、#3さんのやり方で。
質問を読むと空白で区切るのが大変、ともとれるのですが...
↓テキストファイルをまとめるツール
参考URL:http://www.vector.co.jp/soft/win95/util/se347042 …
No.4
- 回答日時:
#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.これより後は、希望手順と同じ。
以上ですが、わかりますか?
No.3
- 回答日時:
データ-外部データの取り込み-テキストファイルのインポート
から、#1さんのテキストファイルウィザードを実行してみてください。
貼り付けられたセルを選択して「データの更新」とすると元のファイルの内容を再び読み込みます。
「データベースクエリ」でも同じことができそうですが、空白区切りの処理の仕方がわかりませんでした。
No.2
- 回答日時:
ご質問は単純に
テキストをリンク貼り付けしたい・・・ということですか?
その場合、EXCELでそのデータを今後加工して使用していくという前提はあると考えていいのでしょうか?
それとも以下のようなことでしょうか?
データ入力されたソフトが存在。
そこからテキスト書き出しで何種類かテキストファイルを作成した。
EXCELで読み込むとファイル量が多いので処理が大変。
↓
データ入力してあるソフトから自動的にEXCELに読み込む方法がしりたい。
どちらでしょう・・・?
この回答への補足
ご回答ありがとうございます。
テキストをリンク貼り付けしたい・・・
と、言う事ですね。正確に申しますと、リンク貼り付けの操作を手動ではなく自動でなのです。
詳細をいいますと、
社内電話の課金日報レポートが毎日01:00のテキストファイルで作成されます。(おおよそ2千行)
これを内線番号別に料金を割り振る為、EXCELで計算したいのですが、元データーがテキストファイルなので、いったん、No1,3様が仰る操作でEXCELベースに変換させて、文字列を認識させていますが、課金情報で必要なのは1ヶ月単位の為、月末に処理する事となり、毎月30又は31日のテキストファイルを繰り返し変換して認識させなければならず面倒です(^_^;
従って、料金計算用のEXCELファイルにはあらかじめ、リンク元を指定入力しておき、(A1にテキストファイル名+データー入力セル?)月末のファイルが出揃った時に一括して30ないし31のテキストファイルを料金計算用EXCELファイルの指定したフォルダに入れる事で自動計算したい・・・という事なのですが、意味わかりますか?
尚、自動作成される課金レポートファイル(テキスト)名は、
D年月日です。
例えば、2005/09/01ですと、
D050901となります。
以上です。
No.1
- 回答日時:
Excelを先に起動し、ファイルメニューから開くを選択して、上記のようなテキストファイルを指定してあげると、データの変換ウィザードが出てきます。
これで区切り文字をスペースとして選択してやるとエクセルの形式で開くことが出来ます。
1 12 123 1234
というファイルの場合、
セルA1に「1」、B1に「12」、C1に「123」、D1に「1234」
となります。
あとはエクセル形式で保存してあげるだけです。
と、こういう回答でよかったのでしょうか?
検討違いだったらすいません。
この回答への補足
早速のご回答ありがとうございます。
私の説明不足で申し訳ありません。
No1ご回答者様の方法はごもっともなのですが、この方法ではテキストファイルが多い場合大変です。
なので、テキストファイルを開くことなく、読み込み、ご回答者様が仰るような配列(A1に1,B1に12・・・)で表示したいのです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】指定フォルダに格納中のテキストファイルをエクセルで処理し結果のエクセルを新規フォルダに保存 1 2022/03/25 14:19
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/08/08 11:02
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/03 13:18
- その他(プログラミング・Web制作) 【python】Excelファイルを読み込む際の日付の表示形式を任意にする 2 2022/11/24 14:21
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:48
- UNIX・Linux テキストファイルをページ番号付きでコマンドラインから印刷したい 1 2023/02/22 12:47
- Excel(エクセル) csvファイルをExcel形式で読み込むには 2 2023/07/03 13:09
- Visual Basic(VBA) VBAでエクセルをtxtに変換するとエクセルでカンマを含む文字数字がtxtでは「""」付にならないよ 1 2022/08/27 12:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Microsoft 365 Basic サブスク...
-
ACCESS VBA でのエラー解決の根...
-
Arduinoで温湿度と時刻を1分ご...
-
AccessのクエリをSQL文に変換す...
-
access2019の起動が遅い
-
Accessのスプレッドシートエク...
-
提供されるデータの形式が変わ...
-
access フォーム 大分類、小分類
-
お助けください
-
Accessでフォームに自動入力し...
-
Access Error3061 パラメータが...
-
Access VBA [リモートサーバー...
-
Microsoft Accessをクレジット...
-
Accessで作ったデータベースをw...
-
accessデータを指定したExcel、...
-
【至急・画像あり】建物or住所...
-
CSVファイルの「0落ち」にVBA
-
Access の SetFocus について教...
-
Accessのクエリの結果を、既存...
-
Accessのクエリで、replace関数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ATTファイルってどうやって開け...
-
テキストファイルの一部分を抽...
-
テキストファイル固定長データ...
-
VB(VBA)で、バイナリデータを使...
-
バイナリデータの中からMidのよ...
-
WORDのVBAで差し込み印刷時、デ...
-
Excel VBAが徐々に遅くなる
-
既存のテキストファイルを開く方法
-
C言語のソースからコメントを抜...
-
VBSでテキストファイルの2行目...
-
エクセルVBAでメールの自動作成...
-
wav ファイルから音声を数値デ...
-
ファイル変換
-
テキストファイル(英語&日本...
-
[VB.NET] 処理の高速化を行いた...
-
テキストファイルをSQLServerデ...
-
VBA。開いているテキストファイ...
-
テキストファイルの特定行の削...
-
VBscriptでWebサイトから取得し...
-
テキストファイルを読んで、Exc...
おすすめ情報