Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 10全般 : 指定なし)
繰り返しで行を挿入するVBSを作りたい
投稿日時: 22/03/23 15:49:17
投稿者: kentarou

仕事での困っている内容です。
あるVBSを回収することになりました。
 
内容は下記のとおりです。
 
(変更前)※CSVで保持
01,aadaaa
02,bbdbbb
03,ccdccc
04,dddddd
01,aaddaa
02,bbddbb
03,ccddcc
04,dddddd
01,aaaddd
02,bbdddd
03,cddccc
04,dddddd
01,aaadaa
02,bbbbbb
03,cccdcc
04,dddddd
 
・・・・
(変更後)CSVをVBSにドロップして
01,aadaaa
02,bbdbbb
03,ccdccc
04,dddddd
05,<NNNN>
01,aaddaa
02,bbddbb
03,ccddcc
04,dddddd
05,<NNNN>
01,aaaddd
02,bbdddd
03,cddccc
04,dddddd
05,<NNNN>
01,aaadaa
02,bbbbbb
03,cccdcc
04,dddddd
05,<NNNN>
 
05,<NNNN> をデータ数が未知のデータの04と01の間に入れるというものなのですが、
考えあぐねています。
上の形は仕事のヒントにしかなりませんが、ヒントのVBSでもいただけませんか。
 
申し訳ありませんが、よろしくお願いします。

回答
投稿日時: 22/03/23 17:10:42
投稿者: よろずや

(1) S ← 0
(2) 1行読む
(3) R ← データの左
(4) もし S > R なら S+1,<NNN> を出力
(5) S ← R
(6) 1行出力
(7) データがまだあるとき、(2) へ
(8) S+1,<NNN> を出力

投稿日時: 22/03/23 19:07:34
投稿者: kentarou

よろずや様 的を得た回答ありがとうございます。
 
 
Dim objFileSys
Dim strReadFilePath
Dim objReadStream
Dim strLine
  
'対象のファイルのパスを指定
strReadFilePath = "c:\temp\xxx.txt"
  
 
Set objFileSys = CreateObject("Scripting.FileSystemObject")
  
 
Set objReadStream = objFileSys.OpenTextFile(strReadFilePath, 1)
  
Do Until objReadStream.AtEndOfStream = True
  '1 行読み込み
  strLine = objReadStream.ReadLine
   
ここにIF分をいれるのでしょうか?←
Loop
  
objReadStream.Close
  
Set objFileSys = Nothing
 
 
 
アドバイスもらって失礼ですが、まだ、どんなIF分を入れるかなんとなくしか分かりませんが、
下記の文中に元データの数字2桁から始まるものを正規表現?で数字として
扱った方がIF分を作成しやすいのでしょうか?

回答
投稿日時: 22/03/23 21:26:01
投稿者: よろずや

(1) S ← 0
Dim S, R
S = 0
 
(2) 1行読む
Do Until objReadStream.AtEndOfStream = True
strLine = objReadStream.ReadLine
 
(3) R ← データの左
R = CLng(Split(strLine, ",")(0))
 
(4) もし S > R なら S+1,<NNN> を出力
If S > R Then
Dim OutText
OutText = Right("0" & Cstr(S + 1), 2) & ",<NNNN>"
OutStream.WriteLine OutText
End If
 
(5) S ← R
S = R
 
(6) 1行出力
OutStream.WriteLine strLine
 
(7) データがまだあるとき、(2) へ
Loop
 
(8) S+1,<NNN> を出力
OutText = Right("0" & Cstr(S + 1), 2) & ",<NNNN>"
OutStream.WriteLine OutText

投稿日時: 22/03/24 09:29:10
投稿者: kentarou

よろずや様
おかげ様でそれらしくなりました。
エラーメッセージをつぶしている作業です。
今は、『Set objReadStream = objFileSys.OpenTextFile(strReadFilePath,1) 』でつまづいています。
モードを変更してもうまくいきません。
どこが悪いのでしょうか?
また、全体的に明らかにおかしい点がありましたらお手数ですがご修正お願い致します。
 
 
Dim objFileSys
Dim strReadFilePath
Dim objReadStream
Dim strLine
Dim S, R
 
S = 0
    
'対象のファイルのパスを指定
strReadFilePath = "G:\1.開発\test"
    
   
Set objFileSys = CreateObject("Scripting.FileSystemObject")
 
   
Set objReadStream = objFileSys.OpenTextFile(strReadFilePath,1)
    
Do Until objReadStream.AtEndOfStream = True
'1 行読み込み
 strLine = objReadStream.ReadLine
  R = CLng(Split(strLine, ",")(0))
 
 Loop
  
