質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

2回答

2216閲覧

VBでcsvファイルから読み込んだデータをTextBoxに反映させたい

MayomayoBread

総合スコア0

Visual Basic .NET

Microsoft Visual Basic .NET (VB.NET)とはオブジェクト志向のプログラム言語です。 Microsoft"s Visual Basic 6 のバージョンアップとしてみることができますが、Microsoft.NET Frameworktによって動かされています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/08/08 16:29

前提・実現したいこと

使用言語はVB
使用ツールはVisual Studio Community 2019です。

csvの名簿ファイルがあります。
このファイルからIDが一致する人物について氏名、ふりがな、住所……というようにTextBoxへ反映させたいです。
ListBoxへは反映できたのですが、一つ一つの項目を抽出する方法がわからず、といった感じです。
初歩的な内容で申し訳ないですが、教えていただけるとありがたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

y_waiwai

2021/08/08 22:24

まずはあなたのコードを提示しましょう
退会済みユーザー

退会済みユーザー

2021/08/08 23:31

> csvの名簿ファイルがあります。 > このファイルからIDが一致する人物について氏名、ふりがな、住所……というようにTextBoxへ反映させたいです。 そこのところのどこまで自分で実装できていて、どこで躓いていて、何が分かれば解決するかを、あなたが書いたコードを質問欄に追記して説明してください。今の質問では丸投げで、ここではマイナス評価対象です。
shinami

2021/08/09 02:54

そのTextBoxは1つでその1つのTextBoxへ氏名もふりがなも住所も入れるのでしょうか? それとも氏名用のTextBox、ふりがな用のTextBox、住所用のTextBoxがそれぞれあるという事でしょうか? 現在のListBoxへ反映というのもどの様に代入しているのか分からない訳です。 それら質問者が何をやりたいのかを回答者に1度にイメージさせる手があります。 コードを質問文に追加するです。 TextBoxへ反映する方をまだ試してないなら試してみましょう。 案外質問するまでもなくできるかもしれませんよ? 試してできなかった場合は、できなかったとあなたが判断する材料がどこかにあるから「できなかった」とする訳ですよね?それは何でそう思いましたか? それらを書くと的を得た回答を得られるかもしれません。
退会済みユーザー

退会済みユーザー

2021/08/09 23:36

質問者さん、無言ですが、回答したのでそれに対するフィードバックを書こう。役に立った、立たなかったぐらいはすぐ返せるのでは? 役に立たなかったならどこがダメだったのかを書くとより期待する回答に近いものが出てくるかも。とにかく無言は NG です。
MayomayoBread

2021/08/10 12:21

ご意見ありがとうございます。昨日は多忙で一切パソコンに手をつけられない状態でした。 ほかの質問者、回答者の方々にとっては即レスが可能なのかもしれませんが、本業ではないため即レスが難しい旨ご了承ください。 うまくいかなかったコードを入れても参考にならないという、浅はかな考えを持っていました。 やったところをとにかく追記していきます。早速、コードの追加を行うので少々お待ちください。
退会済みユーザー

退会済みユーザー

2021/08/10 13:22 編集

忙しくてタイムリーにフィードバックを返せないなら、忙しくなくなるまで質問を控えてはいかが? 忙しいとか言うのはあなたの個人的&勝手な理由で、本業であるか否かなんてのも全く理由にならず、ここの参加者には関係ないことです。
MayomayoBread

2021/08/10 14:13 編集

そうですか。ボランティアなのでそんな必死にならなくていいと思いますよ。 あなたのことが心配になります。
退会済みユーザー

退会済みユーザー

2021/08/10 21:57

いえいえ、私のことは心配には及びません。それより、ご自分のことを心配されてはいかがですか?
guest

回答2

0

取りあえず参考になる(かもしれない)記事を紹介しておきます。

CSV ファイルを DataGridView に表示
http://surferonwww.info/BlogEngine/post/2020/09/11/show-date-in-csv-file-on-datagridview.aspx

