#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点目 問)インポートの際に邪魔になりそうなものはありませんか? 捕)特にありません。 この場をお借りして・・・ この様な稚拙な質問に対し皆様方には大変役立つご回答して頂き、ありがとうございます。 今回の内容を自分なりにもう一度考えて、また必要な時に再質問させて頂きますので、いったん、閉めさせて頂きます。