選択範囲内のセルに値が入っていたら、順番にテキストファイルに出力しよう

Pocket

選択範囲内のセルに値が入っていたら、順番にテキストファイルに出力しよう
選択範囲内のセルに値が入っていたら、順番にテキストファイルに出力しよう

序文

はい。

夏休みも1週間経ち、そろそろ夏休みの宿題をやることを後回しにすることに躊躇する、憂鬱な気分になる時期になってきましたね。

自分も苦手でした。夏休みの宿題。

宿題を放っていてMS-XのDanteというRPGツクールでRPGを作って、登校日もサボっていたら、呼び出しをくらって先生と友達が迎えにきていました。

なかなかやっかいな夏休みの宿題ですが、先にやっつけておけば、気分的にも安心でき、夏休みを心地よく過ごせるものです。

そこで、今日のエクセルVBA日本語化の宿題もやっつけておきましょう。

今日の日本語VBAの課題は、

  • 選択範囲内のセルが入っていたら、順番にテキストファイルに出力しよう

というお題です。

これで、範囲選択しさえすれば、どんなデータも好きにテキストファイルへ出力できます。

それでは、いってみましょう!

ファイルを開いておく

メインとなるサブルーチン

まずは、サブルーチンの囲いを作っておきましょう。

メインとなるサブルーチン
メインとなるサブルーチン

メインとなるサブルーチン

以下のコードをコピペされてもかまいません。

ファイルを開く

次に、「io_入出力」という道具を使ってファイルを開きます。

以下のように、「io_」まで入力してCTRL+スペースキーを押下すると、コードが補完され、「io_入出力」と補完されます。

「io_」と入力し、CTRL+スペースキーを押下してコードを補完する
「io_」と入力し、CTRL+スペースキーを押下してコードを補完する
補完結果
補完結果

次に、「.(ピリオド)」を入力します。するとコード補完候補が表示されます。

「io_入出力」のコード補完候補。「ファイル書込開く」を選択する
「io_入出力」のコード補完候補。「ファイル書込開く」を選択する

コード補完候補が表示されたら、「ファイル書込開く」を選択し、TABキーを押下して補完を完了します。

次に、「ファイル書込開く」の引数に、ファイル名や、フォルダ名を指定していきます。

コードの下に、どのような引数があるかリスト表示されるので、ファイル名、フォルダ種別などを指定していく
コードの下に、どのような引数があるかリスト表示されるので、ファイル名、フォルダ種別などを指定していく

まず、ファイル名に、”セルの値.txt”と指定します。

ファイル名に”セルの値.txt”を指定
ファイル名に”セルの値.txt”を指定

次に、「,(カンマ)」を入力します。次の引数へ移るという意味です。

フォルダ種別の補完候補に「現在のフォルダ」を指定する
フォルダ種別の補完候補に「現在のフォルダ」を指定する

すると、フォルダ種別の指定にコード補完候補が表示されます。

フルパスで指定したり、マイドキュメントを指定できます。

ここでは、「現在のフォルダ」を指定します。

この指定により、“セルの値.txt”はエクセルブックのある現在のフォルダに作成されます。

以上で、ファイルを書込用に開くコードは完成です。

ファイルを書込用に開くコードの完成
ファイルを書込用に開くコードの完成

コードは以下のようになります。うまくいかない場合は、ここからコピペしてください。

選択範囲内の、各セルを引数に、個別に呼び出すブロックの指定

次に、選択範囲内のセルごとにブロックを呼び出すコードを書いてみましょう。

ブロックとは、通常のサブルーチンのことなのですが、「セルごとにサブルーチン呼び出し」から呼び出される点が、通常のサブルーチンと違います。

この「セルごとにサブルーチン呼び出し」から呼び出されるサブルーチンを、通常のサブルーチンとは違うよ、と意識するため、「ブロック」と称しています。

(動作的にはRubyのブロックと似たようなものですので、Rubyのブロックから名称を拝借しました)

まず、選択範囲を取得するコードを書く必要があります。

そこで、まず、「g_道具」を呼び出します。

「g_」と入力して、CTRL+スペースキーを押下して、「g_道具」とコード補完します。

「g_」まで入力してからCTRL+スペースキーを押下してコード補完する
「g_」まで入力してからCTRL+スペースキーを押下してコード補完する
「g_道具」とコード補完された。
「g_道具」とコード補完された。

次に、「セル」を取得します。

選択範囲」は「セル」の配下にあるため、ここで「セル」を取得しなければいけません。

「.(ピリオド)」を入力し、コード補完候補を表示させます。

「.(ピリオド)」を押下してコード補完候補を表示させ、「セル」を選択する
「.(ピリオド)」を押下してコード補完候補を表示させ、「セル」を選択する

コード補完候補を表示させ、「セル」を選択し、TABキーを押下して、補完を完了します。

さらに続けて「.(ピリオド)」を入力し、コード補完候補を表示します。

「.(ピリオド)」を押下してコード補完候補を表示させ、「選択範囲」を選択
「.(ピリオド)」を押下してコード補完候補を表示させ、「選択範囲」を選択

最後に「.(ピリオド)」を入力し、選択範囲のサブルーチン「セルごとにサブルーチン呼び出し」を選択します。

選択範囲の「セルごとにサブルーチン呼び出し」サブルーチンを選択する
選択範囲の「セルごとにサブルーチン呼び出し」サブルーチンを選択する

