• ベストアンサー

VBのファイル処理について

Dim a(10) as integer と宣言して、aの配列には0~10の値が入っています。 open "test.dat" for output as #1 でファイルに一行で書き込みたいのですが、 write #1,a(0),a(1),a(2) ・・・ のように一つづつ書くしかないのでしょうか? for i=1 to 10 write #1,a(i) というようなループをかけると、 1 2 3 4 のように縦に表示されてしまいます。 もし有効な解決法をおもちでしたらよろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

Sub test01() Dim a(10) As String Open "test.dat" For Output As #1 a(1) = "a": a(2) = "b": a(3) = "c" For i = 1 To 2 Write #1, a(i), Next i Write #1, a(i) Close #1 End Sub とすると上手く行くようなんですが。 aを文字列にし、配列要素数を3にした例です。 "a","b","c" になりました。

w99329
質問者

お礼

ありがとうございます。皆さんの意見を総合して何とかできるようになりました。

その他の回答 (3)

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.4

最初から1行にしてしまってから書き込むとか。 for i=1 to 10 str = str & a(i) Next write #1, str

w99329
質問者

お礼

ありがとうございます。皆さんの意見を総合して何とかできるようになりました。

  • Azzuri
  • ベストアンサー率68% (34/50)
回答No.3

Dim a(10) As Integer Dim i As Integer For i = LBound(a) To UBound(a) a(i) = i Next i Open "test.dat" For Output As #1 For i = LBound(a) To UBound(a) Print #1, CStr(a(i)); Next i Close #1 上記の例ではどうでしょうか。

w99329
質問者

お礼

ありがとうございます。皆さんの意見を総合して何とかできるようになりました。

  • neKo_deux
  • ベストアンサー率44% (5541/12319)
回答No.1

Print # ステートメントを使用して、 for i=1 to 10 print #1,a(i); と、 ExcelVBAヘルプより -----以下引用----- Print #filenumber, [outputlist] 引数 outputlist は、次の形式で指定します。 [{Spc(n) | Tab[(n)]}] [expression] [charpos] charpos 次の文字の出力位置を指定します。セミコロン (;) を指定すると、次の文字は最後の文字の直後から出力されます。 -----以上引用----- の[charpos]に(;)を指定すると、前の文字に続けて出力されたハズです。

w99329
質問者

お礼

ありがとうございます。皆さんの意見を総合して何とかできるようになりました。

