Excelで扱うCSVファイル

配列の一括入力

全334コースを10日間無料で

ぜひご覧ください。

無料で視聴する すべての加入プランを見る
または
1行分のデータから生成した配列を、複数のセル範囲に、一気に代入する方法を解説します。
講師:
13:04

字幕

このレッスンでは配列の一括入力について解説します。まず、このチャプターで使うテキストファイルを準備しておきましょう。C ドライブに Work というフォルダーを作成しチャプター2の Sample.txt 、Sample.csvData.csv を保存してください。尚、このレッスンではSample.csv を使用します。この Sample.csv の中はこのようになっています。日付・文字列・数字がそれぞれカンマで区切られた CSV ファイルです。まず CSV のファイルをセルに代入する考え方をおさらいしておきましょう。CSV ファイルはテキストファイルですからまずはファイルを開きます。この時に使うのがOpen ステートメントです。開いたファイルから1行分のデータを読み込みます。ここでは Line Inputステートメントを使います。この Line Input ステートメントによって1行分のデータが変数 buf に格納されます。変数 buf に格納された1行分のデータはカンマで区切られているのでそれを Split 関数で分割します。Split 関数は配列を返します。従って左側で受け取る変数はバリアント型を指定します。 配列を受け取ったバリアント型変数は自分自身を配列に変えます。従って配列の各部屋をそれぞれの列に代入していけばCSV のデータをワークシートに展開していけます。この一連の流れをDo Loop で繰り返します。Do Loop の条件はLine Input が読み取る読み取りポイントがファイルの終端つまり EOF に達していない間ということです。Do Loop が終わったら開いたファイルを閉じます。この時に使うのが Close という命令です。この流れを VBA のコードに表すとこのようになります。真ん中辺にある Cells(i, 1)=tmp(0)ここにある3行で配列の要素を1つずつセルに代入しているわけです。しかし、もし CSV のデータが沢山の要素を含んでいたらどうでしょう。たった3つではなく10、20、30とカンマで区切られた要素が沢山あった場合この Cells を使った代入が10行、20行、30行と増えてしまうことも考えられます。勿論、そうした時にこの青で囲った部分をFor Next によって繰り返すことも可能です。しかしここでは配列のデータを一気に変数に代入する方法を紹介します。そもそも配列というのは1つの変数の中がパーテーションで区切られていて複数のデータが入居しているような状態です。 例えば A という配列の0号室には田中1号室に鈴木、2号室に山田と入っているような状態、これが配列です。実は VBA ではこうした配列は同じ大きさのセル範囲に一括入力することが可能です。このように0号室、1号室、2号室という3部屋のデータであればワークシートの A1 B1 C1つまりセル範囲 A1:C1 に代入することが可能なのです。この場合配列は2号室までですね。配列の方が 0,1,2ワークシートの方が1列目、2列目3列目であることに注意してください。さて、この Range("A1:C1") というのはこれは1行掛ける3列の大きさですね。これは Resize という命令を使ってセルの大きさを指定することができるんです。例えば、セル A1 という1つのセルは見方を変えると1行掛ける1列のセル範囲と言えます。この1行掛ける1列のセル範囲を1行掛ける3列の大きさへ変更する、これが Resize の役目です。これを使うと、受け取るセル範囲の大きさを動的に変更することが可能になります。しかし、配列の要素の数が分からなかったら困りますね。ここで Resize で指定している3について考えてみます。 この3とは一体何でしょう。これは配列の要素の数と等しいですね。もし配列が4部屋あったらここは4になります。では、配列の要素の数を調べることはできるのでしょうか。VBA には UBound 関数があります。UBound 関数は配列の1番大きい部屋番号を返します。この図では2号室まであるので2を返します。つまり配列の要素の数とはこの UBound 関数の結果に1を足したものである、と考えられます。従って、 Resize とこの UBound 関数を使うとこのように配列を一括入力することが可能です。Cells(i, 1) というのはi 行目の1列目ということですね。つまり1つのセルを指しています。それを横方向に広げたセル範囲に配列を代入しています。このマクロの動作を確認してみましょう。チャプター2の Input.xlsm を開きSheet3 を開いてください。尚、ブックを開いたときにマクロを無効にした旨のメッセージが表示された場合コンテンツの有効化ボタンをクリックするなどしてマクロを有効にしてください。VBE を起動しましょう。「開発」タブを開き左端の Visual Basic ボタンをクリックします。 実行すると VBE が起動します。ここでは Module6 をダブルクリックで開いてください。今解説したコードがここに記載されています。今の解説を思い出しながらコードをよく読みイメージしてからマクロを実行してみてください。実行すると配列が行単位に一括入力されたのが分かります。しかし、少し様子が変ですね。今入力されたワークシートの C 列は数字が文字列形式で代入されています。これは Excel の仕様です。配列を一括入力した場合数値がこのように一時的に文字列形式で代入されてしまうのです。しかし、ここに文字列の表示形式が設定されているわけではありません。確認してみましょう。セルを右クリックして「セルの書式設定」を実行します。表示される「表示形式」の分類リストを見ると文字列ではなく「標準」が設定されているのが分かります。つまり、これは一時的に文字列の状態になっているだけなのです。このセルを純粋な数字に変換するにはセルを編集状態にしてセルの値を入力し直します。編集状態にして値を入力し直すことで正しい数値形式として入力することが可能です。では、これをマクロで実行するにはどうしたら良いでしょう。セルの値は VBA ではValue プロパティで表されます。 つまり、値を入れ直すということはセル範囲の Value プロパティを同じセル範囲の Value プロパティに代入し直してやるということです。考え方としては赤で書いたセル範囲. Value =セル範囲. Valueこういう式になります。この代入式ですが左辺のセル範囲と右辺のセル範囲はこれは同じセル範囲を表していますね。どちらも同じものです。従って、With ステートメントを使ってこのように表すことができます。さて、今回対象となるセル範囲はC1 から C5 です。しかし、これが自動的に分からなければマクロで処理することは難しいですね。では、このセル C1 から C5 をどうやって指定すれば良いのでしょう。このセル範囲は、C1 が上端セル下端セルは C5 と考えられます。セルを特定する時の Range には2つの書式があります。Range の2番目の書式を使うとこの上端セルと下端セルを使ってこのように表せます。上端セルは固定ですね。つまり、 Range ("C1") で構いません。では下端セルはどうでしょう。もしここを Cells で表すとするならCells(行 列) の列は3で決まりです。この行に何を指定すれば良いのでしょう。 実は CSV のデータを行ごとに格納する時にDo Loop の中で変数 i を使っていますね。その i がこの最終行になっています。従って、この Cells の行のところに変数 i を指定してやればよいということになります。実際のコードを見てみましょう。VBE を起動して今度は Module7 をダブルクリックしてください。最後に書いてあるのがValue プロパティを代入し直すコードです。動作を確認するためにA 列から B 列を一度削除しておきましょう。この状態でマクロを実行してみます。「Sub/ ユーザーフォームの実行」ボタンをクリックすると先程と違い、数字が数字のまま代入されています。配列を一括入力するとこのような弊害が生じる時もあります。その時は落ち着いて値を値に代入し直す、Value を Value に代入し直すと考えてください。このレッスンでは配列の一括入力について解説しました。

Excelで扱うCSVファイル

CSV形式で保存されたテキストファイルをダブルクリックすると通常Excelが自動的に起動しますが、しばしばデータが正しく読み込まれないなどのトラブルが発生します。このコースでは必要な用途に合わせて適切にデータを読み込めるように、CSVファイルを扱ううえで必要な知識や読み込み・出力のさいの注意点などについて解説します。

2時間04分 (20 ビデオ)
現在、カスタマーレビューはありません…
 
ソフトウェア・トピック
価格: 1,990
発売日:2014年03月05日

このコースは、「オンデマンド」でご利用可能であり、ダウンロードすることもオンラインで見ることもできます。

ダウンロードすると、オフラインでコースを使用し、豊富なインターフェースをフルに活用できます。複数のデバイスを使用したり、 一度に全コースをダウンロードしたくない場合は、アカントにログインして、ストリーミング・ビデオとしてコースのレッスンを視聴してください。

ビデオトレーニングをお楽しみいただけますように! お問い合わせは、cs-jp@lynda.com宛までご連絡ください。