OutText = Right("0" & Cstr(S + 1), 2) & ",<NNNN>"
OutStream.WriteLine OutText
objReadStream.Close
    
Set objFileSys = Nothing
 
※読み込むデータはCSVですが、テキストにすると先頭に”がつきました。できればCSVで読み取りたいと思います。
'理想(変更前)
'=========================
"01,"
"02,"
"03,"
"04,"
"01,"
"02,"
"03,"
"03,"
"04,"
"01,"
"02,"
"03,"
"03,"
"04,"
"01,"
'延々と続く
 
'理想(変更前)
'=========================
"01,"
"02,,"
"03,"
"04,"
"05,","<NNNN>"
"01,"
"02,"
"03,"
"03,"
"04,"
"05,","<NNNN>"
"01,"
"02,"
"03,"
"03,"
"04,"
"05,","<NNNN>"
"01,"
'延々と続く

投稿日時: 22/03/24 10:46:52
投稿者: kentarou

よろずや様
少し変えてみたものの太線部分でつまづきます。
色々検索し、該当ファイルを開いている等みつかりましたが、そのようなことはありません。
何が原因でしょうか?
 
Dim objFileSys
Dim strReadFilePath
Dim objReadStream
Dim strLine
Dim S, R
Dim OutText
S = 0
 
 
 
'対象のファイルのパスを指定
strReadFilePath = "C:\Users\100054778\Desktop\test"
    
Set objFileSys = CreateObject("Scripting.FileSystemObject")
Set objReadStream = objFileSys.OpenTextFile(strReadFilePath, 1)
 
Do Until objReadStream.AtEndOfStream = True
strLine = objReadStream.ReadLine
R = CLng(Split(strLine, ",")(0))
 
If S > R Then
OutText = Right("0" & Cstr(S + 1), 2) & ",<NNNN>"
OutStream.WriteLine OutText
 End If
 
S = R
OutStream.WriteLine strLine
 
    
 Loop
  
OutText = Right("0" & Cstr(S + 1), 2) & ",<NNNN>"
 OutStream.WriteLine OutText
 
 
objReadStream.Close
    
 Set objFileSys = Nothing
 
 
'理想(変更前)
'=========================
'"01,"
'"02,"
'"03,"
'"04,"
'"01,"
'"02,"
'"03,"
'"03,"
'"04,"
'"01,"
'"02,"
'"03,"
'"03,"
'"04,"
'"01,"
'延々と続く
 
'理想(変更前)
'=========================
'"01,"
'"02,,"
'"03,"
'"04,"
'"05,","<NNNN>"
'"01,"
'"02,"
'"03,"
'"03,"
'"04,"
'"05,","<NNNN>"
'"01,"
'"02,"
'"03,"
'"03,"
'"04,"
'"05,","<NNNN>"
'"01,"
'延々と続く

回答
投稿日時: 22/03/24 10:55:56
投稿者: Suzu

引用:
今は、『Set objReadStream = objFileSys.OpenTextFile(strReadFilePath,1) 』でつまづいています。
モードを変更してもうまくいきません。
どこが悪いのでしょうか?

 
何が うまくいかないのでしょうか?
現状が判る様にしましょうね。
 
コードをそのまま鑑みると
 「ファイルが見つかりません」のエラーメッセージが出てくる
 なのかな と推測できますが、そうでしょうか?
 
であるなら、
引用:
'対象のファイルのパスを指定
strReadFilePath = "G:\1.開発\test"

 
開こうとしているのは、csv であれば、ここの strReadFilePath の指定に拡張子がついていなければならないのでは?
 
 
引用:
※読み込むデータはCSVですが、テキストにすると先頭に”がつきました。できればCSVで読み取りたいと思います。

 
 エラーとなって実行できないのではないのですか?
 出力先の OutStream の生成がありませんが、出力できているのですか?
 
 テキストにすると ?できればCSV?
   何をもって 【テキストにする】 【できればCSV】とおっしゃっているのか
    ご説明の内容が理解できません。
 
 
引用:
CSVをVBSにドロップして

との事なので。
 
ドラッグアンドドロップをしたオブジェクトのパス取得は以下の様になります。
Set objArgs = WScript.Arguments

For i = 0 to objArgs.Count - 1
  WScript.Echo objArgs(i)
Next

 
上記を組み込むのであれば
・ドラッグアンドドロップをしたのが、「CSV」ファイルである事の確認
  (FSO の GetExtensionName 等)
・ファイルの形式が、規定通りになっているか
   (少なくとも、Split(strLine, ",")(0) が、数値かどうかの判定)
は 必要になるかと思います。

トピックに返信