.NET Framework の Windows Forms アプリです。CSV ファイルを全行読み込んで DataTable を作成し、それを DataGridView に表示。その後、ユーザーによるテキストボックス入力によりある項目(サンプルでは ProductName)を DataView.RowFilter プロパティを使って検索し、検索結果を同じ DataGridView に表示し直すというものです。

これがやりたいことと違う場合は、どこかどう違うかを詳しく書いてください。

投稿2021/08/09 01:15

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

申し訳ないですが、自己解決しました。詳細に質問を書いているうちに解決法が見えました。みなさんのリクエストのおかげです。

質問追記

一意のTextBox(StaffCode)からIDを取得し、入室履歴のCSV(Entrance.csv)から該当IDの入室履歴を取得し、ListView(EntranceHistoryView)に表示させることができています。

今回実現したいことは、先ほどのTextBoxから取得したIDで、「社員情報のCSV」から該当IDの社員のデータを複数のTextBoxに氏名、ふりがな等をそれぞれ分けて代入していきたいです。一つのTextBoxにすべてを表示させるわけではありません。

自分ではうまくいかなかったため、とりあえず先述のコードを流用して社員データの氏名、ふりがな等を取得し、ListViewに表示するよう試したところそちらは実現できました。自分のコード(入退出履歴と社員情報のCSVからListViewに表示するもの)を以下に提示します。

VB

1 '検索条件の設定 2 Private Enum KeyType As Integer 3 Code '社員ID 4 Name '名前 5 All 6 End Enum 7 8 'ファイルパスの設定 9 Private EntranceFilePath As String = My.Application.Info.DirectoryPath & "\Entrance.csv" 10 Private StaffFilePath As String = My.Application.Info.DirectoryPath & "\Staff.csv" 11 12 'テキストファイルの用意、検索結果の表示 13 Private Sub GetEntranceData() 14 Dim SReader As IO.StreamReader 15 'フォームの準備 16 With Me 17 .EntranceHistoryView.Items.Clear() 18 .StaffInfo.Items.Clear() 19 End With 20 'テキストファイルの有無を確認 21 If Not IO.File.Exists(EntranceFilePath) Then 22 Me.ResultStatus.Text = "ファイルが見つかりませんでした。" 23 MessageBox.Show("入退出履歴(Entrance.csv)がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 24 Exit Sub 25 End If 26 'テキストファイルのストリームを生成する 27 Try 28 SReader = New IO.StreamReader(EntranceFilePath, System.Text.Encoding.Default) 29 Catch ex As Exception 30 Me.ResultStatus.Text = "エラーが発生しました。" 31 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 32 Exit Sub 33 End Try 34 '社員コードから検索するプロシージャを呼び出す 35 DisplayRecord(Me.StaffHistoryView, SReader, KeyType.Code, Me.EntranceCode.Text) 36 'テキストファイルのストリームを閉じる 37 SReader.Close() 38 39 '続けて同様に社員情報の取得(ここが修正したい箇所です!) 40 If Not IO.File.Exists(StaffFilePath) Then 41 Me.ResultStatus.Text = "ファイルが見つかりませんでした。" 42 MessageBox.Show("社員情報ファイル(Staff.csv)がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 43 Exit Sub 44 End If 45 Try 46 SReader = New IO.StreamReader(StaffFilePath, System.Text.Encoding.Default) 47 Catch ex As Exception 48 Me.ResultStatus.Text = "エラーが発生しました。" 49 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 50 Exit Sub 51 End Try 52 DisplayRecord(Me.StaffInfo, SReader, KeyType.Code, Me.StaffCode.Text) 53 SReader.Close() 54 End Sub 55 56 '読み出しと配列へ格納 57 Private Sub DisplayRecord(ByRef myListView As ListView, ByVal myReader As IO.StreamReader, ByVal KeyNo As Integer, Optional ByVal Key As String = "") 58 Dim Record As String 59 Dim RecArray() As String 60 61 Do While myReader.Peek() <> -1 62 Record = myReader.ReadLine 63 If Record = "" Then 64 Continue Do 65 End If 66 RecArray = Record.Split(",") 67 Dim ListViewLine As ListViewItem = New ListViewItem(RecArray) 68 If KeyNo = KeyType.Code Then 69 If RecArray(KeyNo) <> Key Then '一致しない場合 70 Continue Do '次の読み込みへ 71 End If 72 End If 73 74 myListView.Items.Add(ListViewLine) 75 Loop 76 End Sub 77 78 79 '以下すべてリストビューの用意 80 Private Sub setlistview(ByRef mylistview As ListView) 81 '入室履歴リストビューの用意 82 mylistview.View = View.Details 83 With EntranceHistoryView.Columns 84 .Add("社員コード", 50) 85 .Add("部屋コード", 140) 86 .Add("入室時刻", 0) 87 End With 88 End Sub 89 90 Private Sub setstaffinfo(ByRef mylistview As ListView) 91 '社員情報リストビューの用意 92 mylistview.View = View.Details 93 With StaffInfo.Columns 94 .Add("社員コード", 0) 95 .Add("社員氏名", 100) 96 .Add("ふりがな", 50) 97 .Add("郵便番号", 50) 98 .Add("住所", 100) 99 End With 100 End Sub 101 102 Private Sub FormInput_Load(sender As Object, e As EventArgs) Handles MyBase.Load 103 'リストビュー読み込み 104 setlistview(Me.EntranceHistoryView) 105 setstaffinfo(Me.StaffInfo) 106 End Sub

