Excel2007条件付き書式 互換性解析レポート1

FormatCondition Compatible Check Report On Excel2007

はじめに!
Excel2007で刷新された機能の代表格は「条件付き書式」ではないでしょうか?
すでにご覧になった方はお気づきと思いますが、いろいろなメニューが増えて操作方法も全く別機能と思ってもいいくらいになっています。
このレポートは、新しくなった「条件付き書式」の操作方法を説明するものではなく、当分の間続くと思われるExcel97-2003バージョン(以降、従来バージョンという)との併用環境での問題を最小限にとどめるために(効率的な共存を願いつつ)「互換性」部分を中心に注意事項や対応方法などを解説するものです。

第1部:「従来バージョン→Excel2007バージョン」の互換性
第2部:「Excel2007バージョン→従来バージョン」の互換性
第3部:「Excel2007バージョンでの操作上の注意点」
の3部構成で解説します。

第1部:「従来バージョン→Excel2007バージョン」の互換性

概括的には、従来バージョンで作成したファイルはExcel2007ではほぼ問題なく動作します。
しかし、見た目で異なる点がいくつかあります。メンテナンスする上では、この違いを理解しておくことをお奨めします。
また、「条件付き書式」の設定内容を解析するマクロでは、非互換部分が多いので、その仕組みと違いを理解し、対処する必要があります。

見た目で変わったところ
まず、条件付き書式の設定画面を見よう。
設定画面は、「ルールの管理」「書式ルールの編集」の2段階になっています。
「ルールの管理」画面(図1)は、「現在の選択範囲」「そのワークシート」が選択できます。
「現在の選択範囲」は、文字通り選択されているセル範囲を意味するもので、選択した範囲に設定されている「条件付き書式」の概要をみることができます。
その中で「適用先」「条件を満たす場合は停止」という項目が追加されていることが分かります。
「適用先」は、同じ条件付き書式が設定されている範囲を示しています。
もちろん、「現在の選択範囲」は、「適用先」の内数です。
「条件を満たす場合は停止」がチェックオンになっていると、条件を満たした場合、下に並んでいる「条件付き書式」は評価されません。(従来バージョンは全てこの指定と同じになっています)
なお、「ルール(表示順で適用)」と表示されている通り、上から下への順に評価されます。
「書式ルールの表示」で「このワークシート」を選択した場合は、シートに設定してある条件付き書式が全て表示されます。
(図1)
次に「書式ルールの編集」画面は、個々の条件付き書式の条件(ルール)と書式を設定する画面で、「ルールの種類」により画面のデザインは異なります。
ルールの種類の中から、「指定の値を含むセルだけを書式設定」の画面(図2)で説明します。
ほぼ、従来バージョンの設定画面と同じレイアウトになっていますが、横に3つ並んでいる条件の設定枠の右端の枠の中の表示方法が異なっています。
ここに「100」「東京都」のようにリテラルを入力すると先頭に「=」が付加されます。(の箇所)
従来バージョンで作成したものも同様に「=」が付加されます。(【問題1】)
また、ここにセルアドレスを入力した場合は、「適用先」の先頭アドレスに対応するセルアドレスが選択した全てのセルに格納されます。(【問題2】)
例えば、「適用先」=$A:$Aで「=$B1」と指定した場合、A2:A65536セルにも「=$B1」が格納されます。
でも、お互いの相対位置関係を計算して評価されるので実用上は問題ありません。
因みに、従来バージョンでは、A3セルでは、「=$B3」というように相対参照が働いて格納されています。
なお、ここで説明した内容は、「数式が」で設定したセルアドレスも同じ表示となります。(図3)
(図2)
(図3)

マクロでの非互換部分
1.まず、関連するプロパティを紹介します。

  • Type・・・・・ルールの種類を細分化された分類
           (従来バージョンには、「セルの値が」「数式が」の2種類のみ)
  • Operator・・・演算子(種類が「セルの値が」のみ有効)
  • Formula1・・・条件式1(数式またはリテラル)
  • Formula2・・・条件式2(数式またはリテラル)

※Formula2は、「セルの値が」で、Operatorが「次の値の間」「次の値の間以外」の場合のみ有効です。
※ここに列挙したプロパティは、従来バージョンもExcel2007も共通なものですが、新しく追加された「ルールの種類」には、Formula1も無効となるものがあります。

次は、非互換部分をExcel2007で対応するために必要なプロパティです。


  • Appliesto・・・適用先
  • Priority ・・・優先順位

2.「Type」と「Operator」の関係がおかしい?

従来バージョンで「数式が」(Type=2)で設定したものが、Excel2007 VBAでは、「セルの値が」(Type=1)に変わってしまっています。
設定画面では、「数式」と表示されているにもかかわらず、VBAで取得すると「セルの値」(Type=1)ということはバグではないかと思われます。
Type=1の場合は、Operatorが設定されているという前提でコードが記述されていると、Operatorにアクセスしたところで「実行時エラー:1004」が発生します。
このエラーを回避するには、次の3つの対処方法があります。

(1)事前に条件付き書式の設定画面を開き「適用」ボタンを押す方法(推奨)
(2)VBA内でTypeの値を読み替えて処理する方法(「Typeを読み替えるコード例」)
(3)VBAでTypeの値を変更する方法があります。
※これがPriorityが変わってしまうなど結構難しい!
※「VBAでTypeの値を変更する方法」をサポートするアドインソフト
  http://www.vector.co.jp/soft/winnt/business/se462587.html

3.「条件式内のセル参照」がおかしい?

前述(【問題2】参照)しましたが、「条件式内で記述してあるセルが相対参照されていない」ことです。
これに対処するは、「適用先」内における「自セル」の相対位置関係を求め、「条件式内のオペランド文字列のセル」に相対位置関係を加味(Offset)して参照先セルを求める方法があります。 その場合には「条件式」内に記述してあるオペランド文字列を「セル」と判定するコードが必要になります。

Typeを読み替えるコード例

Sub sample()
Dim myType As Long
Dim myOperator As Long
Dim f As Long
    With Selection     '←予め対象セル範囲を選択しておく
        For f = 1 To .FormatConditions.Count
            With .FormatConditions(f)
                myType = .Type
                myOperator = 0
                On Error Resume Next
                If myType = xlCellValue Then
                    myOperator = .Operator
                End If
                If Err <> 0 Then
                    myType = xlExpression
                End If
                On Error GoTo 0
            End With
            Select Case myType
                Case xlCellValue
                    '「セルの値が」の場合の解析処理
                Case xlExpression
                    '「数式が」の場合の解析処理
            End Select
        Next f
    End With
End Sub

ページの先頭へ

Copyright© 2008-2010 WinArrow All Rights Reserved.
inserted by FC2 system