関連するQ&A

  • 動的配列が存在(要素が有る)か否かを判定できますか?

    VBAで、「For ループが初期化されていません」エラーが発生します。 動的配列が要素0の時に発生するようです。 動的配列の要素が生成された場合だけ、Forループしたいのですが、 どうやって判定すればよいのでしょうか? ------------------------------- Dim 配列() As Integer Dim i As Integer i = 0 If (i < 0) Then ' 本当は真になったり偽になったり ReDim 配列(0 To i) 配列(i) = a + b i = i + 1 End If '' if ★★★ then '' 配列が有るか確認 For Each c In 配列 MsgBox c Next '' end if -------------------------------

  • エクセルVBA ファイル名を変えながらtxtファイルに出力する方法

    エクセルVBA初心者です 名前/科目 国語 数学 英語 合計 A 53 45 12 110 B 58 59 74 191 C 80 69 58 207 D 45 97 66 208 E 35 85 53 173 F 89 13 79 181 このシート内容を一行ずつテキストファイルに出力したいと考えております。 ファイル名を 生徒A.txt のように生徒・セルの値にしたい場合はどのようにすればよいでしょうか? 分かる範囲で書いたものを載せました アドバイスよろしくお願いします。 Sub test1() Dim ken As Long Dim i As Integer Dim j As Integer Dim fn As Integer fn = FreeFile() ken = Range("a65536").End(xlUp).Row For i = 2 To ken Open "C:\■■■.txt" For Output As #fn For j = 1 To 5 Write #fn, Cells(i, j); Tab; Next j Print #fn, "" Close #fn Next i End Sub

  • VB2005での画像処理

    各ピクセルの色情報を取得し,そのままコピーするプログラムです. 同じ大きさのPictureBox1とPictureBox2,それとButton1があります. エラーや警告は出ませんが,Button1をクリックしてもまったく動きません. 最終的にはPictureBox1を画像処理してPictureBox2に結果を表示させたいのですが,そのままコピーも出来ないため原因を探しています. A = picture1.GetPixel(i, j).ToArgb() picture2.SetPixel(i, j, color.FromArgb(A)) ではだめなのでしょうか.ご教授ください. -----以下プログラム------ Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim i As Integer Dim j As Integer Dim A As Integer Dim picture1 As New Bitmap(PictureBox1.Image) Dim picture2 As New Bitmap(PictureBox2.Image) For j = 0 To PictureBox1.Width - 1 For i = 0 To PictureBox1.Height - 1 A = picture1.GetPixel(i, j).ToArgb() picture2.SetPixel(i, j, color.FromArgb(A)) Next Next End Sub

  • VB6で配列を引数にするときの2通りの方法について

    VB6で引数に配列を渡す方法が2通りあるよう?ですが以下のような配列があり、渡し方によって引数の定義の仕方が異なると思うのですが、(2)番目の関数の書き方が知りたいです。 dim ary_dat(10) as integer (1)test_A( ary_dat ) は、sub test_A( byref ary() as integer)という関数を作れば動作することはわかりましたが、 (2)test_B( ary_dat(0) ) は、関すでどのような引数を定義すればできるのでしょうか?

  • VB2005でのファイル操作について

        Dim filedata As String Dim fileNum As Integer Dim fileName As String Dim i As Integer fileName = "C:\Paradata.txt" fileNum = FreeFile() FileOpen(fileNum, fileName, OpenMode.Output) For i = 0 To 9 filedata = data(i, 0) & "," & data(i, 1)・・・・・ PrintLine(fileNum, filedata) Next FileClose あるボタンを押しますと上記のようにテキストファイルにデータを保存しようとしているのですが、1回目のボタンクリックではエラーが無いのですが2回目以降は"別のプロセスで使用されているため、プロセスはファイル 'C:\Paradata.txt' にアクセスできません。"のエラーが発生してしまいます。いろいろと調べているのですがまだわからないのでどこがおかしいか教えてください。よろしくお願い致します。

  • VB2005 初心者です。

    文書中の番号を振りなおしたいのですが、やり方がよく分かりません。 Dim a As String=textbox1.text Dim b As Integer=a.IndexOf("【作品番号") Dim c As String=a.Substring(b,5) Dim d As Integer=c.Length Do While b <> -1 b=a.Indexof("【作品番号",b+1) d=d+5 Loop Dim f As Integer=Cstr((d-5)/5) Dim g As Integer=0 g=g+1 For h As Integer=1 To f Dim i As String=textbox1.text.Replace("【作品番号","【作品番号" & h & "】") Next 最初のループまでで文章中に【作品番号*】がいくつあるかを調べて、(f回)その回数文だけまたループを回して番号を振りたいのですが、何もおきません。 本当に初心者なので、皆さんが見たらありえない構文かも知れませんが、ご教授願います。。。 ちなみに、作品番号は2桁3桁にもなることもあり、全角の数字にしたいのです。 よろしくお願い致します。

  • VB6.0の参照渡し

    VC++6.0で作成したDLLへVBの配列を渡そうと思っています。 いくつかためしたのですが、 「配列引数は ByRef でなければなりません。」 というエラーがでてしまいます。 標準モジュール内の記述 Declare Function fncTest Lib "Test.dll" (ByRef test() As Long) As Long フォーム内 Private Sub Test_Click() dim test() as Long dim i as integer for i = 0 to 3 test(i) = i next i fncTest(Test()) End Sub とりあえず、こんな形でかいてみましたが、 Sub内のtest()の宣言方法、使用法等ご指導お願いします。

  • エクセル マクロ ループ処理の構文について

    お世話になります。エクセル初心者です。 i < j の関係があるときに、それぞれの数値をfor構文でループを回したいです。 i の数値は外部から入力される前提です。 現在、以下のような構文を考えています(istartとiendは外部から決められた数値とします)が、 この場合、jendはiend + 1とすれば良いのですが、jstartはどのように入力すれば良いでしょうか? 修正箇所を指摘(もしくは全文修正)していただけると、非常に助かります。 よろしくお願いいたします。 Sub test() Dim i As Integer Dim j As Integer Dim istart As Integer Dim iend As Integer Dim jstart As Integer Dim jend As Integer istart = 1 iend = 50 For i = istart To iend For j = jstart To jend '実行したい内容 Next Next End Sub

  • VB.NET 2次元配列

    二次元配列に関して質問があります。 二次元配列を定義します。 Dim a(,) As Integer = _ {{0, 0, 0, 0, 0, 0, 1, 1, 1}, _ {0, 0, 0, 0, 0, 1, 0, 0, 1}, _ {0, 0, 0, 0, 0, 0, 1, 1, 1}} 一次元配列を定義します。 Dim b() As Integer 一次元配列のb()に二次元配列a(,)の {0, 0, 0, 0, 0, 0, 1, 1, 1}の部分を 入れようとした場合、 どのように記載すればよろしいでしょうか? イメージ的には b = a(0) で出きると思ったのですが、 構文エラーとなってしまいます。 よろしくお願いします。

  • VBでの変数宣言は1行に2つできないのですか?

    Visual BASICで変数宣言は1行に2つ以上記述しても実際、動作します。 例 DIM A、B as Integer このように宣言すると、AもBも整数となります。 しかし、このように宣言して、この変数を Call サブプログラム名(B) のように、パラメ-タとして引き渡そうとするとエラーとなってしまうようです。 よくわからないまま、 DIM A as Integer DIM B as Integer と分けて記述したらエラーがきえたようです。 変数宣言は1行に2つ以上まとめて記述してはいけないのでしょうか? VBは Ver 5 です。

専門家に質問してみよう