下の関数の名前をyobidasiと付けます。
この関数の中で例えば一つ目のモジュールから呼ばれると
if文の中の符号を"<"にし、また別の二つ目のモジュールから
呼ばれた場合、符号を">"にだけ変えてプログラムを動かしたいんです。
一番短い内容で符号だけを切り替える方法をぜひ教えてほしいです。
よろしくお願いします。
private sub yobidasi(byref aaa() as integer)
:
:
if aaa(x) < aaa(y) then
:
:
end if
end sub
考え方を変えてみてください。
aaa(x)<aaa(y)は"aaa(x)はaaa(y)より少ない"という意味です。
ならば、コードを変更する必要はありませんね。
ifについてですが、
もしそうであれば真(Then)、そうでなければ偽(False)です。
よって、たかみちえさんがおっしゃるとおりなのです。
ミス
偽(False)->偽(Else)
【論理条件】の結果を引数として渡すってのはダメかな?
(同値の場合を弾く必要があるけどね)
Private Sub yobidasi(ByRef aaa() As Integer _
, ByVal blnCondition As Boolean)
:
:
If (aaa(x) < aaa(y)) = blnCondition _
And (aaa(x) <> aaa(y)) Then
:
:
End If
End Sub
?
なんとなく、kuriさんの希望とは違うような気がするんですが
私の勘違いであればすみません。
要するに一度目と二度目でaaa()の値がまったく同じであっても
結果を変えたいということなのではないですか?
Elseを使っても
その場合、同じ結果がかえってしまいます。
また、< と > はNotの関係にはありません
<はNot >=で
>はNot <=です。
使うのであればElse ifだと思います。
まず、わかりやすく引数もかえます
(呼びだし側)
call yobidasi(5,3,0)
call yobidasi(5,3,1)
(プロシージャ)
private sub yobidasi(x,y,flag)
if flag=0 then
if x < y then
msgbox y
end if
else if flag=1 then
if x > y then
msgbox y
end if
end if
end sub
この場合、二度目でだけでメッセージボックスがでてきます。
ところが
if x < y then
msgbox y
else if x > y then
msgbox y
end if
だと
両方でます。
こういうことではないかと思ったんですが。
違ってたらすみません。
で、もしそうでしたら、結局のところ
private sub yobidasi(byref aaa() as integer,flag)
if flag=0 then
if aaa(x) < aaa(y) then
end if
else if flag=1 then
if aaa(x) > aaa(y) then
end if
end if
end sub
とすれば良いと思います。
予想ですが、昇順と降順の入れ替えかなにですか?
・・・違ってたら恥ずかしいな(笑)
最近そういう勘違い多いからなぁ・・・。不安だ(笑)
>private sub yobidasi(x,y,flag)
private sub yobidasi(x as long,y as long,flag as long)
>private sub yobidasi(byref aaa() as integer,flag)
private sub yobidasi(byref aaa() as integer,flag as long)
の間違いです。(^^;
>private sub yobidasi(x,y,flag)
private sub yobidasi(x as long,y as long,flag as long)
>private sub yobidasi(byref aaa() as integer,flag)
private sub yobidasi(byref aaa() as integer,flag as long)
の間違いです。(^^;
私のちょっと前に書き込みがあったのに今気がつきました。
spiralさんのもののほうが私のよりスマートですね(^^)
返事が大変遅れて申し訳ないです。
みなさんの協力もあって無事なんとか解決しました。
本当にありがとうございました。感謝
ツイート | ![]() |