急いでいます。どなたかお助け下さい>< ACCESS2003 VBAに関する質問です。


ソースは下記のとおりです。
Sub RemoveDoubleComma()
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
Dim i, data
Dim k
i = 14
k = 10
Dim filePath
filePath = "\\SERVER\メンテNO" & i & ".txt"
DoCmd.TransferText acExportDelim, "TメンテNO" & k & " エクスポート定義", "TメンテNO" & k, filePath

Sleep 300
Dim fileContents
With fso.OpenTextFile(filePath)
fileContents = .ReadAll()
.Close
End With

Sleep 300
Do While InStr(fileContents, ",,") > 0
fileContents = Replace(fileContents, ",,", ",")
Loop
fileContents = Replace(fileContents, vbNewLine & ",", vbNewLine)
fileContents = Replace(fileContents, "," & vbNewLine, vbNewLine)

With fso.CreateTextFile(filePath, True)
.Write fileContents
.Close
End With
End Sub

テキストファイルの中身は下記のとおりです。
"46824","2","201","20110320","99999999","52","202","20110320","99999999","52","203","20110320","99999999","52","204","20110320","99999999","52" ←OK
"46824","3" ←NG削除
「"46824","3"」←カンマ含み全部で11文字の行の場合は行を削除したいのです。
上のソースに追加して下さい><

宜しくお願いします。

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2011/03/22 14:13:07
  • 終了:2011/03/22 16:00:47

ベストアンサー

id:Mook No.1

Mook回答回数1312ベストアンサー獲得回数3912011/03/22 14:56:04

ポイント100pt

先ほどのは誤記以外は問題なかったのでしょうか?


また、今回の要望も厳密に11文字と一致するという条件だけでよいのですか?

この辺り軽微な話なので、ご自身で調整できるのであれば良いですが。

.Write fileContents

Dim line
For Each line In Split( fileContents, vbNewLine )
    If Len( line ) <> 11 Then .WriteLine fileContents
Next

に置き換えてどうでしょうか。

id:hogehoho

カンマ外れて良い感じなのですが。

データが繰り返し表示されるようになったのと、11文字でも出力されています><

"46824","3","201","20000101","20110319","51","202","20000101","20110319","51","203","20000101","20110319","51","204","20000101","20110319","51"

"46824","3","205","20000101","20110319","51","206","20000101","20110319","34"

"46824","3","756","20000101","20110319","54"

"46824","3"

"46824","3","201","20000101","20110319","51","202","20000101","20110319","51","203","20000101","20110319","51","204","20000101","20110319","51"

"46824","3","205","20000101","20110319","51","206","20000101","20110319","34"

"46824","3","756","20000101","20110319","54"

"46824","3"

"46824","3","201","20000101","20110319","51","202","20000101","20110319","51","203","20000101","20110319","51","204","20000101","20110319","51"

"46824","3","205","20000101","20110319","51","206","20000101","20110319","34"

"46824","3","756","20000101","20110319","54"

"46824","3"

2011/03/22 15:28:48
  • id:hogehoho
    もしかして、先ほどは回答出来なかったですか??それなら申し訳ございません。ポイント支払うので回答をお願いします。
  • id:taknt
    先ほどのは 何だったんですか?
  • id:hogehoho
    先ほどのは
    .Write fileContents  ←正しい
    .Wite fileContents  ←間違い r アールが抜けていました><
  • id:Mook
    上記の誤記は前回の回答でコメントにて修正させていただいた点でしたが、
    解答欄だけでなく、コメント欄を参照いただければと思います。
  • id:windofjuly
    うぃんど 2011/03/22 15:09:50
    >先ほどは回答出来なかったですか?
     
    回答前の状況確認の段階でしたね
    質問欄では手間も時間もかかるのでコメントで事前に確認できることを確認しておこうということです
    質問をキャンセルしてしまったため id:Mookさんからのコメントも消えてしまいましたが、
    次回からはキャンセルではなく、回答受付を中止(締切)状態にして回答されてしまうのを防ぎつつ、
    どうして締め切ったのかの理由を書いておくなどすれば、互いに状況をつかみ易くて良いでしょう

    最初の質問( http://q.hatena.ne.jp/1300163610 )では、
    id:Mook さんがいろいろな状況を考慮してコードを書かれたのですが、
    今回提示されたサンプルデータを見る限り、コードはもっともっと簡単になると思われます

    サンプルデータから推測したパターンですが、下記の5種類のいずれかにおさまるのではありませんか?
    (1)"46824","2"
    (2)"46824","2","201","20110320","99999999","52",,,,,,,,,,,,
    (3)"46824","2","201","20110320","99999999","52","202","20110320","99999999","52",,,,,,,,
    (4)"46824","2","201","20110320","99999999","52","202","20110320","99999999","52","203","20110320","99999999","52",,,,
    (5)"46824","2","201","20110320","99999999","52","202","20110320","99999999","52","203","20110320","99999999","52","204","20110320","99999999","52"
    前回までの質問では末尾のカンマを取り除く作業
    そして今回新たに付け加えたのが(1)の場合は行全体を削除ということではありませんか?

    上記であればInStrRev関数で一番末尾の",を探し出し、LEFT関数で、それよりも左側の部分だけを残せば良いという処理にすれば良いですし
    そのあとでLEN関数で文字数を数えて11文字(改行コードも含めると12文字になる場合もある)ならすべて消去という手順だけとなります
     
    今から出張に出かけるので、このあとの対応は他の方にお任せしますが、何をしたいのかをもうちょっと具体的にしてみてくださいな
    (消えてしまった質問のコメント欄にも書いたのですが、私の推測が正しければ1つに結合するクエリを作ってエクスポートするようにしたほうが楽だと思いますね)
  • id:hogehoho
    ありがとうございます。
    サンプルのとおり (1)(2)(3)(4)(5)のように
    5パターンになります。

    (1)の時はデータの必要がないので行ごと削除したいのです。
  • id:Mook
    .WriteLine fileContents
    がまちがってました。
    .WriteLine line
    にしてください。

  • id:hogehoho
    出来ました!!!ありがとうございます。
    感謝します。
  • id:sayo219sayo
    いつからここ回答欄になったっけか?
    もっとも、自分よりも優秀な回答と並べられたときの屈辱を味わいたくないという回答者もいるらしいが。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません