とりあえず理由だけ簡潔に…。あとは質問があったら対応にしようかな…。以下、理由です。 パターンA: サブルーチン側のIという変数はループカウンタとしてよく使う変数なので今回呼び出し側のIを変更してもまたどこかで同じミスをしてしまうかもしれないので危険度は高い。ただし一箇所の修正で済むので今後改修の予定などがなければアリかも。 パターンB: サブルーチン側の変数をあまり使われない名前にして衝突が起こらないようにする。この名前を適切にすれば呼び出し側が変わる危険度はだいぶ減るでしょう。ただ危険度が0になったわけではないのがちょっと問題。(GOSUBの範囲での修正ならベストかな?)