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

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

新規登録して質問してみよう
ただいま回答率
85.51%
Visual Studio

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

VB.NET

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

Q&A

解決済

3回答

3772閲覧

VB:CSVファイルをDataGridViewに取り込み任意のタイミングで省く

teck

総合スコア27

Visual Studio

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

VB.NET

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

0グッド

0クリップ

投稿2016/12/19 01:08

編集2016/12/19 01:11

CSVファイルをDataGridViewに取り込み、
2番目に入ってくる値を飛ばして、3番目の値を入れるという処理を実施したいのですが、
下記コードで実行すると、2番目に入ってくる値がnullになってしまいます。
何かアドバイスいただけませんでしょうか。
よろしくお願いします。

:参考
http://blog.goo.ne.jp/ashm314/e/464c1063685c727230a13869420e00f1

' --- 行を文字型配列(currentRow)に読み込み、各列を DataGridView に格納する Dim currentRow As String() ' -- 文字型配列 Dim myRow As Integer = 0 Dim myCol As Integer = 0 ' ---▼▼ 行ループ While Not textFile.EndOfData Me.DataGridView1.Rows.Add() ' -- DataGridView に新規行を追加 currentRow = textFile.ReadFields() ' -- 1行を文字型配列に格納 Dim currentColumn As String ' ---▼ 列ループ:1行分の列を埋める For Each currentColumn In currentRow If (myCol = 2) Then myCol += 1 ElseIf (myCol < 5) Then Me.DataGridView1(myCol, myRow).Value = currentColumn myCol += 1 End If Next ' --▲ 列ループ myCol = 0 myRow += 1 End While ' --▲▲ 行ループ ' --- 入力ファイルを閉じる textFile.Close() End If

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

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

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

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

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

guest

回答3

0

myColがCSVとデータグリッドビューどちらの列も数える感じになっているのが問題なのかと思います。

If (myCol = 2) Then
の部分ではCSVの列数を意識していらっしゃるかと思いますが、それ以外はデータグリッドビューの意味合いで使われているようです。

myCSVColとmyDGVColの2つ変数宣言して、myCSVColは毎回カウント、myDGVColはmyCol = 2以外でカウントすれば、わかりやすいのではないでしょうか。

投稿2016/12/19 03:07

編集2016/12/19 03:10
tfukumori

総合スコア8

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

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

0

CSV ファイルの2列目を無視して、3列目を2列目に入れる、のですよね?

VB

1For Each currentColumn In currentRow 2 If (myCol = 2) Then 3 myCol += 1 4 ElseIf (myCol < 5) Then 5 Me.DataGridView1(myCol, myRow).Value = currentColumn 6 myCol += 1 7 End If 8Next ' --▲ 列ループ

このループで currentColumn が回るたびにどうなるかを考えると、
1回目:DataGridView1(0,row)に入る
2回目:DataGridView1(1,row)に入る
3回目:(myCol=2なので)myCol+=1される ※DataGridView1 には入らない
4回目:DataGridView1(3,row)に入る
という動きになります。

CSV の m 番目の項目と、DataGridView の n 番目の項目を紐づけたいのですから、変数は二つ必要なのです。

VB

1Dim csvColumn = 0 2Dim gridColumn = 0 3For Each currentColumn In currentRow 4 If (csvColumn = 2) Then 5 ' 何もしない 6 ElseIf (csvColumn < 5) Then 7 Me.DataGridView1(gridColumn, myRow).Value = currentColumn 8 gridColumn += 1 9 End If 10 csvColumn += 1 11Next ' --▲ 列ループ

投稿2016/12/19 02:29

tacsheaven

総合スコア13703

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

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

0

ベストアンサー

CSVカラムのカウントとグリッドカラムのカウントを同じに扱ってはダメでしょう。
というわけで、こんな感じでしょうか(未検証)
2番目というのが1から数えて2番目なのか、0から数えて2なのか曖昧だったのですが、前者にしてあります。
意図と違ってましたら適宜修正してください。

VB.NET

1' --- 行を文字型配列(currentRow)に読み込み、各列を DataGridView に格納する 2Dim currentRow As String() ' -- 文字型配列 3Dim myRow As Integer = 0 4Dim myCol As Integer = 0 5Dim txtCol As Integer 6 7' ---▼▼ 行ループ 8While Not textFile.EndOfData 9 Me.DataGridView1.Rows.Add() ' -- DataGridView に新規行を追加 10 currentRow = textFile.ReadFields() ' -- 1行を文字型配列に格納 11 Dim currentColumn As String 12 ' ---▼ 列ループ:1行分の列を埋める 13 txtCol = 0 14 For Each currentColumn In currentRow 15 If (txtCol <> 1 AND txtCol < 5) Then 16 Me.DataGridView1(myCol, myRow).Value = currentColumn 17 myCol += 1 18 End If 19 txtCol += 1 20 Next ' --▲ 列ループ 21 myCol = 0 22 myRow += 1 23 End While ' --▲▲ 行ループ 24 ' --- 入力ファイルを閉じる 25 textFile.Close() 26End If

投稿2016/12/19 02:22

ttyp03

総合スコア16996

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

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

teck

2016/12/19 06:24

解決いたしました。 回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問