怪奇・六角セルEXCEL
- yuji fukami
- 2024年11月30日
- 読了時間: 3分
旧ブログからの人気のあった記事の転載です
こんな投稿をしたので、今回はこの解説。
通常、EXCELのセルは四角形で構成されていますが、このEXCELは六角形で構成されています。
いつもどおり、用途は特にありません。
お題は、このようなEXCELはどう作るか?
ツイッター上では
「図形(オートシェイプ)を使用しているのでは?」
「いや、カーソルも動いているから図形ではない」
「セルを斜め半分に塗りつぶしている?」
など、嬉しくも議論の的になりましたが、正解はこちら。
セル書式設定のなかの「文字方向」を変えて「塗り潰し色」を指定すると斜めに塗りつぶされます。
半分バグみたいなEXCELの機能ですが、六角形状にセルを塗りつぶす事ができます。
あとは、Worksheetのイベントプロシージャのうち、「クリック」のイベントプロシージャで、各六角形をクリックしたら「黒」⇔「白」で塗りつぶすようにマクロを作成するだけ。
以降では、実際に「黒」⇔「白」の塗り潰しの切替をどのようにやっているのかを解説していきます。
◯実装コード
まず、六角形の形をしたセルの中の6つのセルに「1,2,3,4,5,6」の値を入力しておきます。
この入力値によって、クリックした位置を認識させます。

次にコード。
やっていることは、
①変数の準備(6つのセルを格納する)
②クリックしたセルの値「1,2,3,4,5,6 のどれか」より6つのセルを変数に格納
③エラー回避で処理できなかった分を改めて処理
④セルの着色 「黒」⇔「白」
詳細はコード内のコメント参照でお願いします。
分かりにくいだろうなァ、と思うところは次に解説を載せています。

◯コードのよくわからんところかもしれんところ解説
13行目
On Error Resume Next
もし、クリック動作で1行目や1列目をクリックしてしまうと、六角形は一部しか描写されていない部分になってしまいます。
すると、コード16~61行目の6つのセル設定の際に、Offset関数でワークシート外のセルを設定しようとしてエラーが生じてしまう可能性があります。
例えば・・・Range("B1").Offset(-1,0) なんてことしてしまったらエラーが起きますね。
「B1」セルの上にオフセットしたらセルはありませんから。
13行目の「On Error Resume Next」はこれを回避します。
しかし、回避すると、Target1~Target6の変数のうちいずれかで、変数が入力されていない場合が生じます。
すると、76行目のセルの結合でエラーが生じます。
ですので、変数が入力されなかった変数(Nothingになっている)は67~72行目で再設定を行います。
76行目
Set UnionCell = Union(Target1, Target2, Target3, Target4, Target5, Target6)
75行目までで設定した6つのセルを全部1つのセルの固まりで結合します。
このときに使用しているのがUnion関数です。
Union関数はVBA専用の関数です。
次の80~88行目で実際に「黒」⇔「白」のセルの書式設定を行うのですが、Target1~Target6の6つのセルを1つづつ書式設定すると、コードが長ったらしくなりますし、動作が遅くなります。
Union関数でセルを結合しておくと、6つのセルを一気に書式設定できるというわけです。
◯参考投稿
今回紹介した方法以外の方法でも再現が可能なようです。
いろいろな方が参考の投稿をしてくださいましたので、紹介させていただきます。
私も大変勉強になりました☆。
セルのグラデーション機能を用いて1セル状で斜めだけに塗りつぶす方法です。
こちらの方法でもいろんな作品が作れそう(作れた)ので、また紹介と解説を載せておこうかなぁと思います。(気分次第)
Comments