Excelファイルからのデータ抽出について・

【やりたいこと】
同じ列名のある複数の範囲を取得→for each rowで1行ずつ読み込み
【状況】
・取得したい範囲
①シート1のA3~Dのデータのある行まで
②シート1のG3~Kのデータのある行まで
・①と②はそれぞれ列名が同じで内容が違う
・データのある行は①と②で異なり、それぞれの行数も変動する

【質問】
以上に記載したExcelファイルを別のファイルへ1行ずつ取得する良い方法はありますか?
現状、AからのものとGからのもののデータがある分だけ範囲を取得してそれぞれループ処理していますが、これではデータが追加されたとき耐えられず意味がありません。
あとは範囲の指定をA:Dと、行番号なしにするとヘッダーが読み込めずループ処理でエラーになります。
このようなことは多々起こりうると思いますが知識が乏しいため、ご教示願います。

いっそ、A3セル〜のデータ、G3セル〜のデータと言う意識せず、ヘッダーの追加をオフにして、A1セル〜のdatatableに読み込む。

for each rowをやめ、for eachで、添字を定義して、datatable.rows(ix).item(0)などで、セルイメージで制御するってのはいかがですか?

A列はitem(0)、B列はitem(1)のように列方向への制御が可能ですよ。

1 Like

ありがとうございます。
・エクセルからA1~(すべて?)の範囲を読み込みし、データテーブルに出力
→for eachで添え字による制御

という流れの解釈で合っておりますでしょうか?

仔細な仕様はわかりませんが、
1)A3からの列方向のfor each
2)行方向のfor each
3)G3からの列方向のfor each
4)行方向のfor each
ですね。

1 Like

たびたび申し訳ございません。
1)A3からの列方向のfor each
2)行方向のfor each
3)G3からの列方向のfor each
4)行方向のfor each

このそれぞれのループの入れ子の中で、その値を取得して出力するのはどのような書き方でしょうか?
コレクションの書き方と、それぞれの値を取得する書き方がわかりません。

何もわからず申し訳ございません。

例えば、列方向のfor eachのパラメータの添字をicolとします。A列は0ですので、そのままitem(icol)ですね。G列は6ですので、item(icol + 6)です。

か、コレクションに{0,1,2}とか、{6,7,8}で指定してもいいですね。

行方向も同様に、添字をirowとした場合、rows(irow)で行が得られます。

この二つを組み合わせて、
datatable.rows(irow).item(icol).to string
で、文字列として参照出来ます。

1 Like

for each文の書き方について大変わかりやすく教えていただきありがとうございます。

列方向のfor eachの中に行方向のfor eachを入れ子にし、そのbody内に「datatable.rows(irow).item(icol).to string」このように書けば良いのでしょうか。

datatableは、実際に格納した変数にしてくださいね。

正しい変数名でしたら、ピリオドを、入力したら、次に記述できる単語が候補として出てきますので、それも参考にどうぞ!

1 Like