ゆるおたノート

Tomorrow is another day.

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

前回の記事で、「テーブルを好きなデザイン(スタイル)で使いたい」というお話をしました。
【Excel VBA】テーブル変換とスタイル変更 ~一発で変換とスタイル変更を済ませたい~ - ゆるおたノート

色々アイディアは浮かぶのですが、実際これを採り入れるとしたらどこに何を足したら良いだろう…?と毎回悩みます。
そこで、前回1度書き直したコードは一旦忘れて、処理の流れを整理しつつゼロから書いてみようかなと思います。

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

前回のまとめ

やりたいこと

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

【推察】入れたら良さそう

  • テーブルスタイル関連のオブジェクト

    • TableStyleオブジェクト
    • TableStyleElementオブジェクト / TableStyleElementsコレクション
  • 指定範囲にテーブルがあると「実行時エラー」が発生する

    • エラーが出てからOn Errorで「テーブルの解除」に進んだ方が良いかも。
  • テーブルの名前

    • ListObject.Addメソッドの戻り値で既定の名前も選択可。
  • コーディング改善

    • クラスで共通処理を分離
  • UI改善

    • 保存先をダイアログで指定
    • ユーザーフォームで操作簡略化(カラーパレットもここで?)

フローチャート

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

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

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

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

フローチャート(その1)
フローチャート(その2)
フローチャート(その3)
フローチャート(その4)

メモ

今回も調べながら知ったことですが、テーブルスタイルは空文字""を代入することで「まっさら状態」を指定できるようです。
Office TANAKA - VBAでテーブルの操作[セル範囲をテーブルにする]

好みにもよるかと思いますが、前回書いたテーブルを解除する処理に、リセットの一環として「テーブルスタイルを解除する処理」も足してみようと思います。

Private Sub convertTablesIntoRange(ByRef targetSheet As Worksheet)
    
    Dim list As ListObject
    For Each list In targetSheet.ListObjects
        with list
            .TableStyle = "" '追加(お好みで削除してください)
            .Unlist
        End with
    Next list
    
End Sub

疑問

テーブルの範囲の判定

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

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

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

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

というかフローの書き方に自信が無いので、一応文章でも説明してみます。

  • 本当の脳内イメージ

    No アクション 備考
    1 テーブルに変換
    2 エラー
    3 テーブルがあれば解除
    4 再度テーブル変換を試す 抜けてた
    5 エラーになったら選択範囲と一部被るようなフィルタがあれば解除 分岐が変?
    6 もう1度テーブル変換を試す 抜けてた
    7 それでもエラーなら予期せぬエラー???
    • 本当は「予期せぬエラー」という言葉はあまり好きではないのです。
      「手の施しようが無い」と言われているように感じるというか、必要以上に不安感を煽られるような気がして…
      かと言って、他に適切な言葉も分からないという。

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

感想

くろうとのすなるふろうちゃあとといふものをしろうともかいてみむとてするなり」な感じで勢いで書いてみました。

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

ただ、処理の流れの理解に不足があると、↑のようにイメージと図*2が違うなんていうことも分かりました。
まるで、学生時代の楽器を練習していた時のような…*3

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

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

このシリーズについて

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

もし間違いやヘンなところ等ありましたら、コメント欄やTwitterお問い合わせフォーム等でご指摘いただけたら嬉しいです。

次回

【Excel VBA】テーブル変換とスタイル変更 ~テーブル変換するところまで標準モジュールで書いてみる~ - ゆるおたノート

連載目次

  1. 【Excel VBA】テーブル変換とスタイル変更 ~一発で変換とスタイル変更を済ませたい~ - ゆるおたノート
  2. 当記事【Excel VBA】テーブル変換とスタイル変更 ~処理の流れを整理してみる~ - ゆるおたノート
  3. 【Excel VBA】テーブル変換とスタイル変更 ~テーブル変換するところまで標準モジュールで書いてみる~ - ゆるおたノート
  4. 【Excel VBA】テーブル変換とスタイル変更 ~標準モジュールでスタイルを新規作成する~ - ゆるおたノート
  5. 【Excel VBA】テーブル変換とスタイル変更 ~ブックの保存先を選ぶ~ - ゆるおたノート

注釈

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

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

*3:「口で歌えないなら楽器ではもっと演奏できないよ」と教わるのです。