
http://hanatyan.sakura.ne.jp/dotnet/fileio03.htm
を見ながらcsvを構造体の配列に組みました。
その後、それに検索機能を付けたいと思い本やネットを駆使しながら試していますが、どうしてもうまくいきません。
-----ソースコード----
Private Structure SeisekiDat
Dim name As String //生徒名
(上に記載したサイトと同じ内容なので略)
・
・
・
Loop
FileClose(fileNo)
//※「Debug.WriteLine(sd(n).name & vbTab & sd(n).kokugo & vbTab & _
sd(n).suugaku & vbTab & sd(n).eigo)」は削除しています。
//ここから本やネットを見ながら
Dim p As Integer = InStrRev(TextBox1.Text, fileName)
ListBox1.Items.Clear() 'リストボックスの中身を消去
If p = 0 Then
ListBox1.Items.Add(fileName.Substring(n).Split(vbNewLine)(p))
Else
MessageBox.Show("そのようなデータはありません。")
End If
こうするとなぜかcsvファイル名を削ったものがリストボックス出てきます…
そういうの求めていません(´;ω;`)
初心者なので、どこをどのように修正すればいいのか分かりません。
助けてください
No.1ベストアンサー
- 回答日時:
>csvを構造体の配列に組みました。
>その後、それに検索機能を付けたいと思い
何を検索したいのかがわかりません。(その手段についても)
特に意味不明なのは
>Dim p As Integer = InStrRev(TextBox1.Text, fileName)
TextBox1にある文字列の中に変数:fileName が含まれているかどうかと言う点と、
>If p = 0 Then
>ListBox1.Items.Add(fileName.Substring(n).Split(vbNewLine)(p))
もし含まれていなければListBox1に fileName~を追加すると言う点。
含まれていない場合に追加するのに Else 以降のメッセージボックスの存在・文面もおかしい。
そもそも fileName とは何なのでしょ?
読み込んだCSVファイルの名前を格納している変数ではない?
そしてこれと『構造体:SeisekiDat』の関係が、まっっったくわかりません。
TextBox1さえどう言う意味で存在しているのか(検索値を入れるという予測は立つけど、InStrRev関数やfileNameとの繋がりが見えないです。
構造体とは関係なくファイル名をListBoxに追加したいのですか?
コードを端折られても質問者さんは理解できるでしょうけど、回答者は『突然出てきた変数名にさえ理解が及ばない』のですけどね。
No.3
- 回答日時:
No.1です。
構造体のメンバのどれかとTextBox1の値を比較したいのなら、
For ~ Next でループさせ、一致したらループを抜ける
If sd(n).??? = TextBox1.Text Then Exit For
んで変数:n にその時のインデックスがあるから
ListBox1.Items.Add(sd(n).***)
と、登録したいメンバをリストボックスに放り込むって感じじゃないの?
No.2
- 回答日時:
プログラムに「なぜか」ということは、ほとんどありません。
多くの場合は、思い込みや理解不足による、プログラムの間違いです。
ListBox1.Items.Add(fileName.Substring(n).Split(vbNewLine)(p))
は、 ListBox1の一覧に fileName.Substring(n).Split(vbNewLine)(p) を加える、というものです。
fileName.Substring(n).Split(vbNewLine)(p)
は、
fileName を Substring(n) したものを split(vbNewLine) した配列の p番目
という意味になります。
fileName がCSVファイル名を格納したStringだとすれば、Substring(n)は
https://msdn.microsoft.com/ja-jp/library/hxthx5h …
の説明通り、
「CSVファイル名」の n番目(最初の文字は0番目)以降
別な言い方をすれば
「CSVファイル名」の先頭n文字を削った残り
ということになります。
Splitは、指定した文字や文字列で区切った状態の配列を返します。
https://msdn.microsoft.com/ja-jp/library/tabh47c …
元のfileNameにvbNewLine(改行)は含まれていないので、 元の文字列がそのまま、配列の0番目の要素となります。
(p)でその配列の p番目を取り出しますが、ここに来るのは if p=0 のときなので、 p=0です。
つまり 0番目であり、配列の0番目には、上記のsplitにより 「CSVファイル名の先頭n文字を削った残り」がそのまま入っています。
以上のように「なぜか」ではなく、「そうなるべくして」削られたCSVファイル名 がListBox1に追加されることになります。
まず、あなたが何をしたいのか、日本語で書いてください。
次に、その「やりたいこと」をするには、何をどうするのか、ちょっとだけ具体的に日本語で書いてください。
その次に、その「ちょっと具体的にしたやりたいこと」をするには、何をどうするのか、もうちょっとだけ具体的に日本語で書いてください。
その次に ...
と、繰り返して、もうこれ以上はやりようがない、というところまで来たら、今まで書いたことをプログラムにします。
ほとんどは、「VBに直訳」できるようになっているはずです。
○検索機能を付ける
というのが目標ですが、これではプログラムは作れません。
この質問から読み取れるのは、このレベルです。
これでは、誰にも「正解」などわかりません。
少し具体的にします。
○「検索対象」から「検索条件」を検索
(「検索対象の中のなにか」と「テキストボックスに入力された文字列をもとにしたなにか」を比較して、
「一致とか部分一致とか」するものを探す)
○検索したものを「なんかの処理」をし,ListBox1に追加
まだ具体的になっていないことが沢山残っていますが、
ここまでやって、多少は意味のある回答もできるようになります。
すいません…ご指摘ありがとうございます
眠たい目を擦り半分意識が無い中書いたので読み返したら日本語じゃなくて恥ずかしい限りです
そして、自分のソースコードを解説していただきありがとうございます
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、フォルダ内のTextファイルをマクロで統合すると文字化けしてしまう時の解消コード 4 2023/01/01 07:32
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) 集めたシートのシート名を変更したい。 下記のコードでサブフォルダにあるファイルのSheet3を集めて 6 2022/08/23 10:38
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
このQ&Aを見た人はこんなQ&Aも見ています
-
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
構造体配列の特定のメンバーをFor~Eachで
Visual Basic(VBA)
-
構造体配列内の文字列検索のよい方法を教えてください
C言語・C++・C#
-
-
4
VB.NET Excelを読み込んでDataTableに格納し、DBにデータをINSERTする
Microsoft ASP
-
5
TextBoxでEnterキーを押すと、にあるButtonを押したのと同じ効果を出す方法
Visual Basic(VBA)
-
6
VB.NETでフォーム上にExcelのような表を表示する方法
Visual Basic(VBA)
-
7
【VB】タブ切り替え時のイベント
Visual Basic(VBA)
-
8
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
9
VB.NETで他のプロジェクトで作成したフォームを使う方法
Visual Basic(VBA)
-
10
矢印(左右)キーでイベントを発生させたい。
Visual Basic(VBA)
-
11
「タイプ初期化子が例外をスローしました」エラー何?
Visual Basic(VBA)
-
12
VB2010でExcelの行をコピーして挿入する
Visual Basic(VBA)
-
13
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 配列の長さの上限
-
先頭アドレスとは何ですか?
-
C# Listを使わずに2次元配列の...
-
【速いブラインドタッチ】手を...
-
C言語で特定列だけを抽出して配...
-
C言語初心者 構造体 課題について
-
配列と乱数を使ったプログラム
-
ポインタの配列のコンマについて
-
スマホの数字キーをISOの配置に...
-
配列を使わずに、変数名を動的...
-
複数の選択範囲の行番号を個別...
-
Excel、VBAのユーザーフォーム...
-
C++ vectorに配列をプッシュしたい
-
電子書籍を見るためにはどうし...
-
if文で「配列a[i]が小数ならば...
-
メモリの初期値
-
プログラムが書けません。
-
配列の要素数に変数を入れたい...
-
関数から配列を返すには?
-
C言語のポインタに直接アドレス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 配列の長さの上限
-
配列を使わずに、変数名を動的...
-
C# Listを使わずに2次元配列の...
-
【速いブラインドタッチ】手を...
-
配列をEraseしてもメモリが開放...
-
テキストファイルから文字列を...
-
先頭アドレスとは何ですか?
-
配列で格納したものをmsgboxで...
-
複数の選択範囲の行番号を個別...
-
C# 配列の変数宣言について。
-
C++ vectorに配列をプッシュしたい
-
配列を含む構造体の初期値について
-
VBで構造体の配列を関数に渡す...
-
C言語で特定列だけを抽出して配...
-
キーボードのキー配列について
-
ExcelVBAで質問です。離れた二...
-
2次元配列を戻り値とする関数?
-
unsigned char配列への入力の仕方
-
【C言語】配列の中に配列を入れ...
-
Redimした動的配列はEraseする...
おすすめ情報
お二方にBAを送りたいのは山々なんですが、一人しか送れないので今回は始めに回答していただいためぐみん_さんに差し上げたいと思います