VBを使って顧客の検索などに使用するプログラムを作りたいと思っています。
項目1-1,項目1-2,項目1-3,項目1-4,項目1-5
項目2-1,項目2-2,項目2-3,項目2-4,項目2-5
項目3-1,項目3-2,項目3-3,項目3-4,項目3-5
上記のデータ名 TextFile1.txt
Dim fn As String = "C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Split(read.ReadToEnd, vbCrLf)
For i As Integer = LBound(dline) To UBound(dline)
d = Split(dline(i), ",")
ad.Add(d(0))
Next
ComboBox1.DataSource = ad
ComboBox1.text="顧客名"
以上が現在の状況です。
comboに項目1-1,2-1,3-1とセットされていますが、マウスのスクロールボタンを動かすと、項目1-1が最初に表示されず2-1が表示されます。通常にクリックして選択すると問題は無いのですが、出来ればマウスのスクロールボタンも使いたいと思いますが解決方法はあるのでしょうか。
もう1件お伺いしたいのですが、上記テキストファイルからデータを読込、項目1-2,1-3,1-4,1-5、項目2-2・・・、項目3-2・・・と、項目毎にコンボボックスと連動させて各テキストボックス1、2、3、4に表示させたいのですが、上手くいきません。長文で解りにくい点があるかと思いますが、よろしくお願い致します。
No.1
- 回答日時:
コンボボックスの初期化時に SelectedIndexを -1にしてやれば マウスのスクロールでも『項目1-1』が取得できますよ
もう一方の質問は各コンボボックスの SelectedIndexChangedイベントを処理してやればいいように思います
if ComboBox1.SelectedIndex > -1 then
TextBox1.Text = ComboBox1.SelectedIndex + 1
else
TextBox1.Text = ""
end if
といった具合です
この回答への補足
ご回答ありがとうございます。マウススクロールの件は解決する事ができました。
もう1件の方ですが、
Private Sub Combobox1_SelectedIndexChanged(省略~)
If Combobox1.SelectedIndex > -1 Then
Combobox2.Text = Combobox1.SelectedIndex + 1
Else
Combobox2.Text = ""
End If
End Sub
上記で、コンボボックス1に連動してコンボボックス2の動作を確認できました。コンボボックス2にTextFile1.txtの項目1-2を表示させる場合は、Combobox2.Text = Combobox1.SelectedIndex + 1の = の後を変更するのだと思いますが、項目1-2を表示させるにはどのように書けばいいのでしょうか。自分で何日も調べているのですが、項目1-2や項目1-3等の場所を指定して表示させる事が出来ません。アドバイスをいただけないでしょうか。宜しくお願い致します。
ご回答ありがとうございます。マウススクロールの件は解決する事ができました。どうもありがとうございます。
もう1件の質問ですが、項目1-2,項目1-3を表示せずに数字が1,2,3と表示されてしまいます。補足の書き方では解りづらいと思いこちらに書かせていただきました。よろしくお願い致します。
No.2
- 回答日時:
ComboBox1とComboBox2やComboBox3を連動させたいなら
Private Sub Combobox1_SelectedIndexChanged(省略~)
If Combobox1.SelectedIndex > -1 Then
Combobox2.SelectedIndex = Combobox1.SelectedIndex
Else
Combobox2.Text = "未選択"
End If
End Sub
Private Sub Combobox2_SelectedIndexChanged(省略~)
If Combobox2.SelectedIndex > -1 Then
Combobox3.SelectedIndex = Combobox2.SelectedIndex
Else
Combobox3.Text = "未選択"
End If
End Sub
といった具合にして見ましょう
TextプロパティではなくSelectedIndexプロパティを操作してやれば選択肢が変更できますよ
この回答への補足
ご回答ありがとうございます。まずはcombobox2を連動させようと思いますが、Combobox2.textをCombobox2.SelectedIndexにしてみた所、下記のエラーが出てしまいました。
'1' の InvalidArgument=Value は 'SelectedIndex' に対して有効ではありません。 パラメータ名: SelectedIndex
下記が現在の内容です。よろしくお願い致します。
Imports System.IO
-----------------
Public Class Form1
Private Sub Form1_Load(省略~)
Dim fn As String = ""C:\TextFile1.txt"
Dim dline() As String
Dim d() As String
Dim ad As ArrayList = New ArrayList()
Dim read As System.IO.StreamReader = My.Computer.FileSystem.OpenTextFileReader(fn, System.Text.Encoding.Default)
dline = Split(read.ReadToEnd, vbCrLf)
For i As Integer = LBound(dline) To UBound(dline)
d = Split(dline(i), ",")
ad.Add(d(0))
Next
ComboBox1.DataSource = ad
ComboBox1.SelectedIndex = -1
ComboBox1.Text = "顧客名"
ComboBox2.Text = "都道府県"
ComboBox3.Text = "市町村"
End Sub
------------------------------------------
Private Sub ComboBox1_SelectedIndexChanged(省略~)
If ComboBox1.SelectedIndex > -1 Then
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex + 1
Else
ComboBox2.Text = "未選択"
End If
End Sub
End Class
No.3
- 回答日時:
APIとかは調べてみたのでしょうか?
ComboBox1.SelectedItem.ToString
で何が表示されるかみてみましょう。
(ArrayListの中身がクラスオブジェクトとかの場合はこれじゃだめですが)
この回答への補足
素人なもので、まず「APIとは?」という所からスタートなんです。
こちらは、頑張って使い方を調べてみようと思います。
ComboBox1.SelectedItem.ToStringはこの使い方でいいのでしょうか。
ComboBox2.text = ComboBox1.SelectedItem.ToString
とすると、ComboBox1と同じ名前が表示されます。
次に
ComboBox2.SelectedIndex = ComboBox1.SelectedItem.ToString
とすると、下記エラーが出ます。
String "ササキ" から型 'Integer' への変換は無効です。
根本的に間違った事をしてましたら、申し訳ございません。よろしくお願い致します。
No.4
- 回答日時:
問題を整理させてください。
やりたいこと:ComboBox1の値が変更されるとTextBox1にComboBox1の中身を表示する。
ComboBox1の中身
[0]:項目1-1
[1]:項目1-2
[2]:項目1-3
[3]:項目1-4
ではないのでしょうか?(連動~のところはとりあえずおいときます、No2さんのソースで間違ってないと思いますが、質問者のソースを見る限りComboBox1以外にデータを設定していないような・・・)
上記内容であれば
TextBox1.Text = ComboBox1.SelectedItem.ToString
で実現可能と思われます。
>次に
>ComboBox2.SelectedIndex = ComboBox1.SelectedItem.ToString
>とすると、下記エラーが出ます。
>String "ササキ" から型 'Integer' への変換は無効です。
数値項目に文字列を入れようとしてエラーとなっています。
この回答への補足
ご回答ありがとうございます。
説明が悪く申し訳ありません。一度整理させていただきます。
現在フォームにcombobox1、combobox2、combobox3、と3つあります。
ササキ,北海道,札幌市,,,,,
スズキ,福岡県,福岡市,,,,,
サトウ,愛知県,名古屋市,,,,,
ハヤシ,北海道,旭川市,,,,,
という形で数百件の顧客データ TextFile1.txt があります。
combobox1で"ササキ"を選択すると、combobox2は"北海道"、combobox3は"札幌市"という形で表示させたいと思ってます。(comboboxは電話番号等もある為、今後増やしていく予定です)
最終的には、combobox2で"北海道"を選択すると、顧客名のところは北海道の方のみを表示させるという所までやりたいと思っています。
自分なりに色々調べていくうちに、テキストファイルの行を読込み、Splitでカンマ区切りで配列をして、それを各comboboxにセットする?という事は素人なりに解ったのですが(これも自信がありませんが)、各comboboxにどうセットしていくのか。という所から行き詰っています。
No.5
- 回答日時:
SelectedIndexプロパティは選択項目がある場合 0から個数-1までの値になります
3個のアイテムがあるなら 0,1,2と-1がとりうる値です
-1の場合は 選択項目がない状態になります
1-2,2-2,3-2 がそれぞれ 0,1,2の対応になりますよ
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
といった具合にしてください
右辺を ComboBox1.SelectedIndex + 1 してしまうと 0,1,2,3がとりうる値になり 3になってしまうとエラーになると思います
この回答への補足
ご回答ありがとうございます。
もしかすると、自分の説明が悪く上手く伝わってないのかと思い、一度整理させていただきます。
現在フォームにcombobox1、combobox2、combobox3、と3つあります。
ササキ,北海道,札幌市,,,,,
スズキ,福岡県,福岡市,,,,,
サトウ,愛知県,名古屋市,,,,,
ハヤシ,北海道,旭川市,,,,,
という形で数百件の顧客データ TextFile1.txt があります。
combobox1で"ササキ"を選択すると、combobox2は"北海道"、combobox3は"札幌市"という形で表示させたいと思ってます。(comboboxは電話番号等もある為、今後増やしていく予定です)
最終的には、combobox2で"北海道"を選択すると、顧客名のところは北海道の方のみを表示させるという所までやりたいと思っています。
自分なりに色々調べていくうちに、テキストファイルの行を読込み、Splitでカンマ区切りで配列をして、それを各comboboxにセットする?という事は素人なりに解ったのですが(これも自信がありませんが)、各comboboxにどうセットしていくのか。という所から行き詰っています。
アドバイスいただきましたとおり
ComboBox2.SelectedIndex = ComboBox1.SelectedIndex
としてみましたが、前回同様のエラーが出てしまいました。
別にご回答いただいたproKaseifuさんからは「質問者のソースを見る限りComboBox1以外にデータを設定していないような」というアドバイスもいただきました。combobox2,combobox3にデータを設定するとしたらどういうソースを書いていくといいのでしょうか。何度も大変申し訳ございませんが、よろしくお願い致します。
No.6ベストアンサー
- 回答日時:
コンボボックスの中身が以下のようになっているのであれば、あとはNo2さんの提示してくれたやり方でできるのではないでしょうか?
ComboBox1
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ
ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道
ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市
このようになっていないのであれば・・・
0.変数を定義(必要になったらそのつど定義でも問題ないです)
・1行読み込みsplitした結果を入れる配列→srcAry
・↑の結果の[0]の内容を入れるList→nameList
・↑の結果の[1]の内容を入れるList→adr1List
・↑の結果の[2]の内容を入れるList→adr2List
1.テキストファイルから1行読み込む
2.読み込んだ内容をカンマでsplitし、srcAryに格納
3.各リストに追加していく。nameList.add(srcAry(0))、adr1List.add(srcAry(1))、adr2List.add(srcAry(2))
4.1~3をテキストファイルの行数くりかえす。
5.ComboBox1にnameList、ComboBox2にadr1List、ComboBox2にadr2Listを設定する。
各コンボボックスが変更された場合の動作についてはNo2さんのソースを参考にしてください。
この回答への補足
ご回答ありがとうございます。
現在の状況を書かせていただきます。
ComboBox1 ↓この形でセットされてます。
[0]:ササキ
[1]:スズキ
[2]:サトウ
[3]:ハヤシ
ComboBox2
[0]:北海道
[1]:福岡県
[2]:愛知県
[3]:北海道
ComboBox3
[0]:札幌市
[1]:福岡市
[2]:名古屋市
[3]:旭川市
combobox2とcombobox3が自分ではどうしても上記の形にセット出来ません。セットしようとするとcombobox1と同じ名前がセットされてしまいます。現在の状況を下記のとおり書いてみましたが、何度も申し訳ありませんがアドバイスをよろしくお願い致します。
Dim dline() As String
Dim namelist As ArrayList = New ArrayList()
Dim adr1list As ArrayList = New ArrayList()
Dim adr2list As ArrayList = New ArrayList()
dline = Split(Read.ReadToEnd, vbCrLf) ←「1.テキストファイルから1行読み込む」
Dim srcary() As String
For i As Integer = LBound(dline) To UBound(dline) ←「4.1~3をテキストファイルの行数くりかえす。」
srcary = Split(dline(i), ",") ←「・1行読み込みsplitした結果を入れる配列→srcAry」
namelist.Add(srcary(0)) ←「・↑の結果の[0]の内容を入れるList→nameList」
adr1list.Add(srcary(0)) ←「・↑の結果の[1]の内容を入れるList→adr1List」
adr2list.Add(srcary(0)) ←「・↑の結果の[2]の内容を入れるList→adr2List」
Next
ComboBox1.DataSource = namelist ←「5.ComboBox1にnameList、ComboBox2にadr1List、ComboBox2にadr2Listを設定する。」
ComboBox2.DataSource = adr1list
ComboBox3.DataSource = adr2list
No.7
- 回答日時:
namelist.Add(srcary(0)) ←「・↑の結果の[0]の内容を入れるList→nameList」
adr1list.Add(srcary(0)) ←「・↑の結果の[1]の内容を入れるList→adr1List」
adr2list.Add(srcary(0)) ←「・↑の結果の[2]の内容を入れるList→adr2List」
単純なミスですね。
srcary(0)が全部(0)になってます。
srcaryには
[0]:名前
[1]:都道府県
[2]:市区町村名
と入っているはずですので添え字を変えてあげる必要があります。
namelist.Add(srcary(0))
adr1list.Add(srcary(1))
adr2list.Add(srcary(2))
この回答への補足
ご返事が遅くなってしまいました。ご回答ありがとうございます。
ご指摘いただきましたとおり、
namelist.Add(srcary(0))
adr1list.Add(srcary(1))
adr2list.Add(srcary(2))
として、プログラムを実行すると、
「IndexOutOfRangeExceptionは、ハンドルされませんでした」
「インデックスが境界の範囲外です」
という、エラーが出てしまいます。
なんとか自分で解決方法をと思い調べているのですが、解りませんでした。アドバイスいただけますでしょうか。よろしくお願い致します。
No.8
- 回答日時:
CSVデータに不備はありませんでしょうか?
名前,都道府県,市区町村名 のように1行あたりのデータが
登録されていれば問題ありませんが、たとえばCSVデータの
一部に不備があり名前がないデータがあった場合。
例)北海道,旭川市
srcAry(0) = 北海道
arcAry(1) = 旭川市
srcAry(2) = 存在しない
上記のようにデータが作成されるため、srcAry(2)を
参照しようとするとおっしゃるとおりのエラーが発生
します。
1行読み込んでsplitしているところに何件目のデータ
を処理しているのか、CSVデータの内容はどうなってい
るのか等をダンプしてみてはいかがでしょうか?
ご回答ありがとうございます。
ご指摘頂いたとおりファイルをチェックしてみたところ
ササキ,北海道,札幌市,
スズキ,福岡県,福岡市,
サトウ,愛知県,名古屋市,
ハヤシ,北海道,旭川市,
最後の旭川市の後にEnterで改行されていました。
その改行を消去すると思うとおりに動作するようになりました。
何度も親切にご回答いただきまして、ありがとうございます。
今後も勉強しながら取り組んでいこうと思いますので、どうしても解決出来ない場合はご質問させていただきますので、よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- システム CSVファイルのマッピング処理の省力化 1 2022/11/24 00:01
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) Excel VBAのリストボックスの値を他のフォームに反映させる方法を教えてください。 2 2023/07/14 14:06
- Excel(エクセル) バイナリー演算を勉強したい 1 2023/04/19 14:17
- Excel(エクセル) 列を自動で追加したい 3 2022/07/11 12:58
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLで特定の項目の重複のみを排...
-
fgetcsvでCSVを取得した際のnul...
-
Zend_DBを使ったselectで文字が...
-
バッチでcsvファイルの指定のカ...
-
COBOL プログラミング
-
FormulaR1C1でSUMIF変数指定
-
初心者)DataGridViewの入力桁...
-
COBOLについて
-
リストビューの項目の内容を変...
-
for whichの使い方
-
差し込み後、元データを変更し...
-
エクセルで最後の文字だけ置き...
-
INSERT文でフィールドの1つだ...
-
グループ毎の最大値を持つデー...
-
VBAのAccessでDATE型のINSERT
-
同一のユーザー、同一商品のと...
-
Exel VBA 別ブックから該当デ...
-
SELECT 文 GROUP での1件目を...
-
Oracleのデータ型、NUMBERについて
-
マイクラPC版のコマンドで効率...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLで特定の項目の重複のみを排...
-
バッチでcsvファイルの指定のカ...
-
COBOLについて
-
リストビューの項目の内容を変...
-
DataViewで複数条件の...
-
php mysql で WHERE句内に変数...
-
Zend_DBを使ったselectで文字が...
-
fgetcsvでCSVを取得した際のnul...
-
ListViewのカラムの色の変更
-
google formsを使ったタスク依...
-
COBOL プログラミング
-
DataGridView 右詰め
-
初心者)DataGridViewの入力桁...
-
Pythonについて
-
前回ご教授いただいたコードに...
-
FormulaR1C1でSUMIF変数指定
-
C# リストビューの値を取得
-
このvbaで指定したフォルダから...
-
VB6リストボックスでの文字...
-
Chromeのデベロッパーツール プ...
おすすめ情報