##解決
社員情報をTextBoxに表示したいため、Private Sub GetEntranceDataとPrivate Sub DisplayRecordのうち該当箇所をこのように変更してみました。とりあえず、これで動きました。

VB

1 If Not IO.File.Exists(StaffFilePath) Then 2 Me.ResultStatus.Text = "ファイルが見つかりませんでした。" 3 MessageBox.Show("社員情報ファイル(Staff.csv)がありません", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 4 Exit Sub 5 End If 6 Try 7 SReader = New IO.StreamReader(StaffFilePath, System.Text.Encoding.Default) 8 Catch ex As Exception 9 Me.ResultStatus.Text = "エラーが発生しました。" 10 MessageBox.Show(ex.Message, "エラー", MessageBoxButtons.OK, MessageBoxIcon.Error) 11 Exit Sub 12 End Try 13 'さきほどとは別のプロシージャを読み込みます 14 DisplayStaffRecord(Me.StaffInfo, SReader, KeyType.Code, Me.StaffCode.Text) 15 SReader.Close() 16 End Sub 17 18 'とりあえず、DisplayRecordとは別のプロシージャを作ります。 19 Private Sub DisplayStaffRecord(ByRef myListView As ListView, ByVal myReader As IO.StreamReader, ByVal KeyNo As Integer, Optional ByVal Key As String = "") 20 Dim Record As String 21 Dim RecArray() As String 22 23 Do While myReader.Peek() <> -1 24 Record = myReader.ReadLine 25 If Record = "" Then 26 Continue Do 27 End If 28 RecArray = Record.Split(",") 29 Dim ListViewLine As ListViewItem = New ListViewItem(RecArray) 30 If KeyNo = KeyType.Code Then 31 If RecArray(KeyNo) <> Key Then 32 Continue Do 33 End If 34 End If 35 36 '配列からテキストを取得 37 TextBoxName.text = RecArray(1) 38 TextBoxKana.text = RecArray(2) 39 TextBoxPostCode.text = RecArray(3) 40 TextBoxAddress.text = RecArray(4) 41 Loop 42 End Sub

DisplayRecordで使っていた配列をそのまま読み込ませることで目的が達成できました。
改めて見ると回答できないというのも納得です。コードの提示がいかに重要か身にしみました。

回答者の方、暖かいご回答ありがとうございます。
DataGridViewも使用できたら、と思っていましたので参考にさせていただきます。
そして、追記依頼をしてくださった方。
叱咤激励のおかげで最後の一歩が解決できました。ありがとうございました。

投稿2021/08/10 14:03

MayomayoBread

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問