次に、「セルごとにサブルーチン呼び出し」サブルーチンに呼び出すブロック”b_セルをファイルに出力”を指定します。

「セルごとにサブルーチン呼び出し」にブロック”b_セルをファイルに出力”を指定する
「セルごとにサブルーチン呼び出し」にブロック”b_セルをファイルに出力”を指定する

ファイルを閉じる

次に、ファイルを閉じるコードも加えておきましょう。

「io_入出力.ファイル閉じる」と入力します。

「.(ピリオド)」により補完コードを表示させ、「ファイル閉じる」を選択してください。

以下のようなコードになります。

「io_入出力」の「ファイル閉じる」サブルーチン
「io_入出力」の「ファイル閉じる」サブルーチン

 

 

選択範囲のセルごとに呼び出すブロックを作成する

ブロックの囲い

次にブロック”b_セルをファイルに出力”を作成します。

ブロック”b_セルをファイルに出力”
ブロック”b_セルをファイルに出力”

コードは以下のようになります。ここからコピペされてください。

 

第一引数は、「セルごとにサブルーチン呼び出し」から、選択範囲中のセルが1回の呼び出しごとに1つずつ順番に渡されます。

ここでは第一引数の名前に「w_セル」(ワークセル)、型に「セル」を指定しています。

型「セル」は日本語VBA独自のもので、セルに関するいろいろな操作やデータ取得が出来ます。

If文でセルに値があるか判定

ここでは、セルが空白でなく、値が存在していた場合にファイルに出力する、ということが目的でした。

そのため、「if ~ then」文で、セルに値があった場合のみ行う処理を書きましょう。

セルに値がある、つまり、””(空白)とは違う場合という条件式
セルに値がある、つまり、””(空白)とは違う場合という条件式

セルに値がある、つまり、””(空白)とは違う場合という条件式は、「If w_セル.値 <> “” Then」と書きます。

ここでは、セルは「w_セル」、空白は「””」、両者が違っているという条件式は「<>」です。

という文字がVBAでは使用できないため、「<>」とちょっとかわった記号が使用されています。

セルに値があった場合、テキストファイルに出力

次に、セルに値が存在する場合、テキストファイルにセルの値を書き込みます。

If文の中で、セルの値をテキストファイルに出力する
If文の中で、セルの値をテキストファイルに出力する

ここでは、「io_入出力」の「ファイル1行出力」サブルーチンにw_セル.値のデータを指定して、テキストファイルに1行セルの値を出力しています。

補完の仕方は、みなさん、もう了解されていると思いますので、省略しています。

完成形の日本語VBAのコードは以下のようになります。

実際にファイルに出力してみよう

元データ
元データ

上記のようなデータがあったとします。

これらのうち、値のあるセルの値をテキストファイルに出力してみましょう。

「開発」タブの「マクロ」ボタンをクリックする
「開発」タブの「マクロ」ボタンをクリックする

先ほど作成した日本語VBAを実行するには、まず、「開発」タブの「マクロ」ボタンをクリックします。

「開発」タブをエクセルに表示させる方法は、下記URLを参照してください。

「マクロ」ダイアログ
「マクロ」ダイアログ

すると、「マクロ」ダイアログが開き、サブルーチンの一覧が表示されます。

ここで、先ほど作成した「選択範囲のセルをファイルに出力」サブルーチンを選択し、「実行」をクリックします。

実行結果は、以下のようなテキストファイルになります。

実行結果
実行結果

値のあるセルの値をテキストファイルに出力できていますね。

値のないセルは無視されています。

まとめ

お疲れ様でした。

ここまで読んで頂いて、ありがとうございました。

ブロックの概念は少し難しいものですが、応用すればこのように短いコードで、有益な実行処理を得られます。

ぜひ、みなさんも使いこなされてくださいね。

本日の学びを以下にまとめます。

  • io_入出力」変数から、ファイルを開くことができる。
    ファイルの場所は「現在のフォルダ」や「マイドキュメント」「フルパス」が指定できる。
  • 選択範囲」からは、「セルごとにサブルーチン呼び出し」が実行でき、ここでブロックを指定できる。
    ブロックの指定はサブルーチン名の文字列。
  • ブロックでは、第一引数に、現在の呼び出しの呼び出し元のセルが渡される。
  • 「io_入出力」で、テキストを1行出力できる。

まだまだ暑い日が続きますが、熱中症には注意して、有益な日々を過ごされてくださいね。

それではー またー (^_^)/

The following two tabs change content below.
KaBA@フリーランス修行中

KaBA@フリーランス修行中

こんにちは!IT業界で勤めて17年くらい務めています。プログラミング大好きやろーです。 自分も独学でC言語を覚えIT会社に就職しました。その後紆余曲折を経て、VB6.0、VBA、Perl、C#、HTML、CSS、JavaScript、PHPなどを覚えていきました。全部C言語の独学時の経験がベースとなって、学習曲線が良いカーブを描いていました。 情報工学科を出ていなくても、独学でエンジニアは育つことができると思います! このブログで皆さんがプログラミングに興味を持たれるのを心待ちにしています! 頑張って覚えられてください!よろしくお願いします。 趣味は読書で、小宮一慶さんや松下幸之助さんなど著名人の本を読んでいる他、赤川次郎さんの三毛猫ホームズシリーズ司馬遼太郎吉川英治さんの三国志などが好きです。