リストボックスの内容をテキストに書き込む方法

このQ&Aのポイント
  • Visual Basic6.0で、リストボックスに表示している内容をテキストボックスに書き込む方法を教えてください。
  • プログラムを組んでみたところ、リストボックスの一行目の項目が複数回書き込まれてしまいます。Do UntilとLoopを入れるべきですが、入れ方がわからず困っています。
  • 初心者のため、初歩的な質問ですが、よろしくお願いします。
回答を見る
  • ベストアンサー

リストボックスの内容をテキストに書き込むには?

似たような質問が前に出ていて恐縮なのですが、そちらと多少の違いがあって解決できなかったため、質問させていただきます。 Visual Basic6.0で、リストボックスに表示している内容をテキストボックスに書き込むにはどうすればよいのでしょうか? 一応、下記のようなプログラムを自分で組んでみたのですが、なぜかリストボックスの一行目にある項目だけが複数回書き込まれてしまいます。 (Print~の位置をNext~の次にすると、一行目が一度だけ書き込まれて終了、になってしまいました。) Open filename For Output As #1 Dim lngIdx As Long Dim strData() As String ReDim strData(List.ListCount - 1) For lngIdx = 0 To List.ListCount - 1 strData(lngIdx) = List.List(lngIdx) Print #1, strData(IngIdx) Next lngIdx Close #1 Do UntilとLoopを入れるべきなのだと思いますが、どうも入れ方が悪いようで必ずプログラムが動かなくなってしまいました。 初めてまだ2ヶ月の初心者なのでかなり初歩的なことを質問しているとおもいますが、回答よろしくお願いします。

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

  • ベストアンサー
  • TAK_999
  • ベストアンサー率43% (42/96)
回答No.1

Print文で使用しているstrData配列の添え字はIngIdxですが それ以外の場所では、lngIdxとなっており、先頭がLとIで違う変数です IngIdxは初期化されていないので常に0のままですから、質問に書かれている 通りの動作になります。 余計なお世話ですが、Option Explicitで変数の宣言を強制するとこのような 不具合はなくなりますよ

mogumogumagu
質問者

お礼

迅速な回答、本当にありがとうございます。 なんとその間違いを直しただけであっさり動いてしまいました。 あまりにも阿呆な質問をしてしまい、かなりお恥ずかしいですが、今後このようなことが起こらないように精進したいと思います。 しかしこんな初歩以前の問題とはいえ、約1週間も悩んでいたので、解決して実に嬉しかったです。ありがとうございました。 Option Explicitという変数宣言はまだ使用したこと、というか見たこともないのですが、そちらのほうも調べて組んでみたいと思います。

