素人がExcelVBAによる「一人働き方改革」に挑むブログスマートフォン用の表示で見る素人がExcelVBAによる「一人働き方改革」に挑むブログExcelVBAネタです。(Word)WordVBA名づけて「ダルマ落とし方式」!前回akashi-keirin.hatenablog.comのマヌケ記事の続き。Eachでループさせる際に、VBAは内部でShapesコレクションに番号を振って、その番号順に処理をしているらしい。Deleteメソッドで削除した場合に、その番号が自動的に繰り上がる仕組みのようだ。普通にExcelで行とか列とかを削除したら、番号が繰り上がるのと同じ。Eachで回しながらDeleteメソッドでコレクションの要素を削除すると歯抜け状態になる。初期状態1ア2ホ3か4ボ5ケ6か7カ8ス9かコレクション番号1を削除1ホ2か3ボ4ケ5か6カ7ス8かコレクション番号2を削除1ホ2ボ3ケ4か5カ6ス7かコレクション番号3を削除1ホ2ボ3か4カ5ス6かコレクション番号4を削除1ホ2ボ3か4ス5かコレクション番号5を削除1ホ2ボ3か4スというわけで、コレクション番号5まで削除したところで最後の要素に達してしまうので、4個残る、ということなのだ。氏が教えてくださった〈全滅するまでひたすら先頭要素を削除方式〉の二通りがある。前者は、通常のExcelで行やら列やらを削除する場合でもおなじみなので、後者の方式を採用。氏がすでにコメント欄に書いてくださっているので、ダルマ落とし風に見えるようにアレンジ。準備まずは、「ダルマ」を準備。ドキュメント上に、こんな風に「ダルマ」を設置。下のシェイプのTopプロパティを170に、それぞれのシェイプのHeightプロパティを25にしている。Functionあ、自作のWindowsAPIクラスを使用しています。詳しいことは、akashi-keirin.hatenablog.comコチラをどうぞ。未確認だが、どうもShapesコレクションのインデックス番号は常に一定というわけでもない?実行するたびに順番が変わっているような気がしたので、getTextAllocatedShapesというメソッドによって、毎回インデックス番号1~7にテキストを設定し直し、下から順に並ぶようにした。少なくとも「行間」の設定は解除されてしまっていた。詳しいことは調べていないので、鵜呑みにしないでください。)ので、Shape.TextFrame.TextRange.ParagraphFormat.LineSpacingプロパティを設定し直すようにしている。これが「ダルマ落とし」だ!実行すると、こうなります。「ダルマ落とし」!!!!!!!!おわりにもちろん、作り込めば、もっとなめらかにアニメーションさせたりすることもできることでしょう。»プロフィールid:akashi_keirinExcelVBAネタです。SyntaxHighlighter.all();注目記事はてなブログをはじめよう!akashi_keirinさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。