アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBAついて
①if•••••then•••••1
for i=1to500
if•••••then••••2

end if•••••2
next i
end if••••1
このような場合、if1に対してendif1という見方でいいんでしょうか?
②if•••••then•••••1
for i=1to500
if•••••then••••2

end if•••••1
next i
end if••••2
もしくは、②の見方が正解でしょうか?

A 回答 (3件)

①です。



ちなみに、①みたいに後から入ったほうが先にでていく構造をスタックとかLIFOといいます。

逆に②のように先に入ったものが先にでていく構造をキューとかFIFOといいます。
    • good
    • 0
この回答へのお礼

基礎的な内容を理解しないまま、実務に使うプログラムを作ってしまっている状況です。
用語を教えていただく勉強するきっかけになり、非常に助かります!
ありがとうございます!

お礼日時:2017/09/04 23:36

そういうときは、構造で考えると理解しやすいかと。



if文は、次の2種類です。

if 〜 then 命令文

if 〜 then
「処理」
end if

後者を使う場合、if〜then と end if は一対一に対応しています。
そして(重要なことですが)

 **「処理」の部分だけでも、(文法的には)正しいプログラムになっています。 **

文法的に、というのは、実際に動作させようとすると、変数が無いとか値がおかしいとかはあるかもしれませんが、
形だけは正しい、ということです。


そうして考えると、②の方は、if ..1 〜 end if ..1 の間にある「処理」の部分は、次のプログラムになります。

for i=1to500
if•••••then••••2

明かに、「正しくないプログラム」です。
forに対する nextは無いし if (2)に対する endif もありません。



①の方は、「処理」の部分が次のようになります。

for i=1to500
if•••••then••••2

end if•••••2
next i

forに対する next があって、for〜next の中に if〜then〜end if の一塊があります。
「(文法的には)正しいプログラム」です。




else を加えたif文や、for,〜next, while〜end while 等も、同じ考えです。
    • good
    • 0
この回答へのお礼

複雑に分岐•繰り返し動作させる際、vbaの知識があまり無いのでfor とifを多用してしまいます。
構造を感覚で掴んでるせいか、どこのendifかわからなくなることも、多々あり、そんな時、質問内容の疑問が湧いてきました。
完璧に理解できてませんが、kmee様の回答を参考に理解を深めていきたいと思います。
ありがとうございます!!

お礼日時:2017/09/04 23:52

①です

    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2017/09/04 23:26

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!