VBS、素人というか事務部門なので、なじみがなく、
現在、本を見ながら勉強しております。
下記の事務処理を行いたいのですが、どなたか
申し訳ございませんが、ご教授願えませんでしょうか。(VBAにしたいのですが、excel使ってない為、VBS)
入力データは、行単位読込み。
入力データがなくなるまでloopさせてます。
if instr(xxxx,"111") = など検索文字がhitしたら
各Box(配列?)に出力し、各列、111or000~444を
1レコードとして出力させたいのですが、Do~loop
の中の、抜き出し条件をどの様にしてよいのか、
(現在、行読込みで、各出力レコードに出来る222を
ブレークポイントとして、取り合えず作成中…)
知りたい事
□始まりの、000or111、条件処理
(出力2レコード目無い場合が有るので)
□出力3レコード目、列(4)(5)333,444繰返し処理
(再度、333,444が出てきた場合)
入力データ+++++
111
222
333
222
333
000
222
333
444
999
333
444
~
出力結果イメージ(こうしたい)+++++
列(1),列(2),列(3),列(4),列(5)
111,222,333
,222,333
000,222,333,444,333,444
~
追記++++++++++
111or000は列(1)(nohitは空白)
222は列(2)
333は列(3)
再度、出てくる333は列(4)
再度、出てくる444は列(5)
No.3ベストアンサー
- 回答日時:
もしかして条件が足りないところがあるかも知れませんが、
今まで聞いた条件だと次のような感じでいいと思います。
----------------------------------------------------------------
Dim fso, fileIn, fileOut
Dim inLine, outLine, code, already222
Set fso = CreateObject("Scripting.FileSystemObject")
Set fileIn = fso.OpenTextFile("input.txt")
Set fileOut = fso.CreateTextFile("output.txt")
outLine = ""
already222 = False 'レコードに既に222が出現しているかどうかを表す
Do Until fileIn.AtEndOfStream
inLine = fileIn.ReadLine
code = Left(inLine, 3) '行の先頭3文字がコード
Select Case code
Case "000", "111"
If outLine <> "" Then
fileOut.WriteLine(outLine)
End If
outLine = code
already222 = False
Case "222"
If already222 And outLine <> "" Then
fileOut.WriteLine(outLine)
outLine = ""
End If
outLine = outLine & "," & code
already222 = True
Case "333","444"
outLine = outLine & "," & code
Case Else
'999等のコードは無視
End Select
Loop
If outLine <> "" Then 'データが残っていたら掃き出す
fileOut.WriteLine(outLine)
End If
fileOut.Close
fileIn.Close
答えまで出して頂き、有難うございます。
正直、自分ではこのような考えには到底辿り
つきませんでした。
(Do~loopを2回ほど、他、ifがなんだか多すぎて
途中で訳が解からず…。)
今後、BLUEPIXYさんコードを参考に精進致します。
有難うございました。
No.2
- 回答日時:
>□999 の場合はどうなるのでしょうか?
>■999は、333,444が再度出てくる場合のみ、333の直前の行になります。
結局、
質問文の例で言うと、捨てられるということで良いのでしょうか?
>000,222,333,444,333,444
では、999は、捨てられているようですが・
この回答への補足
引き続きのご質問ありがとうございます。
出力レコードに必要な入力データは
000
111
222
333
444
となります。
999は、2回以上の333,444が出る際、直前に999
が出る為、判別用に使用できるかなと思いまして。
【999は必要なレコードでは有りません。捨てです】
列(1) 000 or 111 or 空白
列(2) 222
列(3) 333
列(4) 444
列(5) 333
列(6) 444
~
列(@) 333 ※333,444が複数有る場合。
列(@) 444
※上記出力レコードのフィード埋め込みの終わりは
(1レコード)、次の列(1)000 or 111が出るまで、
及び、222が出るまでとなります。
(000 or 111が必ず出るとは限りません、
000 or 111がなく222からはじまる場合も有り。
その場合、空白を埋め込む)
素人考えですみません。先に出力レコードのレコード
番号を採番する為、ナンバリングさせようと考えてい
る所でした。
ただ、2回以上出る場合の333,444の処置、及び、
000,111の処置が難問です。
i = 0
Do Until objin.atendofstream = True
linedata_temp = objin.readline()
if instr(linedata_temp,"000") or _
instr(linedata_temp,"111") then
i = i + 1
objOut.WriteLine i & " " & linedata_temp
else
~
end if~
~
loop
objin.close()
objOut.close()
No.1
- 回答日時:
999 の場合はどうなるのでしょうか?
000, 111, 222, 333, 444 の5種類以外のデータがあるということですか?
>if instr(xxxx,"111") = など検索文字がhitしたら
一行のデータは、"111" ではなくて、一部に"111"が含まれるということですか?
列(1),列(2),列(3),列(4),列(5)
000,222,333,444,333,444
でいうと、
再度、出てくる333は列(4) は、列(5)
再度、出てくる444は列(5) は、列(6)
のような気がします。
222 は、再度でてくる可能性はないということですよね。
この回答への補足
説明が不十分な為、大変お手数をお掛け致します。
□999 の場合はどうなるのでしょうか?
■999は、333,444が再度出てくる場合のみ、333の直前の行になります。
□一行のデータは、"111" ではなくて、一部に"111"が含まれるということですか?
■はい、"111"は読込む行の頭に必ず出てきます。(例:111 ○△□XXXXX~)
□再度、出てくる444は列(5) は、列(6)
■申し訳ございません。おっしゃる通りでございます。
再度の333は列(5)、444は列(6)です。
111,222,333
空白,222,333
000,222,333,444,333,444
□222 は、再度でてくる可能性はないということですよね。
■はい、222の後は、一回以上の222,333となります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) Excelの関数について 3 2022/11/13 23:47
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- その他(Microsoft Office) Excelの関数(FILTER関数)について教えてください 2 2023/07/31 16:11
- Visual Basic(VBA) Excel VBA 複数ブックシートごとにデータを統合する方法について 4 2022/05/20 14:23
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
VBAを使って検索したセルをコピ...
-
vba 2つの条件が一致したら...
-
【VBA】2つのシートの値を比較...
-
エクセルVBA シートモジュール...
-
VBAのFind関数で結合セルを検索...
-
B列の最終行までA列をオート...
-
VBAで、特定の文字より後を削除...
-
文字列の結合を空白行まで実行
-
データグリッドビューの一番最...
-
VBA 値と一致した行の一部の列...
-
vbaでシートより100より大きい...
-
VBAで10行おきにセルの下に罫線...
-
VBA UserFormからの転記で
-
Changeイベントでの複数セルの...
-
セルに値が入っていた時の処理
-
VBA 何かしら文字が入っていたら
-
URLのリンク切れをマクロを使っ...
-
C# dataGridViewの値だけクリア
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報