3

たまにやらかすしくじりエピソードです。

1エクセルファイルの中に、2行目からデータが入っているリスト形式のシートが2つあり(シートA,シートBと記述します)、

両シートともやりたい操作を同じ(2行目以降データがある分、データ取得を繰り返す)なので、サブルーチンを作成。

変数"作業シート"をサブルーチンのローカル変数にし、サブルーチン呼び出しごとに、変数"作業シート"の値とするシート名を設定する。

⇒1つ目のサブルーチン呼び出しではシートAを設定

 2つ目のサブルーチン呼び出しではシートBを設定

【サブルーチン内容】------

・シート最終行を取得

・繰り返し条件を、範囲 値⇒2から最終行に設定した繰り返しグループを作成

・繰り返しグループの中に、Excel操作 値の取得2を置き、プロパティは列は固定(値⇒A)で、行に変数"行"(初期値に2を設定)を設定してデータを取得する

・~データ取得後の手順はしくじり内容とは関係がないので省きます~

・ループ手前で行をカウントアップし、繰り返し条件内であれば先頭へ

------------------------------

何かが足りないことにお気づきでしょうか?

上記でシナリオ実行したところ、シートAは問題なくデータ取得ができましたが、

シートBにデータが入力されているのに空白しか取得できませんでした。

繰り返しグループ内に一時停止を入れて、変数の現在値に注目しながら実行すると、すぐ気がつくことができましたが、

シートBの処理時に、Excel操作 値の取得2のプロパティ 行に設定している変数"行"の現在値が、

シートAの処理でカウントアップされたままになっていることが原因でした。

サブルーチンの開始時に、ノード 変数値設定で、変数"行"を2に設定する処理を追加し、無事解決ができました。

サブルーチンやローカル変数は、使いこなすとノード数の節約にもなりとても便利ですが、

今回のような変数のリセット忘れに注意が必要だと思ったので共有いたします。

Leo 質問の投稿
回答とコメントは、会員登録(無料)で閲覧できるようになります。