Excelでループを後ろから回す方法について

タイトルの通りなのですが、A1~A10に値が入っていたとすると、A10→A9→A8・・と、
下から上へ逆順にループをかける方法はないでしょうか?

「範囲を読み込み」アクティビティで読み取ったDataTable型を、「繰り返し (コレクションの各要素)」アクティビティで回す事を前提とします。

「繰り返し系」アクティビティには、出力として「現在のインデックス」があります。その値を利用します。

繰り返し (コレクションの各要素)アクティビティっで、
要素はItem(DataRow型)、コレクションにDT.Rows
と設定します。

現在のインデックスにix(Int32型)を定義しておくと、

逆に参照するには、
DT.Rows(DT.Rows.count - ix - 1).Item(0)
となります。

DT.Rows.Countは0からの実際の数。
ixは0から+1されるので、4,3,2,1,0行目のようにDTの行を参照していきます。

1 Like

こんにちは

いくつかやり方があるかと思いますが、繰り替えし(前判定)を使った例です。
ご参考まで

1 Like

@Yoichi
@HANACCHI

回答ありがとうございます。
そちらは一度実装してみます。

同じく、ループ処理で質問したいのですが、列名がわかっている場合にrow.(“列名”).tostringでループ処理を行う時、ループの開始位置を指定することはできるのでしょうか?
("列名"の中で開始する行を指定し、"列名"のデータの最後までループを行いたいです)

いくつかやり方があるかと思いますよ。

案①)条件判定用にBoolean型変数を用意し、条件を満たしたらBoolean型の値をTrueにする。
条件を満たさない状態の行は処理しない。条件を満たした状態での行は処理対象とする。

案②)条件を満たしたら、「現在のインデックス」を他の変数Iyに代入し、Breakする。
「繰り返し(前判定)」などで終了にならない間処理する。
その時、「繰り返し(前判定)」の中で、他の変数Iyをカウントアップする。
忘れると無限LOOP

私は案①派(^^♪

1 Like

@HANACCHI
ありがとうございます。
その方法は、条件を満たすか満たさないかという判断をデータの1行目からループしているということですよね?
データの10行目からループするような添え字みたいなものはないのでしょうか・・

For Each ではないFor 文があったら便利なんですけどね(^^♪

ご要望の方法でしたら、案②ですね。

1 Like

こんにちは

たぶんこんな感じになるかと
最初のindex=0 を他の数字に変えるとそこから始まります。

1 Like

@Yoichi
こちら参考にさせていただきできました!
大変助かりました。

1 Like

@Yoichi
昨日こちらで動いたのですが、同じように作り直したら「位置-1に行がありません」とエラーが出てしまいました。

元々シーケンスで作っていたものを、長くなってしまったのでフローチャートで作り直しました。
どこに問題があるか心当たりはありますでしょうか・・
もしわかればご教示ください。

こんにちは

dt.Row(位置-1)("列名")
のようになっているのでしょうか?
結果として「位置-1」がマイナスまたは行数以上となっているかと思います。
ロジックをシンプルにするためにRow()の中での演算は避けたほうが良いように思えます。
その上で、どこか想定とことなる箇所を見つける必要があるかと思います。

dt.Row(index)(“列名”)
としていて、indexの値は15(=データの存在している行)になっています。

こんにちは

エラーの出方確認しましたところindexが-1になっているときのメッセージですね。(位置というのはシステム側が出力する固定メッセージでした。)

デバッグモードで実行したときに、例外で止まると思いますが、そのときのローカルパネルに表示されるindexの値確認いただけますか?

1 Like

確認したところ、きちんと15からカウントされていて、条件式が間違っていたために-1までいってしまっていたようです。
ありがとうございます。

2 Likes

This topic was automatically closed 3 days after the last reply. New replies are no longer allowed.