エクセル雑感
エクセル関連ツイートNo3

ExcelマクロVBAとエクセル関数についての私的雑感
公開日:2013年5月以前 最終更新日:2021-02-02

エクセル関連ツイートNo3


エクセル VBA

無理してクラスを使う必要性はないと思っています。VBAの場合は、完成後にプロではない他人(ユーザー等)にとって易しくわかりやすく書くことが重要だと思います。なので私は極力クラスは使わずに易しいコードで、それでいて速度が速くなるように書くことを心がけています。



宣言しなくて動かいないという事はないのですが、Variantと他の型指定では挙動が変わる場合があるので、結果としてエラーになるということはあります。


極めて単純な例として、
Dim v1
Dim v2
v1 = "123"
v2 = 123
MsgBox
v1 = v2
これを型指定したりしなかったりしてみるとよくわかるかと。"


VBA初心者の方がネットサンプルを使うとき、型指定していないサンプルの場合は注意する必要はあるかと思います。まあ、Variantかどうかで挙動が変わるってことは滅多にありませんが、適当に型指定を追加したりすると挙動が???ではまってしまうことはありえるかと。


人それぞれ興味の先が違いますからね。 中学英語で英会話、ビジネス英会話、ネイティブな英会話 目的が違うので、別々の表現になるのは当然ですね。 プログラミングも同じかな。 TPOに合わせて使い分けられるのがプロってとこでしょうか。 安ければ安いなりに高ければ高いなりに作れないと。


しっかりマスタ作成してID振って、入力シートと出力シートも工夫して作れば、シート関数だけでもかなりの部分を自動化できるはずなんです。 そういう基本をしっかりやった後にVBAに進んだほうが理解も進みやすいので良いと思う。


あまり使われていないけど、 エクセルの数式はAlt+Enterで改行できます。 カンマや括弧のところで切りよく改行しておくと数式が見やすくなります。 なんですけど、 そもそも複雑な数式は別セルで分解して使うようにしましょう。


プログラミング関係を見渡すと、 「言語オタク」と「動けば何でも良い」に大きく分かれる気がする。 炎上案件をこなしてきた身としては、大抵このどっちかに振れた人が書いたものが多かったと思う。 何事もほどほどが良いのです。 ただし趣味は別、趣味なら思いっきり振り切ったほうが気分が良い。


どこかで基礎をしっかりやったかどうかはコードをみれば… 改修案件で一番困るのが、コードのレベルがバラバラなときです。 感心する書き方してると思えば、何だこりゃってのがあったりすると、改修に余分な神経使い手間がかかってしまいます。


たまに見かけるけど、ループ内でのDimはさすがに違和感がある。 http://VB.NET?なら私もそういう使い方をしたりしますが。 さすがにVBAでは止めたほうが良いのでは、変数のスコープを勘違いしているようにも見えるし。 最近は気にしない人が増えているのかなー、どうなんだろう。


そもそもリーダブルコードとか軽く言う人が多くなっている気がするが、それはその道のプロ同士とかある程度同じレベルの人の間の話でしかないですよね。 小学生向けに書いた文章と高校生向けに書いた文章とビジネスマン向けに書いた文章を、同列に語ることなどできないと思うのですけどね。


やはり色々な見解がありますね。 ループ内の変数宣言というのは一つの例であって、 ブロック構文内での変数宣言についてどうなのかって事なんですが。 他言語での変数のスコープを狭くというのが、VBAで言葉のままに理解されている事があるようにも感じます。 VBAはふるーい仕様の言語なんですよ。


正しく動けば良いというのなら、
Dim a a = 2
If a = 1 Then
Dim b b = 1
Else b = 2
End If
MsgBox b
これでも良いことになりますよね。



今まではVBAを始めた人が自由に書けるようになる事を目的に掲載してきました。 従ってサイト内で解説している範囲を逸脱しないようにVBAを書いてきましたが、 さすがに、ネタ切れになってきました。 ということで、クラスを使ったサンプルの掲載に進みます。


プログラム修正を依頼されてコードを読むとき一番助かるのは適切なコメントです。 実際問題コードの書き方云々は見ればわかるので大した問題は感じないです。


VBAのDateDiff関数って直接的な年齢計算してはくれないので使い道は微妙。 昔一気に作ったVBA関数ページの説明が適当だった、単純に読むとほぼ間違って読める。 アクセスはまずないとは思うのですが、たまたま自分で目にしたので修正しておきました。


