Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


4256 / 13644 ツリー ←次へ | 前へ→

【57630】txtファイル出力の際に、出力する行を指定したい くりぃむ 08/9/6(土) 2:33 質問[未読]
【57633】Re:txtファイル出力の際に、出力する行を指... Yuki 08/9/6(土) 9:52 発言[未読]
【57634】Re:txtファイル出力の際に、出力する行を指... kanabun 08/9/6(土) 9:53 発言[未読]
【57652】Re:txtファイル出力の際に、出力する行を指... くりぃむ 08/9/7(日) 0:06 お礼[未読]

【57630】txtファイル出力の際に、出力する行を指...
質問  くりぃむ E-MAIL  - 08/9/6(土) 2:33 -

引用なし
パスワード
   はじめまして。最近になってVBAを少しかじり始めた者です。
実は今、ユーザーフォームを用いて、wikiの「テーブル」とその中に納まるデータを
txtファイルに出力するマクロを作成しています。

ある程度は完成にこぎつけたのですが、追加したい昨日の中でどうしても
わからない部分が出来てしまったので、質問させてください。


大まかなマクロの進行としては、

マクロ実行

(ユーザーフォームにて各データ入力)

(CommandButtonにて入力完了、データの正誤チェック)

(ファイルの有無確認、なければ新規作成)

ファイルOpen

ファイルにwikiテーブルのフォーマットを書き出し

書き出したい行に、入力したデータをwikiテーブルの形に合わせて追記

ファイルClose

マクロ終了

以前は「入力したデータをファイルの最終行に追記する」という作業だけだったのですが、この作業を「ファイル内の指定した行から追記する」というものに置き換えたいのです。

とはいえ、現在使用しているOpen 〜 For Append As #〜 では(私の知る限り)上記のような動作を再現する方法が思いつきません。

具体的には、

テーブルA
--------------------------
|テーブルAのフォーマット|
--------------------------
|データA-A0,A-B0,A-C0…|
--------------------------
|データA-A1,A-B1,A-C1…|
--------------------------

テーブルB
--------------------------
|テーブルBのフォーマット|
--------------------------
|データB-A0,B-B0,B-C0…|
--------------------------
|データB-A1,B-B1,B-C1…|
--------------------------
               ←ここに|データB-A2,B-B2,B-C2…|を挿入する

テーブルC
--------------------------
|テーブルCのフォーマット|
--------------------------
|データC-A0,C-B0,C-C0…|
--------------------------
|データC-A1,C-B1,C-C1…|
--------------------------

というような形式を、一つのtxtファイルに出力したいと思っています。

どのようなメソッド、あるいはステートメントがあれば、このようなことが実現できるでしょうか?
何か方法がありましたら、ぜひともお教えください。
よろしくお願いいたします。

【57633】Re:txtファイル出力の際に、出力する行を...
発言  Yuki  - 08/9/6(土) 9:52 -

引用なし
パスワード
   ▼くりぃむ さん:
こんにちは。

考え方として

テーブルA 用のファイル
テーブルB 用のファイル
テーブルC 用のファイル
のテキストファイルを作成して
変更のあった時は各々のテキストファイルを更新

その後で下記を実行
生成されるファイル名は
  strFnm = "D:\Table.txt"
になります。

Sub TESTAdd()
  ' ファイルの結合
  Dim WSH   As Object
  Dim strFnm As String
  Dim strFnm1 As String
  Dim strFnm2 As String
  Dim strFnm3 As String
  Dim pID   As Long
  
  strFnm = "D:\Table.txt"   ' 生成されるファイル
  strFnm1 = "D:\TableA.txt"  ' Data File 1
  strFnm2 = "D:\TableB.txt"  ' Data File 2
  strFnm3 = "D:\TableC.txt"  ' Data File 3
  
  Set WSH = CreateObject("WScript.Shell")
  pID = WSH.Run("CMD.Exe /c Copy " & strFnm1 & " + " & _
                    strFnm2 & " + " & _
                    strFnm3 & " " & _
                    strFnm, 0, True)
  MsgBox "End"
End Sub

考え方の一つとして下さい。

【57634】Re:txtファイル出力の際に、出力する行を...
発言  kanabun  - 08/9/6(土) 9:53 -

引用なし
パスワード
   ▼くりぃむ さん:
テキストファイルは、どのような形式にしろ、
改行コードを含むひと続きの文字列と考えることができます。
なので、テキストファイルの編集は、
基本的には、
文字列操作です。

たとえば、
> 「入力したデータをファイルの最終行に追記する」という作業
> 〜 For Append
は、文字列操作でいえば、

 Dim SS As String
 SS = 現在の文字列
 SS = SS & 追加する文字列

に相当します。

同じ道理で、
> 「指定した行から追記する」
は、文字列操作でいえば、

 Dim SS As String
 Dim InsSS As String
 SS = "ABC↓DDD↓GGGGGG↓XXX↓" '現在の文字列
 InsSS = "KKK↓" '追加する文字列
 SS = Left$(SS,8) & InsSS & Mid$(SS,(+1)

という操作に相当します。
▼テキストファイルの3行目に追加後
"ABC"↓
"DDD"↓
"KKK"↓
"GGGGGG"↓
"XXX"↓     (↓は改行コード)
        
文字列の途中に別の文字列を挿入したり、
テキストファイルの行の途中に別のテキストを挿入したり
するときには、「どこに」挿入するのかが特定できていないと
いけないということです。
それが分かっていれば、
元のテキストファイルをOpenして(#o)
仮のテキストファイル(#n)に、
1. 挿入したい行まで
 Line Input #o,で読み込んでは別ファイルにPrint #n, を繰り返し、
2. 挿入したい行で 挿入テキストを 別ファイルに Print #n,
3. 残りの行を 別ファイルにPrint #n,
4. 元ファイルを KILL して、別ファイルの名前を元ファイル名に
  Rename
するという手順になります。

【57652】Re:txtファイル出力の際に、出力する行を...
お礼  くりぃむ E-MAIL  - 08/9/7(日) 0:06 -

引用なし
パスワード
   Yuki様、kanabun様、ありがとうございます。
助言を参考に、何とか完成にこぎつけることができました。

Yuki様の考え方を参考に、分割したファイルを結合して最終的なtxtファイルを作成することにしました。
バックアップや、手作業での編集で利点が多いと判断しました。

とりあえずは完成ですが、今度は「テーブル内のデータを上書き」することを目標に組み立ててみようと思います。
その際は文字列操作の概念が利用できそうです。

この質問に関しては解決とさせていただきます。
ご協力、ありがとうございました。

4256 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free