[リストへもどる]   [VBレスキュー(花ちゃん)]
一括表示

投稿時間:2006/12/18(Mon) 20:35
投稿者名:りっきー
Eメール:
URL :
タイトル:
複数のテキストボックスの内容を1つのcsvファイルへ
このHPに大変お世話になっています。
数ヶ月前からVBでプログラムを組んでいる者です。

VB6.0を使用しています。
TextBoxには、縦に数値が並んで表記しています。
今、Command3をクリックして、
TextBox2とTextBox3に表示された文字列を
csvファイルとして保存しようとしています。
そして、エクセルでcsvファイルを表示したときに、
TextBox2の内容をA列に、TextBox3の内容をB列に表示させたいのですがうまくいきません。

どのようにすればよいでしょうか。
よろしくお願いします。





現段階では、エクセルでcsvファイルを表示したときに、
A列にTextBox2の内容、TextBox3の内容が続けて表示されることしかできていません。
以下のソースです。

Private Sub Command3_Click()
    'テキストボックスの内容を丸ごと保存
    intFileNo = FreeFile
    Open "sample_01.csv" For Output As #intFileNo
    'テキストボックスの内容をそのまま保存
    Print #intFileNo, Text2.Text + Text3.Text
    Close #intFileNo
End Sub

投稿時間:2006/12/18(Mon) 20:57
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re: 複数のテキストボックスの内容を1つのcsvファイルへ
CSV なら、列区切のカンマが必要ですから、
>     Print #intFileNo, Text2.Text + Text3.Text
ではなく、
      Print #intFileNo, Text2.Text "," Text3.Text
      Print #intFileNo, Text2.Text; ","; Text3.Text
      Print #intFileNo, Text2.Text & "," & Text3.Text
のいずれかの方法を使い、「,」もデータの一部として出力すればよいかと。

投稿時間:2006/12/18(Mon) 21:13
投稿者名:りっきー
Eメール:
URL :
タイトル:
Re^2: 複数のテキストボックスの内容を1つのcsvファイルへ
ありがとうございます。

ご指摘いただいた方法を試したのですが、

TextBox2に、
21
32
10

TextBox3に、
51
42
18

となっているとき、エクセルでは、

  A   B
1  21
2  32
3  10   51
4  42
5  18

と表示されてしまいます。

説明不足で申し訳ないのですが、
以下のように表示したいです。

  A   B
1  21   51
2  32   42
3  10   18


よろしくお願いします。

投稿時間:2006/12/18(Mon) 21:41
投稿者名:あきら。
Eメール:
URL :
タイトル:
Re^3: 分解方法案(追記訂正しました)
テキストBOXの文字列を一文字づつ見ていき、
データの最後かVBCRLFの前までをMIDで取り出し、
魔界の仮面弁士さまの方法で分解後のものを書き出せばいいと思われます。
この分解部分をサブルーチン化して(引数渡しで一つにできます)、
あらかじめ配列にセットしておけば、
処理が単純明快になると思われます。

もしかするとCR=CHR(13)、LF=CHR(10)でないとできないかもしれません。
これらの特殊コントロールキャラクターは、
VBで専用の名前があるのかもしれません。
ヒントはVBCRLF=CHR(13) & CHR(10)です。
改行もラインフィードも、
目でそう見えるようにパソコン側でコントロールしているだけで、
データの実態は普通に横に並ぶ単なる文字列です。

記事訂正・追記しました。

投稿時間:2006/12/19(Tue) 12:02
投稿者名:りっきー
Eメール:
URL :
タイトル:
解決できました
魔界の仮面弁士さん、あきら。さん、ありがとうございました。

まだVB歴がちょっとなのでわからない個所が多々ありますが、
とりあえず、魔界の仮面弁士さんのソースをコピーさせてつかわさせていただき、
解決することができました!

あきら。さんのおっしゃってくださった内容も
魔界の仮面弁士さんのおっしゃってくださった内容も
もう少し調べて理解したいです。

どうもありがとうございました。

投稿時間:2006/12/19(Tue) 16:22
投稿者名:あきら。
Eメール:
URL :
タイトル:
Re: 解決できました
> あきら。さんのおっしゃってくださった内容も
> 魔界の仮面弁士さんのおっしゃってくださった内容も
> もう少し調べて理解したいです。

りっきーさま、内容的には魔界の仮面弁士さまと同じですが、表現方法が違います。
いやぁ、便利な命令あるんですね…。(^-^;)
ただ、命令(やりたい事)の中身を考えられれば、
最小限の知識の命令で処理を実現できます。
私のような中年世代は、
そうやってシステムを構築するように上司に言われていました。
魔界の仮面弁士さま、ありがとうございました。

投稿時間:2006/12/19(Tue) 09:57
投稿者名:魔界の仮面弁士
Eメール:
URL :
タイトル:
Re^3: 複数のテキストボックスの内容を1つのcsvファイルへ
> 説明不足で申し訳ないのですが、
MultiLine でしたか。
さすがに、そこまで読み取ることは出来ませんでした。(^_^;)

とりあえず、こうかな。


'それぞれを改行で区切る
Dim col1() As String, col2() As String
col1 = Split(Text2.Text, vbCrLf)
col2 = Split(Text3.Text, vbCrLf)

'区切った個数を調べる
Dim upper1 As Integer, upper2 As Integer, maxUpper As Integer
upper1 = UBound(col1)
upper2 = UBound(col2)
maxUpper = IIf(upper1 < upper2, upper2, upper1)

'出力
Dim index As Integer
For index = 0 To maxUpper
    Print #intFileNo, Tab(1);
    If index <= upper1 Then
        Print #intFileNo, col1(index);
    End If
    Print #intFileNo, ",";
    If index <= upper2 Then
        Print #intFileNo, col2(index);
    End If
Next