プロが教える店舗&オフィスのセキュリティ対策術

構文を作る際に、インデントを見やすくバランスよくつけたいのですが、よく分かりません。
やっているうちに分からなくなってきて、気が付いたら、行頭が全部揃っていたりしています。
見やすくインデントをつけるには、どうしたらいいのかさっぱり分かりません。
どういう風にしたらいいのか教えてください。

A 回答 (8件)

あまり役に立たない回答のようでしたが....



> たとえば、IF文を沢山いくつか作ったりしていると、

例えば、IF ~ Then と入力したら、直ぐ End If を書くんです。

  If a > 0 Then

と入力したら、Enter キー押下で VBE 標準の機能で自動的にインデ
ントが挿入されますので、そのまま End If を入力。

  If a > 0 Then
  End If

あとは、中間に Enterキー連打で適当に空行を挿入し、If~End If の
インデントよりひとつ深い場所に必要なコードを書いていく。

  If a > 0 Then
    Msgbox a
  
  End If

これがコツです。

 # コーディングに慣れたらインデントの階層を深くしないように
 # 書くこともできるでしょう

同様に、With ~ End With、For ~ Next、Do ~ Loop など構文ごと
のまとまりでインデントをつけると見易いのですが、ここで挙げて
いっても切りがありません。


> 自動で処理してもらえるのもいいのですが、

回答者としての意図は、これらのツールを使って、インデント前と
インデント後のコードを見比べてみたら? そうすれば、雰囲気は
掴めますよ...というものなのだけど。
インデントについてこれと言った決まりはありません。つまるところ
「好み」の話ですね。
そこで、#2 で紹介した Smart Indenter は標準設定でも非常に多くの
人が好むコードスタイルに整形してくれるため、お手本として良いの
です。

この回答への補足

回答再度ありがとうございます。
コツ、大変すばらしいです。ぜひやります。めちゃくちゃうれしいです。
インデントに決まりはないとは知りませんでした。そうなんですね。
教えていただいたようにさっそく実行していきます。

補足日時:2007/10/13 22:48
    • good
    • 0

こんにちは。



#4 の回答者です。

もし、VBAの書き方の作法自体を求めるなら、もう少し違ったところにあるということは確かなところなのです。しかし、それを教えようにも教えられないのです。

>IF文を沢山いくつか作ったりしていると、途中で自分でも見づらくなり、もう適当にインデントをつけたりしちゃいます。

これは、コードを整形など書法スタイル以前の問題なんですが、それは、どうすればよいのかは、自分で学ぶしかないのです。

インデントなどコード整形は、なぜ、そうするかというと「保守性」と「可読性」という問題であって、他人ではなく、自分自身できちんとコードが読めることが大事だと思います。単なる格好付けではないということです。

他にも、
・1つのプロシージャの行数をせいぜい100行程度までに納める。
・Option Explicit は、いつも入れておく。
・長すぎる行は避ける。(= 引数ごとに、「_ (アンダーバー)改行を入れる)
・コメントは不必要に入れない。必要な部分だけを入れる。
・If の分岐を多くしない。CASE に換える。
・If, With などは、ネストを深く掘り下げない。
 など。

というのは、一応、書法ルールにはあるのですが、(VB系にはVB系の書き方、CなどにはCの書き方はあるのは事実。しかし、)それは厳密なものではありません。他人の人のコードの中には、おかしなものがあるものの、内容が間違っていないならば、それは、それで良いとしていかなくてはならないと思います。ただ、私個人は、なるべく標準的な書法には近づけたいと思うのは、掲示板の公共性ゆえの理由からです。どちらかというと、Microsoft が公開しているコードを参考にしています。

この回答への補足

再度、回答ありがとうございます。
まだ初心者なので作っている段階でこんがらがってしまうのです。英語は苦手なタイプで、すべてアルファベットのためどうしてもそうなってしまいます。勉強中のところです。
CASE文をしっかり勉強しないといけないのですね。頑張ってテキストを何度も読み返して自分で応用して作ってみたりしてマスターしていこうと思います。

補足日時:2007/10/13 22:57
    • good
    • 0

