[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Callステートメントについて』(ぴょん)
質問です。
Callした後の文の中でもう一度Callすることは可能なのでしょうか?
一部抜粋なのですが、これだとCallで飛んだ先で「同じ適用範囲内で宣言が重複しています」とでます。
おそらく変数をすべて違うものにすればいけるとは思うのですが、ただでさえ多い変数をこれ以上増やしたくないので、もしいい案があれば教えて頂けないでしょうか?
ちなみに変数iはFor文のカウントで使用しており、他は数字やら文字列が入っています。
LoopIfIfの後も何度かCallでサブに飛ばしております。
If v = 3501 And v = a Then
Call LoopIf(i, m, c, d, e, i, w, x, y, z, sh1, sh2)
Sub LoopIf(i, m, c, d, e, i, w, x, y, z As Variant, sh1, sh2 As Worksheet)
If c = "" Then sh2.Range("C" & m & "") = sh1.Range("E" & i & "") c = x d = "" Call LoopIfIf(d, y, e, m, i, e, z, w, sh1, sh2)
ElseIf c <> "" And c <> x Then m = m + 1 sh2.Range("C" & m & "") = sh1.Range("E" & i & "") c = x d = "" Call LoopIfIf(d, y, e, m, i, e, z, w, sh1, sh2)
ElseIf c = x Then Call LoopIfIf(d, y, e, m, i, e, z, w, sh1, sh2)
End If
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows7 >
>Sub LoopIf(i, m, c, d, e, i, w, x, y, z As Variant, sh1, sh2 As Worksheet)
i が2つあります。 また、sh1 は As Variant が省略されたものとみなされます。 (cai) 2015/05/23(土) 12:18
>>Callした後の文の中でもう一度Callすることは可能なのでしょうか?
いわゆる再帰処理というもので、可能かどうかといえば可能です。 「再帰処理」あるいは「再帰呼出し」といった語句で検索すると参考ページがでてきますので 目を通されたらよろしいかと思いますが、この仕組みをしっかりと理解したうえで使う必要があります。 とんでもない結果になることも多いですし、無限ループに陥ることもあります。
提示のコードがOKかどうかは、要件がわからないので何とも言えません。 要件を言葉で説明いただければ、皆さんからアドバイスがあると思います。もしかしたら、こういう組み方ではなく もっとスッキリした組み立て方の提言もあるかもしれません。
変数の定義については、(cai)さんからコメントがある通りです。
処理に必要な変数の受け渡しは、それが必要なのでしょうから、必須でしょうね。 でも、これが多くなると、いずれ保守フェーズで、何が何だかわからなくなってしまうことになりますから 工夫が望まれますね。ただ、具体的な要件がわからないので、これについてもアドバイスしにくいです。
せめて、変数が何を指しているのか、目で見てわかりやすいネーミングにしておくことは考えられたらいいのでは?
m とか d とか、そういう名前だと、これ何? と、わかりにくくなりますね。
ところで、アップされたプロシジャ名は LoopIf ですけど、この中で呼び出しているのが LoopIfIf。 別のプロシジャですよね?
(β) 2015/05/23(土) 12:36
caiさんありがとうございます
βさん
LoopIfIfは別のプロシジャです。
要件となると少し説明しにくいのですが、400行あたりの元のデータから
5つの条件分け
(ここでv,w,x,y,zの5つの条件をそのデータから引っ張ってきてます)
を行い、すべて同じならその行に同じ条件のものの合計
(これは変数をとってないですが、上の5つの条件とは別のものです)
を出し、一つでも元のデータの前の行と異なれば次の行に移って、その合計をまた新しくとってくるものです。
元のデータと合計を出すシートを別に分けていて、mはその合計のシートの行数(どこに書くか)、a〜eは場合分けを行う用にv〜zと対応した変数となっています
そのためにあらかじめ元のデータをフィルタで並び替えたりはしています。
mやらcやらを長くすると横長なマクロになってしまい、個人的には見にくいので一文字にしていました。
(ぴょん) 2015/05/23(土) 13:05
よくわかりませんが、了解です。 なにかうまいコード記述があるだろうとは思うのですが、要件がわからないので、お手伝いできませんね。 がんばってください。
(β) 2015/05/23(土) 14:35
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.