プロシージャー分割は、あくまで「適切に」ということで、 正直、何が適切か上手く説明できる人はなかなかいないのではないかと。 少なくとも人それぞれの習熟度というものにそった「適切」というものが無ければ意味がないので、皆がプロを目指すわけではないしむしろ少数なので。


VBAのクラスが書かれているのをいくつかみると、 やたらと(時には全部の)変数を公開してたり… せっかくなので、もうちょっとちゃんと書いたほうがと思う事はあります。 ただし勉強がてら書いている場合もあるので何とも。 私も勉強がてら書いたものは後で見て何だこりゃってのは良くあります。


プログラミングに対する考え方・優先すべき事は立場で全く変わるでしょう
初中級者:良いサンプルを参考にしてください。
職業プログラマ:納期厳守!!!
その他はお好きにどうぞ、、、


遅延バインディングもいとわず、とにかくコードをすっきりと書きたいという気持ちはわかります、見た目がすっきりしますし。 規模が大きくなった時にバグに気を付けるのと、インテリセンスが使えないのがちょっと辛いといった所でしょうか。 継承が使えないので、それ相応に書くしかないですよね。


VBA改修で壮絶悶絶中!!! 他人のコードを読むときは、コメントが一番助かります。 リーダブルどうのを考えるのは、その先の話です。 まあ、合計で数百行程度なら何でも良いですけど。


エクセルの複雑な数式(関数が5段以上ネストされている等)を、 簡単に分かり易く具体的な形で可視化してくれるソフトありませんでしょうか、、、 知っている人がいたら、もしくは、誰か作ってください。


そもそも数式解析する手法をどうするか 手動でやる時は ・括弧()の対の位置把握 ・とりあえず、分かり易い単位に分割 ・ネストがない最小の関数の抜き出し ・INDIRECTは&等の結果の書き出し ・名前定義の数式の確認 ・最小単位の関数から順に値を確認 … これらを適宜やるのでこれを自動化は厳しいか…


私が途方にくれた数式は、 数式文字数968、括弧()52対 使用関数:IF,IFERROR,COUNTIF,VLOOKUP,MATCH,SUBSTITUTE… で名前定義がところどころにある。 これを自動解析しようかと、しばし考えてあきらめたという、、、 まあ、解析しても表示方法をどうするんだって気もしますが。

VBAで複雑な数式の解析 昨夜ふと思いつき →VBAの作成開始 →http://VB.NET?のご用をちょっとだけ →VBAに戻って数式解析の続き なんとか完成した。

以前考えたときは難しいと思っていたが、 数式をなーんとなーく眺めていたら… 何のことはなかったんです。 頭の中でやっていたことを、 整理して、単純化して、 それをそのままVBAにすれば良かったんです。

文字列解析はどこにでもあるようなものと似たようなものになっているでしょうけど、 エクセルの数式解析に限定してしまえば単純で良いのだと。 後は愚直にVBAにするだけでした。 難しいテクニックも難しいアルゴリズム不要でした。 実務で使うには十分、便利に使えます。


ルービックキューブを初めて見た時どこに興味を示すか ・どこに売ってる ・やり方教えて ・攻略本は ・解法は ・構造は 人それぞれだろうが、その人の本質が見える気がする。 私は縦横に回転するその構造に興味を持ちました。

ルービックキューブが流行ってしばらくした頃、 数学の先生が、 行列式でその解法を説明してくれたことがあります。 確か任意の2つを取り換える方法だったような… 行列式をいっぱい書いて… 私はついていくのが精いっぱい、というか半分わからなかったような…

その後、学友2人が 「もう揃え方忘れちゃったよ」 「俺は今でもできる」 「え、良く覚えてるな」 「だって自分で解き方考えたから」 攻略本の類でやっただけだと直ぐに忘れてしまうということか。 恐らくアプローチがどうあれ、 その人の血肉となるには一定の修練は必要なのだろう。

ふと思い立ち、 ルービックキューブの解法をエクセルで作れないかと。 6面の色状態を入れたら、揃えるまでの手順を示すとか。 ・・・ どう考えても私には無理だなーと…即諦めました。 自分の才能のなさというか頭の足りなさに… まあ、人それぞれですよね。


レビューを読んで気になる本の目次が見れなくて仕方なく購入。 本の良し悪しは読む人次第なのでどうでも良いですが。 クラスの説明はあっても隠蔽には触れていないし、構造体の説明は全くない。 なるほどこうい本を読んで… 30分程度ペラペラしただけだ…目次と索引だけ見れればよかったんですけど。



