- hoehoe1234
- 2529
- 11
- 0
- 0
セルの参照式 パス[ブック]シート!セル を解析結合するVBA関数を作ったことある人いるかな? テストケースがこれで足りてるのかどうか・・・。 twitter.com/KotorinChunChu… pic.twitter.com/4MgPpoS4oy
2019-10-03 17:55:18Function SplitFormulaPathBookSheetCell( formula ) この、ネーミングセンスよ・・・。 一体この関数は何をするものでしょう? #VBA #Excel
2019-10-03 16:44:54VBAで多値の返し方は主にどの方式を採用してますか?ワイは配列を多用してます。 また、ほかに良い方法があればコメントでお願いします。
2020-02-14 15:23:40@hoehoe1234 選択が難しい質問(^^; ケースバイケースでユーザー定義とクラスを使い分けています。配列を使うケースもありますが限定的です。
2020-02-14 18:19:53@hoehoe1234 .NETの影響で`Try~`で返り値Bool&引数返しはよくやります。 ごく簡単な物であれば、Scripting.Dictionaryで返す場合もあります。
2020-02-14 18:34:11@hoehoe1234 以前Variant型配列を薄くラップしたTupleっぽいものを作ろうとしたことがありますが、作りかけで放置されています… github.com/imihito/vba_tu… Tuple.Create(a,b)でインスタンス tpl.Assgin(変数)で分解までは作ってありますが Equalsを実装しようとして止まっている感じですね…
2020-02-14 18:40:19文字列で返してから呼び出し側でデリミタで区切る、てのをむかーし書いたコードに見つけました。3日くらい前の話です。 ちょっと恥ずかしくなっちゃったよねっ!笑 twitter.com/hoehoe1234/sta…
2020-02-14 20:17:39@hoehoe1234 以前、同様のアンケートを出して、こうなりました。 twitter.com/KotorinChunChu… 選択肢が足りないのがツライトコ
2020-02-14 20:34:59@hoehoe1234 Array:要素毎の意味が分からないのでEnumが欲しくなるり結局遠くなる。又、仕様変更に弱い String:Arrayと同様 型に制限 ByRef:呼び出し元に変数多発 Type:宣言が遠いので気持ち悪い Class:モジュール多発。つらたん Dictionary:良い感じだがキーがリテラルに。ドキュメント大事(まあ他もそうだけど)
2020-02-14 20:47:35VBAなら、配列またはdictionaryかと思ったけど、functionは1つの戻り値にしてforで回してるケースもあるなーと twitter.com/hoehoe1234/sta…
2020-02-14 20:54:26@KotorinChunChun @hoehoe1234 完全に同意です。
2020-02-14 20:54:59@excelvba_diary @hoehoe1234 恐縮です。 どれもデメリットがあって、選びきれないんですよね。 ・仕様変更はありうるのか? ・要素数は? ・関数の利用頻度・理解度は? ・どんな使われ方が想定される? とかで、なんとな~く使い分けですね。 私はByRefが多め、必要ならClass。 でも書いててDictionaryが無難な気がしてきました
2020-02-14 21:10:16@KotorinChunChun @hoehoe1234 そうですね。 配列はインデックスに意味を持たせることになって不安になります。そこでEnumを使うのですが、これまた使い勝手がよくない。Typeに至ってはスコープに不満。行き着く先がクラス。これも1モジュール1クラスの骨折れ仕様。 どれも我慢比べです。
2020-02-14 21:19:24@hoehoe1234 そういえばDictionaryの延長でADODB.Recordも手ではあるのですかね。 型を明示できるのがDictionaryに比べたメリット。
2020-02-14 22:43:38@nukie_53 それがあるんですよね。少々重量級すぎる感じがしますが。このあたりは調べてないので時間あるときに調査せなあかんとおもってますw。
2020-02-14 23:57:24@KotorinChunChun >洗練されるにつれて、頻度が減る 私もそう思います。 逆に言うと、VBAの初心者さんであれば、イミディエイトウィンドウを使うべき機会も多いのかもしれませんね。
2020-02-14 23:58:02@Umaremin こんにちは。コレクションもいいですよね。ワイ的には予想よりディクショナリがおおいイメージです。どちらにしろこの変の見解とメリット/デメリットはまとめようかとおもっています。
2020-02-14 23:58:45@excelvba_diary @KotorinChunChun まさにw。Enumが「その場」にかければ(いわば、関数の一部的にかければ)いいのですが各場所が決まっているのがいたいですよね。Typeはあまりに制限がおおいし、クラスは1クラス1モジュールの呪いがw。その中でも論理的にグルーピングできますので記事にしてみます。
2020-02-15 00:00:06@KotorinChunChun @excelvba_diary このあたりはワイもいろいろ考えてることがあって記事に書こうかと。参照型引数は関数を変更すると関数のシグネチャが変わるのが困るんですよね。既存のソースを変更せずに関数インタフェースを進化させることができなくなります。(ただoptionalという逃げ道がありますが)。
2020-02-15 00:01:33@KotorinChunChun 私は、Dictionaryは、打ち間違えリスクが高くて怖いので、真っ先に候補から外しますね・・。 ただ、Dictionaryのほうが扱いやすい場面もあるので、ケースバイケース(+好み)なんでしょうね。
2020-02-15 00:03:40@KotorinChunChun これ、まとめるとおもいろいんですよね。配列とディクショナリは根本的には同じですよね。Enumとするかリテラルとするかは検討の次元とスコープが同じなので。ADOの識別子ベース(Pythonでいう名前付きタプル)がベストですがその変もあwせて調査したいと思います。
2020-02-15 00:05:17@hoehoe1234 @excelvba_diary もう一つEnumの不便なところがあります。 配列の要素には、インテリセンスの絞り込みが発動しません。 従って、戻り値の配列をEnumで振り分けをすれば良い事は分かってても、Enumを宣言した時の名前が分からなくて、右往左往します。するときが、よくあります。 命名規則を決めれば良い話ですが...
2020-02-15 00:08:11@nukie_53 こんばんは。ワイもちょっとまえにバリアントの8バイトを利用して整数のタプルを作ったりしてましたが結局、「なんにつかうのか?」みたいな自問自答で配列返しになりました。でもこういう検討(設計)ができるのもVBAならではたのしですよね。
2020-02-15 00:09:53@hoehoe1234 結局は配列で返すのがコスパ良いですよねー。 Class作ってコレクションに格納して返却するとかも良いのかも?とふと思いました!
2020-02-15 00:12:25