お世話になります。
下記のようにSQLで出力した内容を、WriteLineで書きだす際に
1行読む毎に、前の行と比較して、同じだったら空白にしたいです。
<前>
あああ AAA 0
あああ BBB 1
いいい AAA 0
いいい CCC 0
いいい CCC 2
ううう DDD 1
↓
<後>
あああ AAA 0
空白 BBB 1
いいい AAA 0
空白 CCC 空白
空白 空白 2
ううう DDD 1
下記を実行していますが、3列目の数値部分が原因なのか
「型が一致していません」と出てしまいます。
必要な個所だけ載せます。
--------------------------------------------------------
1: For i = 1 To 3
2: testStr(i) = ts.Fields(i-1).Value
3: testStr2(i) = testStr(i)
4: if testStr(i) = testStr2(i) then
5: testStr(i) = ""
6: else
7: testStr2(i) = testStr(i)
8: end if
--------------------------------------------------------
以降
testLine=testLine とtestStr(i)を結合して出力
Nextでループ
上記のi=3(3列目)になった時、3行目「testStr2(i) = tmpStr(i)」で比較した時に
「型が一致していません」エラーが出ます。
数値の場合は何か指定が違うでしょうか。
すみませんが、ご教授頂きたくよろしくお願いします。
No.5ベストアンサー
- 回答日時:
#4 の
[#1の回答者です。] -> は、[#2....]の間違いです。
#1様、番号間違いすみません。
ともかく気になることだけが頭に残っていたもので、失礼しました。ふだん、VBSではやったことがありませんでしたので、勉強がてらやってみました。
以下の結果がこうなりました。
タブを入れましたが、見やすいように、全角空白が入っています。
あああ AAA 0
"" BBB 1
いいい AAA 0
"" CCC ""
"" "" 2
ううう DDD 1
Dim objFS
Set objFS=CreateObject("Scripting.FileSystemObject")
Set objText =objFS.CreateTextFile(myPath & "\result.txt")
ReDim testStr(3)
ReDim teststr2(3)
For i=1 To 3 '←念のために入れました。
teststr2(i)=""
Next
With Ts
j = 1
.MoveFirst
Do Until .EOF =True
For i = 1 To 3
testStr(i) = .Fields(i - 1).Value
If testStr(i) = teststr2(i) Then
testStr(i) = """""" ←空白の代わりにしました。
Else
teststr2(i) = testStr(i)
End If
Next
objText.WriteLine(Mid(Join(Teststr, vbTab),2))
.MoveNext
j = j + 1
Loop
objText.Close
MsgBox "finish!"
End With
遅くなってすみません。
ご回答ありがとうございました!
皆様のおかげで色々試しながらも、理想の動作に持って行くことができました!
本当に助かりました。
No.4
- 回答日時:
#1の回答者です。
>補足日時:2017/03/21 18:29
ロジックは分かっていないけれども、(^^;、できていますね。失礼しました。
ただ、今、気になって、VBSに移植してみたけれども、以下のコードでくだんのエラーは出ませんでしたね。どこが違うのでしょうか?
Empty と比較するからいけないのでしょうか。Empty は型の変換が利かなかったように思います。もし、それが問題なら、最初に事前に、「""」を入れておけばよいと思います。一回やれば、後は、この変数は使い回しだから、型が違うということはないと思います。
ReDim testStr(3)
ReDim teststr2(3)
With Ts
.MoveFirst
Do Until .EOF =True
For i = 1 To 3
testStr(i) = .Fields(i - 1).Value
If testStr(i) = teststr2(i) Then
testStr(i) = ""
Else
teststr2(i) = testStr(i)
End If
Next
WriteLine Join(testStr, " ") '出力は試していません。
.MoveNext
Loop
遅くなってすみません。
ご回答ありがとうございました!
皆様のおかげで色々試しながらも、理想の動作に持って行くことができました!
本当に助かりました。
No.3
- 回答日時:
>3行目「testStr2(i) = tmpStr(i)」で比較した時に
>「型が一致していません」エラーが出ます。
強引に文字列型にしてから比較してはいかがですか。
if CStr(testStr2(i)) = CStr(tmpStr(i)) then
・・・・
No.2
- 回答日時:
ややこしいですね。
(^^;少しかんがえてみました。
本格的に、VBSに入れてはいないので、ミスが残っているかもしれません。
2次配列の変数にうつして処理しました。
エラーの原因はわかりませんが、もしかしたら変数は、同じものを利用しているのではないでしょうか。私なら、最初に適当に作っておいて、それで入れ出しします。
私のほうでは、ご希望どおりにはなりましたが、さて、
ReDim teststr(2, 200)
この最初の作り方にもよりますね。
ReDim teststr(2, 200)
i = 0: j = 0
With ts
.MoveFirst
Do
teststr(i, j) = .Fields(i)
i = i + 1
If i = .Fields.Count Then
.MoveNext
j = j + 1
i = 0
End If
Loop Until j >= .RecordCount
.Close
ReDim Preserve teststr(2, j - 1)
teststr2 = teststr
i = 0: j = 0
Base = teststr(j, i)
For j = 0 To UBound(teststr)
Do
i = i + 1
If Base = teststr(j, i) Then
teststr2(j, i) = ""
Else
Base = teststr(j, i)
End If
Loop Until i >= UBound(teststr, 2)
i = 0
Next
End With
No.1
- 回答日時:
提示されたソースが良くわかりません。
不明箇所1)
3行目は
3: testStr2(i) = testStr(i)
のはずだが
3行目「testStr2(i) = tmpStr(i)」
となっている。
tmpStr(i)がいきなりでてくる。
不明箇所2)
3: testStr2(i) = testStr(i)
4: if testStr(i) = testStr2(i) then
3行目を実行した後、
4行目を実行すれば、常に等しいので、必ず、5行目が実行されるかと。
不明箇所3)
testStrとtestStr2の宣言箇所が不明なのでなんとも言えないが、
testStr(0)とtestStr2(0)は使用していないのか。
testStr(3)は、配列の範囲内に入っているのか。
回答ありがとうございます。
直接打ったため、所々記載ミスしてしまいました。
不明箇所1)不明箇所2)
まず、下記3行目は不要でした。
3: testStr2(i) = testStr(i)
tmpStr(i)も打ち間違いで、testStr(i)です。
不明箇所3)
下記で宣言しています。
Dim testStr(3)
Dim testStr2(3)
回答ありがとうございます。
直接打ったため、所々記載ミスしてしまいました。
1: For i = 1 To 3
2: testStr(i) = ts.Fields(i-1).Value
3: if testStr(i) = testStr2(i) then
4: testStr(i) = ""
5: else
6: testStr2(i) = testStr(i)
7: end if
8: Next
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- Visual Basic(VBA) ExcelVBAのマクロについて。 9 2022/05/04 14:50
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Visual Basic(VBA) VBAで最新のデータを別シートに転記する方法をお教えください。 3 2022/04/07 19:20
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
End Sub が必要です。
-
解説サイトに従ったfortran並列...
-
typedef による2重定義
-
intel fortranのエラーで困って...
-
#ifndefとかヘッダファイルにつ...
-
テンプレートクラス中のフレン...
-
2つのマクロでチェックボックス...
-
Excel・Word リサーチ機能を無...
-
UserForm1.Showでエラーになり...
-
Excel マクロ VBA プロシー...
-
一つのTeratermのマクロで複数...
-
特定文字のある行の前に空白行...
-
特定のPCだけ動作しないVBAマク...
-
メッセージボックスのOKボタ...
-
VBAでfunctionを利用しようとし...
-
教えて下さい
-
VBAでカタカナ→ローマ字の変換...
-
エクセルで別のセルにあるふり...
-
配列数式の解除
-
エクセルに張り付けた写真のフ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
End Sub が必要です。
-
pythonの条件分岐(if)
-
Excel VABについて 下記記述が...
-
43:syntax error at end of input
-
フォートランのエラーについて...
-
intel fortranのエラーで困って...
-
他クラスからForm1内コントロル...
-
Excel VBA: UserForm.Show で実...
-
AccessVBAでVLookupを使いたい
-
対応する関数ヘッダーがありません
-
VB2005でOCXを動的に呼び出すに...
-
C# IEnumerable が IEnumerable...
-
ラズパイ上の、pythonのエラー...
-
コンパイルで未定義のシンボル
-
select関数の使用方法について
-
HEW3とBorlandC++でクラス定義...
-
構造体のポインタ参照
-
VB.NETのStructureの使い方を教...
-
waveOutProc関数での定義
-
フォートラン(fortran)のエラー...
おすすめ情報
回答ありがとうございます。
直接打ったため、所々記載ミスしてしまいました。
不明箇所1)不明箇所2)
まず、下記3行目は不要でした。
3: testStr2(i) = testStr(i)
tmpStr(i)も打ち間違いで、testStr(i)です。
不明箇所3)
下記で宣言しています。
Dim testStr(3)
Dim testStr2(3)
回答ありがとうございます。
直接打ったため、所々記載ミスしてしまいました。
1: For i = 1 To 3
2: testStr(i) = ts.Fields(i-1).Value
3: if testStr(i) = testStr2(i) then
4: testStr(i) = ""
5: else
6: testStr2(i) = testStr(i)
7: end if
8: Next