- ベストアンサー
エクセルVBAの作成方法
エクセルVBAの作成方法 文法を使ってVBAとしてプログラムで表現するものと 下記のように.を使用して()でくくっても実行結果は同じですが 後者の表し方をなんというのでしょうか? また後者の方がタイトな感じで組めるので基礎を把握したいのですが 何か良いサイトなのありますでしょうか? 例)l_lngMargeCount = l_rngA.MergeArea.Cells.Count If (l_rngA.MergeArea.Cells.Count > 1) Then・・・
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
例示の意味がちょっと判りにくいです。 例えば Sub test1() Dim l_rngA As Range Dim l_lngMargeCount As Long Set l_rngA = Range("A65535").End(xlUp) l_lngMargeCount = l_rngA.MergeArea.Cells.Count If l_lngMargeCount > 1 Then ': End If MsgBox l_lngMargeCount > 1 ': Set l_rngA = Nothing End Sub Sub test2() Dim l_rngA As Range Set l_rngA = Range("A65535").End(xlUp) If l_rngA.MergeArea.Cells.Count > 1 Then ': End If MsgBox l_rngA.MergeArea.Cells.Count > 1 ': Set l_rngA = Nothing End Sub このtest1とtest2の違いの事ですか? 『文法を使ってVBAとしてプログラムで表現するもの』とは、 『l_lngMargeCount』という【変数】に 『l_rngA.MergeArea.Cells.Count』の結果を格納して 以降の処理をするもの、という意味でしょうか。(test1) それに対して 『.を使用して』変数を介さず『タイトな感じで組める』感じのものが test2という印象でしょうか。 >後者の表し方をなんというのでしょうか? 特に呼称はないと思います。 『l_rngA』はセル範囲を格納するRange型変数で、 l_rngA.MergeArea.Cells.Count これはそのRange型変数に格納したセルの、結合セルの個数を表します。 コードの内容によって、 『l_rngA.MergeArea.Cells.Count』を何回も取得するような処理内容なら、 毎回、l_rngAのMergeAreaのCellsのCount..という風に上のほうから呼び出すよりも l_lngMargeCount = l_rngA.MergeArea.Cells.Count 『l_lngMargeCount』という変数に格納(記憶)させておいて、 それを使い回すほうが効率的です。 逆に1回しか使わないなら変数を使うまでもない、という考え方もあります。 コーディングスタイルは人それぞれですし、 ケースバイケースの対応でよろしいかと思います。 >..基礎を把握したいのですが何か良いサイトなのありますでしょうか? 参考サイトを挙げておきます。 http://excelvba.pc-users.net/ http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/index.html http://www.asahi-net.or.jp/~ef2o-inue/top01.html では。
その他の回答 (3)
- Wendy02
- ベストアンサー率57% (3570/6232)
#1の回答者です。 >またけしてWendy02さんの技術を否定してる訳ではありませんよ(笑 いえいえ、疑ったほうがよいのですよ。そのために、開いている他の二つの質問に回答を書いたのです。 今回の質問は、かなり微妙なもので、経験がものを言うだけで、その資格などの裏打ちなどありません。プログラマの専門家と言いながら、VBAは知らなかったりして、VBAのコードを書かせれば、そんな人が言っている内容はあやふやなのは、見る人が見ればバレてしまいます。まともに、コードが通るだけではダメなのです。 この人は、まともなコードが書けるのかなっていう所からあたっていかないと、やっぱり振り回されてしまいます。その人が、どの程度の実力で、なぜ、そういうことを言っているのか、それは、ここの掲示板では特に注意が必要だと思います。ベストアンサー率なんていうのも、素人受けしているかどうかですから、ほとんどアテにはなりません。 有名なサイトでも、内容を更新していない、なかなか書き換えるのは難しいにしても、人に自分の技術的なものを見せるためのコードを書いていると、だんだん、自分のコードがおかしくなってしまうのではないか、と思います。 また、抽象的ですが、人に使ってもらうための作った人の心遣いが、VBAで表現できるということが大事なんだろうと思うのです。 例えば、10/08/05 は、2010/08/05 と正しく認識させるためにはどうするか、そういうことを考えなくてはならないと言うと、ここの掲示板の回答者の中では、食ってかかって必要ないと攻撃するような人間がいます。そういう調子では、永遠に上達は望めないと思ったほうがよいです。
お礼
返信ありがとうございます。 また未解決部分のご回答ありがとうございます。 時間がある時に解析し確認したいと思います。
- imogasi
- ベストアンサー率27% (4737/17069)
私の反省でもあるのですが、IF文は、素人的には、X>1 を判別されて、その条件に合えば何々をすると言うコードだと昔は思っていました。しかし本当は別途 X>1の真偽は別に判定されて結果が出る。その結果がTRUEかFALSEであるかを聞くのがIF文である、というのが正しいようです。似たようなことは、昔々私の使っていたコンピュタ機種では、コンピュタのマシン語レベルでは、比較の指令の実行をさせて、真か偽のビットがフラグレジスタなどにたつ。そのビットを判定したように思います。 しかし高級言語では、こう考えるメリットは余りないように思います。 ーー Ifの次からThenの前までを()でくくるというのは上記を連想させまましたが、その理由ではなくて、()でくくるというのは()内が複雑だったり長い場合に注意喚起的にまとまりを示し、見やすくしているのではないでしょうか。 ーーー >基礎を把握したいのですが http://home.att.ne.jp/zeta/gen/excel/c04p20.htm 優先順位のカッコもあります。 中ほどの>論理演算子を複数使った条件判定には必ずカッコを使用してください。開発者の意図しなかった誤動作を防ぐことができます ーー 私見 言語によっては条件判定部分を()でくくるものも在る。C言語とか。 この影響というのは考えすぎかな。 ーー 調べても()で囲む理由はWEBなどでも見つからないのでは。
お礼
返信ありがとうございます。 まとまりがあり、判りやすいと思った書き方は VBAではあまり適切ではなかったということなんですね。。 初心者の私にとっては判りやすいと感じました(笑 ご丁寧にありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
不要なら入れない、必要なら入れる。VBAの場合は、基本的に、() でくくっても同じなら、入れないというのが原則です。 それと、可読性を良く口にする人がいますが、VBAプログラマ(プロの場合)は、素人に分かりやすくとか、そんな親切なことは考えず、無駄な部分を省くことが多いです。最悪は、2バイト変数とごちゃごちゃと書いたコメントです。 >後者の方がタイトな感じで組めるので基礎を把握したいのですが 私の技術的なレベルを疑うなら、それでもよいのですが、そのような恣意的な書き方を肯定的に認めて、基礎を固めるようなものはないと思います。一応、私の技術の証明のために、ご質問者の、まだ開けている質問のひとつを回答しておきます。 VBAにはVBAの暗黙のルールはあります。ただ、公にはなっていません。VB6の書き方をそのまま使うということもありません。ただ、しょせん、素人が扱う言語だから、ルールがあっても、それに従わない人がほとんどだということだけです。そうしたら、面倒な書き方はやめるだけでよいです。 なお、 l_lngMargeCount ハンガリアン記表に似ていますが、ハンガリアン表記でもありません。しかし、必ずしも、ハンガリアン記表が正しいわけではありません。 良いサイトというなら、まず、MSDNをご覧ください。 日本の個人で開いているサイトのどれをとっても、私は満足したことはありません。 失礼かもしれませんが、他のいくつかの質問を見せていただいて、それぞれの回答者に振り回されすぎだと思います。なるべく一定の基準を身につけたほうがよいようです。
お礼
返信ありがとうございます。 よく使用される方をみるので勘違いしていましたが 他意見からもあるようにVBAでは適切な表記ではないようですね。 またけしてWendy02さんの技術を否定してる訳ではありませんよ(笑 仰る通り、基礎を身につけようと思います。
お礼
返信ありがとうございます。 大変判りやすい例えをだして頂いて助かります。 コーディングの内容によって使い分けるべきなんですね。 参考サイトありがとうございます。