関連するQ&A

  • リストボックスの保存2

    リストボックスの全ての項目をテキストファイルに保存する方法を、先程教えて頂きスレッドを締めてしまったのですが、新たに問題が発生したのでこちらで質問させて頂きます。 先程教えて頂いた構文でリストボックスの項目をファイルに保存する事はできたのですが、追加保存されてしまい、繰り返して実行すると同じ内容のデータが増えてしまいます。追加保存ではなく全て内容を入れ替えるにはどうしたらよいでしょうか? ----------教えて頂いた構文----------- Dim hFile As Integer hFile = FreeFile() '<< 書き込むファイルをオープン Open "C:\Text.txt" For Append As #hFile Dim nCnt As Integer nCnt = 0 Do Until (nCnt >= List1.ListCount) '<< 書き込み Print #hFile, List1.List(nCnt) nCnt = nCnt + 1 '<< カウントアップ Loop Close #hFile '<< ファイルクローズ ----------------ここまで-------------- これですと、リストボックスに 東京 大阪 名古屋 上のように3つの項目があるとして、上記のコマンドを複数回行うと 東京 大阪 名古屋 東京 大阪 名古屋 東京 大阪 名古屋 とデータが重複してしまいます。 これを回避する方法を教えて下さい。

  • リストボックスの内容を テキストファイルに出力

    エクセル vba初心者です。 (1)ini fileからデータを取得 (2)その内容のリストボックスに表示 (3)リストボックス内容をテキストボックスに出力 (2)、(3)がわかりません。 なんとなくやってたら余計にわからなくなりました。助けてください。 Private Sub CommandButton1_Click() '読込み(1)を押した時の処理 Dim listbox As String Dim strL_Data As String '取得した値 Dim n As Integer n = FreeFile    ListBox1.Clear   Open "C:\filepath.ini" For Input As #n Do While Not EOF(n) Line Input #n, listbox ListBox1.AddItem listbox Loop Close #n End Sub Private Sub CommandButton2_Click() '書込み(1)を押した時の処理  Dim listbox As String Dim strL_Data As String '取得した値 Dim n As Integer n = FreeFile    Open "c:\example.txt" For Output As #n Print #n, strL_Data Close #n End Sub よろしくお願いいたします。

  • Excel VBA リストボックスについて

    現在エクセルのVBAを勉強中の 超初心者なのですが、 リストボックスを使うコードでエラーが出て どう直したらいいかわかりません。 下記コードをどのようになおしたらいいでしょうか? 回答、よろしくお願いいたします。 エラー内容は、実行時エラー381 Listプロパティを設定できません。プロパティの配列のインデックスが無効です。 Private Sub UserForm_Initialize() 'リストボックスの設定 With ListBox1 .Font.Size = 10 .ColumnCount = 7 .ColumnWidths = "50;100;80;80;100;30;70" .TextAlign = fmTextAlignLeft .Font.Name = "MSゴシック" End With Dim i As Integer Dim LastRow As Integer LastRow = Range("A" & Rows.Count).End(xlUp).Row For i = 2 To LastRow With ListBox1 .AddItem Cells(i, 1).Value .List(ListCount - 1, 1) = Cells(i, 2).Value .List(ListCount - 1, 2) = Cells(i, 3).Value ←ここでエラー .List(ListCount - 1, 3) = Cells(i, 4).Value .List(ListCount - 1, 4) = Cells(i, 5).Value .List(ListCount - 1, 5) = Cells(i, 6).Value .List(ListCount - 1, 6) = Cells(i, 7).Value End With Next End Sub

  • リストボックス内を検索(VB6.0)

    お世話になっています。 リストボックス内に表示したデータを検索するプログラムを作っています。 Private Sub txtName_Change()  Dim i As Integer  For i = 0 To List1.ListCount - 1   If List1.List(i) Like "*" & txtName.Text & "*" Then    List1.ListIndex = i    Exit For   End If  Next i End Sub という感じで、あいまい検索をしています。 検索結果は上手く取得できたのですが、 例えばテキストボックスに「井上」と入力して検索した場合 「上井」というように、 テキストボックスの内容が変わってしまいます。 同じコードを他の場所でも使用しているのですが、 そちらでは問題なく「井上」と表示されたままになっています。 きちんとテキストボックスの中身が「井上」のままでいるには どうしたらよいのでしょうか… 宜しくお願い致します。

  • リストボックスの内容を検索したいが...

    エクセル2019を使っています。 添付画像のようにユーザーフォームにテキストボックスとリストボックスを作り、テキストボックスに入力した文字でリストボックスの内容を検索しようとコードを作成しました。 Private Sub TextBox1_Change() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row .Range("A1").AutoFilter 1, "*" & TextBox1.Value & "*" If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then Set rng = .Range("A2:A" & LastRow).SpecialCells(xlCellTypeVisible) Else Me.ListBox1.Clear Exit Sub End If End With Me.ListBox1.Clear With Me.ListBox1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With End Sub Private Sub UserForm_Initialize() Dim LastRow As Integer Dim rng As Range, r As Range With Worksheets("Sheet1") If .AutoFilterMode <> True Then .Range("A1").AutoFilter End If LastRow = .Cells(Rows.Count, 1).End(xlUp).Row Set rng = .Range("A2:A" & LastRow) End With With Me.ListBox1 .ColumnCount = 1 For Each r In rng .AddItem r.Value .List(.ListCount - 1, 1) = r.Offset(0, 1).Value Next r End With ListBox1.ListIndex = 0 End Sub とりあえず検索はできるのですが、使用されていない文字や記号を入力したあとにバックスペースキーで入力した文字や記号を削除するとリストボックスの内容が意図した内容で表示されません。 どこを修正したらいいでしょうか。

  • テキストの読込について

    あいうえお かきくけこ さしすせそ ↑のような中身のテキストファイルを読み込んで、 あいうえおかきくけこさしすせそ ↑のように、改行をなくして新規テキストに出力する プログラムを作成中なのですが、上手くいかず 困っています。 改行を無視した取り込みは出来るのでしょうか? もしくは、LineInput等で読み込んだ後、 改行を取り除くような処理をするのでしょうか? 下記は、現在まで作ったプログラムなのですが、 これだと、改行も同時に取り込んでしまっています。 Private Sub Command1_Click() Dim sData As String Dim FileName As String CommonDialog1.Filter = "テキスト|*.txt|全てのファイル|*.*" CommonDialog1.ShowOpen FileName = CommonDialog1.FileName Open FileName For Input As #1 Do Until EOF(1) Line Input #1, sData Loop Close #1 環境は、WindowsXP、VB6.0エンタープライズです。 以上、宜しくお願い致します<(_ _)>

  • リストボックスから削除、「いいえ」でも削除される

    Windows7 Excel2007でマクロ作成中の初心者です。 リストボックスから、シート(顧客名)を選んで削除するマクロです。 削除がうまくいくのですが、「いいえボタン」を押しても シートが削除されてしまいます。どう修正したらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") End If Next i Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True '顧客リスト.RemoveItem (顧客リスト.ListIndex) '顧客リスト.ListIndex = -1 リストボックスの項目削除 Worksheets(1).Activate End With If btn = vbYesNo Then Exit Sub End If ActiveWorkbook.Save End Sub ----------------------------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

  • VBA リストボックスの値をセルに転記

    よろしくお願いします。 したいことは、 ユーザーフォームのリストボックスで複数の値を選んで複数セルに転記する。 ActiveCell.offset(10, 5) ⇐ リストボックスで選んだ1つ目 ActiveCell.offset(11, 5) ⇐ リストボックスで選んだ2つ目 ActiveCell.offset(12, 5) ⇐ リストボックスで選んだ3つ目 下の構文では1つしか転記できません。 Dim n As Integer, s As String For n = 0 To ListBox3.ListCount - 1 If ListBox3.Selected(n) Then s = s & ListBox3.List(n) & vbCrLf ActiveCell.offset(10, 5).Value = s End If Next

  • コモンダイアログで複数のファイルを開く

    このサイトでの質問No.222750 http://www.okweb.ne.jp/kotaeru.php3?q=222750 を読んで、コモンダイアログを使って複数のファイルパスを取得するプログラムを作りました。ところが実行するとある程度の数のファイルなら問題はないのですが多いと、 タイトル:「ファイルを開く」内容:「c:\(ここにパスが入ります)\ 上記のファイル名は無効です」という警告メッセージが出ます。 それらのファイルも数を加減して開けばメッセージは出ないので、ファイル名に問題があるとは思えません。 それぞれのファイル名が短いと、多くのファイルを選択できることから文字数に関係があると思うのですが、よく分かりません。 コードはNo.222750の#1の回答とほとんど同じです。但し使っているver5ではSplitが使えないためにプロシージャを使って以下のように書き換えました。ここに問題はないと思うのですがよろしくお願いします。 'Splitを用いている文の書き換え Call SplitD(CommonDialog1.Filename, vbNullChar, valWork()) ' Private Sub SplitD(Filename As String, Serch As String, strData() As Variant) Dim t As Integer Dim s As Long  '検索開始位置 Dim e As Long  '検索文字位置 s = 1 Do e = InStr(s, Filename, Serch) If e = 0 Then: e = Len(Filename) + 1 ReDim Preserve strData(t) strData(t) = Mid(Filename, s, e - s) t = t + 1 s = e + 1 Loop Until e = Len(Filename) + 1 End Sub

  • リストボックスからシート削除のマクロを合体したい

    Windows7 Excel2007でマクロ作成中の初心者です。 やりたいことは、リストボックスからシートを選択し、そのシートを削除する。 削除したら、リストボックスの中の、シート選択状態を解除し、その項目だけを 削除することです。 以下のコードで出来たのですが、これを統合して一個のコードにしたいです。 どうしたらよろしいでしょうか。 Private Sub 顧客削除_Click() Dim i As Integer Dim btn Dim name As String With 顧客リスト For i = 0 To .ListCount - 1 If .Selected(i) Then name = .list(i) '選択されたリストを変数に格納 btn = MsgBox("本当に、 " & name & " さんを削除していいですか?", _ vbYesNo, "削除の確認") If btn = vbYes Then Application.DisplayAlerts = False Worksheets(Mid(.list(.ListIndex - 0), InStr(.list(.ListIndex - 0), " ") + 1)).Delete Application.DisplayAlerts = True リストボックスの項目削除 End If End If Next i Worksheets(1).Activate End With ActiveWorkbook.Save Application.ScreenUpdating = True End Sub ----------------------------- Sub リストボックスの項目削除() Dim i As Integer For i = 顧客リスト.ListCount - 1 To 0 Step -1 If 顧客リスト.Selected(i) Then 顧客リスト.RemoveItem (i) Exit For End If Next i End Sub

専門家に質問してみよう