こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2003でcsvの指定行を読み込む

こんにちわ。
Excel2003のマクロでcsvファイルを読み込みたいと思っています。
csvの中身は下記通りです。
例)
  A   B   C   D..........
1  "氏名"
2  2    2   1   3....(整数の羅列)
3  1    3   2   3....(整数の羅列)
4  3    3   3   3....(整数の羅列)
5  2   1   2   3....(整数の羅列)
このファイルを、エクセル上でボタンを押したら(マクロを実行したら)指定した行のみを読み込んで、それをエクセルのシートの指定したセルに代入するのは可能でしょうか?それぞれの行の整数の数は違います。

投稿日時 - 2008-09-16 11:42:46

QNo.4332725

すぐに回答ほしいです

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

ANo.3です。

読み込む毎にカウントを行なう。
カウント数(行数)に応じて処理を変更する。
変更はIF文・SELECT CASE文などで分岐する。
2行目以降については、前回の質問の方法がいかせるはず。
書き出すシートの指定を忘れずに。

と言った所ではないかと。

投稿日時 - 2008-09-16 18:31:33

補足

ありがとうございます!その方法で挑戦してみます。

投稿日時 - 2008-09-17 08:46:10

ANo.4

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(7)

ANo.7

読み込んでの処理が困惑するのであれば、csvファイルを開いておいて
そこからデータを引っ張り込むようにしてみては如何でしょう。

投稿日時 - 2008-09-18 07:47:46

ANo.6

http://oshiete1.goo.ne.jp/qa4320861.html
の関連質問なのでしょうか?

でしたら現状できているコードをお示しになった方が解決が早いかと

データの区切りに法則性がないと補足されていますが 以前はカンマ区切りだとして質問なさっていますよね …

投稿日時 - 2008-09-17 00:36:04

補足

すみません。カンマ区切りでした・・・。

現状、まだ処理部分のコードは出来ていません。

投稿日時 - 2008-09-17 09:27:36

ANo.5

#2です。補足いただいたのですが
疑問点がいっぱい。
ーーー
基本的には、CSVの行データを、エクセルシートでは列方向(上から下)にセットしたいのですか?
ーー
>シート1のに、2行目を読み込んだらシート1のB14:B145に、3行目を読み込んだらシート2のB14:B73、E14:73、H14:H73・・・というように・・・
第1行目とは、氏名(例 大山 一郎)ですよね
それをA1:K1とは、同じ名前を11列に渉って入れるのですか?
>2行目を読み込んだらシート1のB14:B145
とは第2行目だけは、132行分のCSV項目があるのですか?
第3レコードの60項目?と大きく違いますが。
>シート2のB14:B73、E14:73、H14:H73
ココでシートが変わる理由は?
ココ以後はSheet2にデータをセットし、
60項目あるということですか?
それ以後は
第3レコード B14:B73
第4レコード E14:73
第4レコード H14:H73
・・・
のように、3列(中2列飛ばし)ごとにセットするのですか。
>それぞれの行の整数の数は違います
これと第3レコード以後は60項目らしく
第3レコード B14:B73
第4レコード E14:E73
第4レコード H14:H73
とあって
それでは同じ項目数のようでは無いですか?

投稿日時 - 2008-09-16 21:50:25

補足

分かりづらくてすみません。

>基本的には、CSVの行データを、エクセルシートでは列方向(上から下)にセットしたいのですか?
そうです。csvの行データをエクセルの列方向にセットしたいと考えています。

>第1行目とは、氏名(例 大山 一郎)ですよね
それをA1:K1とは、同じ名前を11列に渉って入れるのですか?
すみません。K1に氏名をセットします。

>2行目を読み込んだらシート1のB14:B145
とは第2行目だけは、132行分のCSV項目があるのですか?
第3レコードの60項目?と大きく違いますが。
2行目は132項目あります。

>シート2のB14:B73、E14:73、H14:H73
ココでシートが変わる理由は?
ココ以後はSheet2にデータをセットし、
60項目あるということですか?
都合上そうなってしまいます・・。

1行目はシート1のK1に、2行目はシート2のB14:B145に、3行目はシート1のD3:P3、4行目はシート1のD6:P6、5行目はシート1のD9:P9、6行目はシート1のR3:W3、7行目はシート1のR6:W6、8行目はシート3のB14:B73、E14:E73、H14:H73にセットしたいと考えています。

投稿日時 - 2008-09-17 08:50:31

ANo.3

既に別に質問を立てていたのですね。

>指定した行のみを読み込んで、
とは、読み込んだ行に”指定文字”が含まれているかどうかを判定し、
含まれていたらセルへの書き込みを行ない、そうでなければ書き込まず
次の読み込みを行なっていくだけです。

ただし、”指定した行のみ”の詳細を明確にしないと回答も困難です。

投稿日時 - 2008-09-16 13:32:28

補足

前のスレからありがとうございます。
詳細はANo.2の補足の通りです。

投稿日時 - 2008-09-16 15:27:29

ANo.2

質問の表現が不十分では?
>指定した行のみを
これは1行のみを指定するのか。
その行番号は何がはいっているか、通常知らないはずでは。
氏名(例 三浦 一郎)などを指定し、三浦 一郎に関するデータを表示したいのでは?
三浦 一郎はデータを総当りすれば探せるが、三浦 一郎のデータ行の最後はどうして判別できるか?
一人文の行数は決まっているのか?
A列だけデータがある行が出ると次の者のデータの始まりと看做すのか?。
こういうことを心配しないで、4行目の4を指定すると第4レコードを表示するのなら私の思い過ごしですが。
ーーー
>1) の指定の方法などが分かりません。
こんなのWEB照会すればわかることだよ。
http://www.k1simplify.com/vba/tipsleaf/leaf291.html
など。
このレベルで質問すれば、丸投げ質問になるよ。

投稿日時 - 2008-09-16 13:28:04

補足

すみません。質問の表現が不十分でした。
一つのcsvファイルに例のような形でデータが入っていて、
例)
  A   B   C   D  E  F  G  ・・・
1 "氏名"
2   2   2   1   3   2  ・・・
3   1   3   2   3   1  2  3・・・
4   3   3   3   3   3  1・・・
5   2   1   2   3   ・・・
各行の整数の値はテストの選択番号で、1行目を読み込んだらシート1のA1:K1に、2行目を読み込んだらシート1のB14:B145に、3行目を読み込んだらシート2のB14:B73、E14:73、H14:H73・・・というようにcsvの値を代入したいと考えています。別に行数を指定する必要はありませんでした。

投稿日時 - 2008-09-16 15:26:30

ANo.1

1) Openステートメントでファイルをオープンする
2) Line Inputで指定行の直前まで空読みする
3) Line Input指定行を読み込む
4) Closeファイルを閉じる
5) データを分解する
  データの区切りに法則性があるなら Splitで分解
  統一性の無いの区切り方式なら自前の関数を作成
6) 指定セルへデータの流し込み
といった手順でしょう

1) の前にファイルの指定や 何行目を読み込むとか、どこのセルへ転記するなどの処理も必要ですが ・・・

投稿日時 - 2008-09-16 12:15:13

補足

ご回答ありがとうございます。
もしcsvの中身が
A   B   C   D  E  F  G
1  "氏名"
2  2    2   1   3  1
3  1    3   2   3  2  3
なら、どのようにすればよいのか教えていただけないでしょうか?
1) の指定の方法などが分かりません。
5)のデータ区切りに法則性はありません。

投稿日時 - 2008-09-16 12:58:03

あなたにオススメの質問