>手動でやる際にどうやるのかも教えていただけないでしょうか。



ループやIF、Withなど、まとまりとして管理(見る)部分はコーティングしながらTABで字下げするような癖を付けるしか無いでしょう。

>たとえば、IF文を沢山いくつか作ったりしていると、途中で自分でも見づらくなり、もう適当にインデントをつけたりしちゃいます。

最初から字下げに注意していれば見にくくなる事は無いと思います。
見にくいというのは別な要因(条件設定が煩雑等)の理由もあるので、余分な条件(無駄)が無いかチェックする必要も有るでしょう。

また、動作を理解してプログラミングをしていればそのように複雑にネストするような事は少なくなるはずです。
内容によってはCASE文でも可能ですから、IF文よりも簡潔に出来ます。


複数行選択(反転)してから、[TAB],[Sheft]+[TAB] で字下げ(上げ)する事も可能です。

この回答への補足

CASE文はパソコン教室で習いましたが、難しいのです。困ったことです。
大変参考になります。ありがとうございます。
CASE文を覚えていかないといけませんよね。頑張ります。

補足日時:2007/10/13 22:54
    • good
    • 0

インデントは、「処理」のまとまりを視覚的に区別しようというものと思います。

しかし「処理」というのが曲者で、あいまいな言葉です。
代表的なのは、
ネストできるものでレヴェルを視覚的に判りやすくする
IF THEN ENFID
With ~ End With
For ~ Next
Do ~ Loop
など、初めと終わりがペアになっているもので初めと終わりを
際立たせるとか
などでしょう。
あと、同類の処理の部分、初期背鄭の部分、変数定義の部分、後じまい・最終処理の部分などに、インデントをそろえるという意味で
使っても良いかもしれない。このあたりは、スペース行や、コメント
でやっている方も多いと思うが。
やり方は先頭に適当数のTABを入れるということしかないと思う。

この回答への補足

回答ありがとうございます。
まだ、初心者なもので困っていました。
大変参考になります。
際立たせるというのはいいですね。さっそく実行します。

補足日時:2007/10/13 22:52
    • good
    • 0

こんばんは。



Office 2000用と書いてありますが、少なくとも、Office 2003までは使用できる、コード整形用ツールのCOMアドインです。

作者は、渡辺ひかるさんです。

VbePlus
http://www.vector.co.jp/soft/win95/prog/se176543 …

この回答への補足

回答ありがとうございます。

補足日時:2007/10/13 22:47
    • good
    • 0

英語版ですが自動インデントツールがあるようですね。



http://puremis.net/excel/blog/?p=447

Smart Indenter v3.5
右クリックメニューに追加されます。
http://www.oaltd.co.uk/Indenter/Default.htm

級・上級(VBAでの操作・オプション関係)
http://www.geocities.co.jp/Technopolis/2082/Soft …

この回答への補足

わざわざ探してくださりありがとうございます。
じっくり見てみます。
自動で処理してもらえるのもいいのですが、
自分で考えつつやりたいと思っていました。
手動でやる際にどうやるのかも教えていただけないでしょうか。
たとえば、IF文を沢山いくつか作ったりしていると、途中で自分でも見づらくなり、もう適当にインデントをつけたりしちゃいます。
せっかく回答いただいたのに、すみませんが、手動でする際にどうすればいいのか教えていただきたいです。

補足日時:2007/10/11 01:17
    • good
    • 0

VBE のアドインです。

右クリックメニューからの簡単操作でコードを整形
してくれます。

[Smart Indenter v3.5] Freeware
http://www.oaltd.co.uk/Indenter/Default.htm

日本語表示はできませんが、ほとんど問題にならないでしょう。

コードを書いた後の整形に、掲示板に掲載されたインデントされていない
コードを解析する時に、とても助かります。オススメツールです。
    • good
    • 0

VBE画面ではTabキーでインデントがつけられますよ


ただしこのサイトにアップするときはTabを全角空白に置き換えないと表示がずれますけど

If A = B Then
  Range("A1").Value = B
End If
    • good
    • 0

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