- KotorinChunChun
- 31466
- 28
- 3
- 0
@blacklist_ryu @VBA31125434 @KotorinChunChun それも考えたんですが、組込信者なのでこっちの方が速いんじゃないかなって気がしてて…😅実際どうなんでしょうね? ほんとExcelVBAって手段の選択肢が多いだけに実装の手間や保守性や速度など比較して選ぶ楽しさがあって面白いですね☺
2021-03-26 09:49:57@kyrtnyy @VBA31125434 @KotorinChunChun 確かに量あるとそっちのほうが速そうですね!
2021-03-26 09:53:40ほえほえ先生の研究報告
スティーブプログラミング塾。エクセルとグーグルスプレッドシートを利用したシステム構築および実践的な講義を提案しています。企業のグループ研修と新人研修などに最適です。オンライン集団研修は1時間1万円で請け負っております(MAX15人程度)。
シート内の表が ①単票 ②単票+明細 ③リスト、マトリックス形式 のどれかにより異なるとおもいます。単票形式の部分は名前定義が適していると思います。 twitter.com/excelspeedup/s…
2021-03-26 14:25:32VBAと名前定義の組み合わせを使う人って、あまり多くないんですか? 行・列の挿入・削除に合わせて、参照先セルを自動的に追随させるようなプログラムをVBAを書こうと思うと、名前定義を使うしかないんじゃないかと思うんですが。 他に代替手段はあるんでしょうか?
2021-03-26 12:09:51@hoehoe1234 私の場合、リスト、マトリックス、明細系のデータでも、名前定義を(何らかの形で)使うことが多いんですよ。 ここはテーブルでも、いいんでしょうけれどね。
2021-03-26 14:29:46名前定義の副作用は(あたりまえだけど)、手順ということろ。プログラムで書く場合は名前と範囲のバインディングが必要でこれはリスト、マトリックス形式の場合の基点のみ指定に比べて保守性で劣る。結局表の形式次第という感じかな?
2021-03-26 14:27:17①リスト、マトリックス 基点指定+Enum ②単票形式(部分) 名前定義 たとえば横50項目のリストに名前定義はうまく機能しないように思う。保守の場合の調査が大変。Enumは現実に合わせて作る直すだけなので楽な感じ。
2021-03-26 14:29:03名前もenumもテーブルもすべて「間接参照」の仕組みなので適した所につかえばいいね。テーブルが最強なのは名前空間が自動で生成されるから。名前定義は便利だけど「手順」なので見えにくいし大量定義はしんどいという弱点があるね。しかしテーブルでカバーできていな単票形式は相性がいい。
2021-03-26 14:57:03となると次は名前定義の可視化になるんだけどこれは簡単な関数で実現できる。以前読んだ書籍にも「名前定義は最初のシートにまとめてかいておけ」というのがあったけどそれの自動化だね。これは割と簡単。
2021-03-26 14:58:252つの方法がある。ユーザ定義関数として実装するか、VBA的は実装をするか。前者は関数を=で入れたところに名前定義が転換されて後者は、たとえばselectされたところからVBAで名前を書き込むイメージになる。一般的には前者が便利そうだね。
2021-03-26 14:59:45VBAは論理位置だけで記述するけどどこかで名前定義であるとか始点を物理位置にマッピングしなければいけない。幸いエクセルにはシートモジュールがあるので(異論はあろうがw)構造的には適任だと思う。
2021-03-26 15:05:03このように範囲に名前定義をした場合に操作性が問題になる場合があるように思う。データ全体を取るにはよいが個々の列指定の論理指定ができない。 pic.twitter.com/FAmGF6MOhv
2021-03-26 15:16:40一括して取得するのは問題がない。うまく取れている。しかし、特定の列の特定の値を書き換えるためには左上を基点として番号始点か、match関数で列番号を取得せねばならない。この使用方法では名前定義の良さが失われてしまっている。 pic.twitter.com/tpPUjjAfxm
2021-03-26 15:19:03名前定義をしてEnumを生成するのであればそもそも名前定義は必要だったのか?という疑問が生じる。なぜならば基点とEnumだけで名前定義と同じ範囲が取得できるからだ。ただし、このためには1つ情報が足りない。それは「何行あるか?」だ。
2021-03-26 15:23:06ただし、行の範囲が変わらない読み取り表であれば、シンプルに範囲をしているする名前定義は「手順である」部分を差し引いても相当にわかりやすいのでそちらを使うケースのほうが多いと思う。列位置も固定であれば1スタートの番号で十分だろうし。
2021-03-26 15:28:48使用する要素技術としては次のようなものであろうか? ①テーブル ②基点+Enum+レンジオーバラン ③名前定義(範囲指定) ④Matchによる列番号検索 ⑤最終行レンジ等のヘルパー関数群
2021-03-26 15:32:10ここまで検証?妄想?してみてテーブルが出てきた理由が明確にわかった気がする。テーブルで済むばあいはテーブル一択だね。ただ単票だと「名前定義」をつかう場面はおおいのかも?名前定義は「手順」なのでいろいろ可視化がむずかしいかもね。
2021-03-26 15:52:52name調査前のオブジェクト階層の確認。図、ちょっとまちがえてますね。ブックのnamesとシートのnameはサブセットの関係にあります。ブック、シートの両方から参照できるnameオブジェクトは同一のものということがわかります。また、シートレベルのnameは親がシートになっています。
2021-03-27 04:01:29この構造図をもとに今度は名前定義の挙動を調査していきます。裏にあるモデルからその不思議な挙動を説明できるとよいのですが。とまれ、クラス図、インスタンス図を書くのは解析の基本技法なので習得すると理解が深まります。
2021-03-27 04:04:34