ゆるおたノート

Tomorrow is another day.

【Excel VBA】テーブル変換とスタイル変更 - 処理の流れを整理してみる

前回の記事で、「テーブルを好きなデザイン(スタイル)で使いたい」
というお話をしました。
yuru-wota.hateblo.jp

色々アイディアは浮かぶのですが、実際これを採り入れるとしたら
どこに何を足したら良いだろう…?と毎回悩みます。

そこで、前回1度書き直したコードは一旦忘れて、
処理の流れを整理しつつゼロから書いてみようかと思います。

考えながら書いているので、たぶん「コーディングの効率化」からは
離れることもあると思いますが、悪しからず気長にお付き合いください。

前回のまとめ

やりたいこと

  1. 選択範囲をテーブル化
  2. しましまの無い、罫線・見出しだけのテーブルスタイルを作る
  3. ブックの既定のスタイルに登録する
  4. (もし出来れば)後々色は自由に選べるようにしたい

推察・入れたら良さそう

  • テーブルスタイル関連のオブジェクト
    • TableStyleオブジェクト
    • TableStyleElementオブジェクト / TableStyleElementsコレクション
  • 指定範囲にテーブルがあると「実行時エラー」が発生するので、
    エラーが出てからOn Errorで「テーブルの解除」に進んだ方が良いかも。
  • ListObject.Addメソッドの戻り値で既定の名前も選択可。
  • 保存先をダイアログで指定
  • クラスで共通処理を分離
  • ユーザーフォームで操作簡略化(カラーパレットもここで?)

フロー図

これを踏まえて、改めて流れを書き出してみました。
ほぼ前回のコードの再現かな。

なお、ユーザーフォームの件は、一通り完成してから
考えようと思います。まずはパンクしないように、ということで。
したがって、これはもしかしたら実装まで行かないかもしれません。
もし期待されている方がいらっしゃったらごめんなさい。

それでは、今回のフロー図です。
赤い矢印はNoまたはエラーを表します。

※画像1枚で上げたら「はてなブログ」の仕様で文字がぼやけてしまうようなので
今回も少し分割して掲載します。ガタガタですが何卒ご了承ください…!

Flow01 Flow02 Flow03 Flow04

メモ

今回も調べながら知ったことですが、テーブルスタイルは
空文字""を代入することで「まっさら状態」を指定できるようです。

officetanaka.net

好みにもよるかと思いますが、今回はテーブルを解除する時に
この処理を足してみようと思います。

Private Sub convertTablesIntoRange(ByRef targetSheet As Worksheet)

        Dim list As ListObject
        For Each list In targetSheet.ListObjects
            with list
                .TableStyle = "" 'お好みで削除ok
                .Unlist
            End with
        Next list

End Sub

疑問

テーブルの範囲の判定

「シート上でテーブルがあるか」を判定しているけど、例えば
同じシートでも離れた範囲にある場合にそれを除外できるのかな?

式が壊れたりするのが怖いので、出来るだけUnlistは実行しない
方向に持っていきたいのです…

そもそもエラー処理は合ってる…?

「シート上にテーブル無し」かつ「フィルタも無し」の場合は
「予期せぬエラー」ということにしてしまって良いのかどうか?

というかフローの書き方が間違っている気がするので、
一応文章でも説明してみます。

▼本当の脳内イメージ


  1. テーブルに変換
  2. (エラー)
  3. テーブルがあれば解除
  4. 再度テーブル変換を試す ←抜けてた
  5. (エラーになったら)選択範囲と一部被るようなフィルタがあれば解除 ←分岐が変
  6. もう1度テーブル変換を試す ←抜けてた
  7. (それでもエラーなら)予期せぬエラー*1???

1回1回テーブル化を試行するのも無駄かなぁ。

感想

くろうと のすなる ふろう図 といふものを
しろうと もしてみむとて するなり」

な感じで勢いで書いてみたのですが、思ってたより難しいですねぇ。
記号のコピペも結構めんどくさい*2し、思い通りに矢印を引けない…
もやもや。

でも流れの理解に不足があると、↑のようにイメージと図*3が違う
なんていうことも分かりますね。

まるで学生時代に楽器を練習していた時のような…
「口で歌えないなら楽器ではもっと演奏できないよ」と教わるのです。

そういうわけで、書き方にヘンなところがあったら
ご指摘いただけると嬉しいです。勉強していきたいので…!

次回からはコードを書いていきます。
ちょっとずつ進むと思いますが、長い目でお付き合いいただければ
幸いです。それでは!

このシリーズについて

テーブルの変換とテーブルスタイルの新規作成をマクロ1発で
使えるように考えています。主に自分向け。

もし間違いやヘンなところ等ありましたら、コメント欄やTwitter
ご指摘いただけたら嬉しいです。

次回

yuru-wota.hateblo.jp

連載目次

  1. 【Excel VBA】一発でテーブルの変換とスタイル変更をしたい - ゆるオタクのすすめ
  2. (本記事)【Excel VBA】テーブル変換とスタイル変更 - 処理の流れを整理してみる - ゆるオタクのすすめ
  3. 【Excel VBA】テーブル変換とスタイル変更 - テーブル変換するところまで標準モジュールで書いてみる - ゆるオタクのすすめ
  4. 【Excel VBA】テーブル変換とスタイル変更 - 標準モジュールでスタイルを新規作成する - ゆるオタクのすすめ
  5. https://yuru-wota.hateblo.jp/entry/VBA/overwrite-save-or-new

注釈

*1:本当は「予期せぬエラー」という言葉はあまり好きではないのです。
「手の施しようが無い」と言われているように感じるというか、必要以上に不安感を煽られるような気がして…
かと言って他に適切な言葉も分からないという。

*2: これも何か準備する余地がありそうですね。さすがに今回はやめましたけど!

*3: なんか「画像はイメージです」みたいな日本語。笑