VBAで円周率を計算したら小数以下14桁までしかできない件 3.14159265358979


エクセルを使ったことのない人の指導で
「エクセルは表計算ソフトで…」
「表計算て何ですか?」
「セルに数字を入れて…」
「セルってその白い箱の事ですか?」
「こうすれば足し算ができます」
「えー計算してくれるんですか!」
というようなやり取りをしたことは決して忘れません。


個別の調理方法や調理技術とは別にレシピが必要なように、 VBAの解説でも書かれているようにやれば良いというのも必要ですね。 中には料理を宅配してほしいという要望も多いでしょうし。 でも調理を楽しみたいって人もいるわけで、なかなか全部は無理は難しい。


日課的にチェックしているサイトをseleniumで自動データ取得してたことがありますが、 サイトの変更等で取得できなくなったりした時にselenium変更が面倒で止めちゃいました。 そもそも気が向いたときに見れば良いのはどうでも良いし、重要な所はしっかり見るので操作時間は問題じゃないし…


ExcelのオブジェクトはVBAで書いているわけではないので、 VBAでクラスをどうやって使うかどうやって作るかという話とは全く別問題、説明になってない。 と言いたくなるような、、、

VBAは、Microsoft Officeシリーズに搭載されているプログラミング言語です。 OfficeそのものはVBAでは作れないですよね。 現在のOfficeが何の言語で作ったか正式に発表されているのかも知りませんが、 まあ、CとかC++とかそのあたりじゃないでしょうか。


テーブルって使っている人多いんですよね。 あくまで個人的(個人使用)な話ですが、テーブルは使わないですね。 勝手に何かされるの好きじゃないので、 勝手に何かするのは好きですけど。


絶対値にしたいときの関数… ふっと出てこなくなる… えーと、なんか車のブレーキみたいな… アンチロックブレーキシステムだ ABS


条件付き書式、入力規則、名前定義 これらの数式入力中に思わすず矢印キーで、あれれ 良くありますよね。 セルへの数式入力と同じでF2押してから矢印キーです。 ステータスバーの一番左が「編集」なら矢印キーで数式内を移動できます。


変数名考えるとき一番頼るのがGoogle翻訳です。 あまり聞いたことない単語が出たときは、日本語を変えて再翻訳するとか。 結構この時間がかかるのですけど、まあ楽しかったり為になったり。 でも急いでいるときは、翻訳サポートしてくれる開発環境とかないものだろうかと思ってしまうことも。

あーでも日本語の変数使うのは問題ないですよ。 日本語の変数の良しあしはローカルルールでしかないので、それぞれの組織で判断すれば良いだけです。 ましてやタイピングが…なんてのは、その人の問題ですから。


たまには(結構ときどき)こういう叫びをすることはあります。 保存しないで閉じてたらしい。 その後しばらくやってから、さっき書いたはずのコードがどこにもない、、、 はー、ようやく終わったと思ったのに(´;ω;`)


ROUNDDOWNを桁数マイナス指定して使うのって、 税金の計算くらいでしか使ったことないかもしれない。


VBEのウインドウがちっこくなるのやめてほしい、、、 どこ行ったって探してしまう。 マルチ画面にすると出る現象なんですかね。


超簡単ですよ、VBAくらいならプログラミング未経験者でも覚えられます。 超頑張れば、何か月かで覚えられます、、、たぶん。 ExcelマクロVBA入門|エクセルの神髄


プログラミングを全くやったことなければ、 まずは直ぐに試せる、 Excelのマクロの記録 Googleスプレッドシートのマクロ このあたりをやってみるのは良いと思う。 実行してみた感じや書かれているコードを見て、 これならなんとかなるかなーと、 そういう漠然とした感覚というのも大切です。




同じテーマ「エクセル雑感」の記事

エクセル関連ツイート
エクセル関連ツイートNo2
エクセル関連ツイートNo3
エクセル関連ツイートNo4
エクセル関連ツイートNo5
エクセル関連ツイートNo6
エクセル関連で「いいね」の多かったツイート
保護されたブックの非表示シートについて
VBAコーディング規則に関する連ツイ
将棋とプログラミングについて~そこには型がある~
変数を考えることはロジックを考える事


新着記事NEW ・・・新着記事一覧を見る

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