2012年6月26日火曜日

Firefox 検索バーに履歴表示ボタンをつける。

検索バーの履歴表示

Firefox 検索バーの履歴表示は、検索バーが空白の状態のときに。

  • キーボードショートカットなら、Ctrl+kで検索バーにフォーカスを移してからの押下。
  • マウス操作なら、検索バーの入力フィールドをクリック、の押下。
で検索履歴が表示されます。

これは 前の記事 で書きました。でもマウス操作のとき、クリック後に「下カーソルキー」を押すのはちょっと不便です。そこで検索バーの履歴ボタンを、ロケーションバーの履歴ボタンと同じデザインで追加してみました。 これでマウス操作だけでも、検索履歴の表示が出来るようにになります。

虫眼鏡アイコンの右隣のボタンが検索履歴の表示ボタンです。ボタンのデザインをロケーションバーのドロップマーカーと同じにしました。



方法

この履歴ボタンを検索バーに追加する方法は、Firefox の userChrome.css ファイルに、下のユーザースタイルを追加します。 このファイルは、ユーザプロファイルディレクトリ直下の chrome サブディレクトリに置きます。

WindowsXPの場合 userChrome.css の場所はここになっています

C:\Documents and Settings\{ユーザー名}\Application Data\Mozilla\Firefox\Profiles{英数字の羅列}.default\chrome\

Windows7の場合 userChrome.css の場所はここになっています。

C:\Users\{ユーザー名}\AppData\Roaming\Mozilla\Firefox\Profiles\{英数字の羅列}.default\chrome\

このフォルダには、サンプルファイル userChrome-example.css があるので、これを元にして追加記入後に、ファイル名を userChrome.css に変えて保存するのが確実かもしれません。 文字コードは UTF-8 で保存します。



履歴ボタンを検索バーに追加するユーザースタイル


次項の「Stylish」アドオンを使うと、もっと簡単に設定できます。



「Stylish」で設定する場合。

「Stylish」
https://addons.mozilla.org/ja/firefox/addon/stylish/

このアドオンはユーザースタイルを管理するアドオンで、ユーザースタイルを使うときにとても便利です。



履歴表示ボタンの設定手順。

  1. アドオンをインストール後に、Firefox の「アドオンマネージャ」を開きます。
  2. 「新しいスタイルを書く」のボタンを押すと、「新しいスタイル」の編集ダイアログが表示されます。
  3. 「名前」欄には設定するスタイル名を入力します。 「履歴表示ボタン」等の任意の名前で OK です。
  4. 中央の編集ウインドウに、上記のコードをコピーして貼り付けます。
  5. 「保存」ボタンを押して終了します。

これで履歴表示ボタンが表示されるようになります。

2012年6月22日金曜日

Firefoxの検索バーを使うときのヒント。

検索バーを使うときの、ちょっと便利なヒントです。


検索結果を新しいタブで開く。

Firefoxの検索バーに入力すると、検索結果は現在のタブに表示されます。
今まで見ていたWebページが検索結果のページに書き換わってほしくないときは、検索キーワードの入力後に<enter>ではなくalt+<enter>を押せば、検索結果ページを新しいタブで開くことができます。

検索結果ページを、いつもの<enter>で新しいタブに開くようにしたいときは以下のように設定します。

  1. ロケーションバーにabout:configと入力。
  2. 検索バーにbrowser.search.openintabと入力。
  3. 表示されたbrowser.search.openintabの値をfalseからtrueに変更。
    (変更方法:「ダブルクリックする」または 右クリックメニューから「切り替え」を選択。)
  4. Firefoxを再起動。
これで、検索文字入力後に<enter>で、検索結果を新しいタブで開くようになります。 alt+<enter>では、今開いているタブに検索結果が表示されるようになります。


検索バーの検索エンジンを切り替える。

Firefoxの検索バーから検索するときに使われる検索エンジンは、あらかじめ複数登録されています。 この中から使用する検索エンジンを選ぶことができます。

  • キーボードショートカットなら、Ctrl+kで検索バーにフォーカスを移してから、
    Ctrl+<上下カーソルキー>で切り替えられます。
  • マウス操作なら、検索バー左側の検索エンジンのアイコン右横の矢印をクリックし、表示された一覧から選択できます。

このメニュー下の「検索バーの管理」では、検索エンジンの並び順の変更や削除、新しい検索エンジンの追加が出来るようになっています。


検索バーの検索候補表示を切り替える。

検索バーに入力するとき、候補キーワードが自動的に表示されます。 この機能が不要な場合は、上記の「検索バーの管理」ダイアログの左下部分の 「検索語句の候補を表示する」のチェックを外すと無効にできます。

検索バーの右クリックメニューから 「候補を表示する」のチェックを外すことでも、同じように無効にできます。

2012年6月19日火曜日

Firefoxの検索バーを便利にするアドオン

GoogleツールバーをFirefoxのアドオンで置き換えるときに、Firefoxの検索バーを便利にするアドオンを紹介します。

検索バーの履歴の並び順を変えたい。

検索バーの履歴を表示する方法は、検索バーが空白の状態のときに。

  • キーボードショートカットなら、Ctrl+kで検索バーにフォーカスを移してから  の押下。
  • マウス操作なら、検索バーの入力フィールドをクリック、の押下。
で検索履歴が表示されます。

※このとき、既に文字が入力されている場合には、検索候補が表示されます。(「候補を表示する」にチェックをしている場合。)

この履歴の表示順は「文字順?」「文字コード?」「使用頻度?」的な微妙な並び方なので、履歴の中から探すのに苦労します。

Googleツールバーのように、入力した順に表示したいときにはこのアドオンがおすすめです。

「Searchbar Autocomplete Order」
https://addons.mozilla.org/ja/firefox/addon/searchbar-autocomplete-order/?src=userprofile

検索履歴を入力順に表示する設定は、アドオンのオプション設定で 「文字順に表示」「新しいもの順」を選択すればOKです。



検索文字列をハイライト表示する。

Googleツールバーのように、検索文字列をハイライト表示するアドオンです。

「SearchWP」
https://addons.mozilla.org/ja/firefox/addon/searchwp/?src=ss

ハイライトボタンを押すと、Webページの検索キーワードをハイライト表示します。
このとき、検索文字列がキーワードのハイライトボタンに変わります。 クリックするとWebページ内の検索文字列を順番にハイライト表示します。 検索キーワードが複数の場合は色分け表示されます。

アドオンのオプション設定で 「語のトークンを一つのメニューにグループ化する」にチェックを入れると。

検索文字列キーワードのハイライトボタンが、メニュー形式に変わります。

1ワードのページ内検索なら、Firefoxのページ内検索も便利です。

文字列を選択してからCtrl+fを押すか、Ctrl+fを押してから検索バーの検索フィールドに文字列を入力します。

検索バーでは、検索キーワードの移動や、ハイライト表示が出来ます。



検索バーと検索サイトの検索キーワードを同期するアドオン。

検索サイトで入力した検索キーワードを、検索バーにも同期して表示することができます。

「SearchBox Sync」
https://addons.mozilla.org/ja/firefox/addon/searchbox-sync/?src=dp-dl-oftenusedwith

このアドオンは、検索バーの検索履歴を使っているときに便利さを感じます。

同期できる検索エンジンは、アドオンの「SerchBox Sync設定」で設定できます。

関連記事

「Firefoxの検索バーを使うときのヒント。」
http://babooshka-innerjourneys.blogspot.jp/2012/06/firefox_22.html

Firefox 検索バーに履歴表示ボタンをつける。
http://babooshka-innerjourneys.blogspot.jp/2012/06/firefox_26.html

2012年6月14日木曜日

Excel スタイル設定一覧を、シートに表示するマクロ

先週に悩まされた、「表示形式を追加できません。」や、「セルの書式が多すぎるため、書式を追加できません」のエラーメッセージでは、いろいろと勉強になりましたので、ここで少しまとめておきます。


Excelのスタイルについて

Excelのスタイルとは、「表示形式」「配置」「フォント」「罫線」「パターン」「保護」等の一連の書式をひとまとめにして名前を付けたものです。 よく使う書式の組み合わせをスタイルとして登録しておくと一度に設定できるため、書式を別々に設定するよりも効率が良くなるというわけです。 実はこの機能、今まで使ったことが無く今回初めて知りました。

Excel2007では組み込みスタイルが増えて、こんなスタイルが登録されているようです。


使用できるスタイルの件数

Excel 2007 では、一意のセル書式を 64,000 使用することができますが、以前のバージョンの Excel では一意のセル書式は最大で 4,000 しか使用することができません。一意のセル書式には、ブック内で適用される特定の書式の組み合わせすべてが含まれます。

「以前のバージョンの Excel でサポートされない Office Excel 2007 の機能」より引用  http://office.microsoft.com/ja-jp/excel-help/HA010077823.aspx


ワークシートをコピーするとスタイルが増える

Excel2000やExcel2003ではセル書式は最大4,000使えるので、一般的な使い方ならばセル書式が4,000もあれば十分かもしれません。しかし、ここに落とし穴がありました。

それはExcel2007で作成されたブックを「Microsoft Office互換機能パック」で変換後、Excel2003を使って編集しようとした時に発生した「ワークシートのコピーでスタイルが増加する」という現象でした。

コピー前は1608件だったスタイル件数が、シートコピー後に3065件に増えました。 この不思議な現象はワークシートのコピーで発生しましましたが、シートからシートへのセル範囲のコピーでは発生しませんでした。 

Microsoftサポートサイトの
「Excel 2007 で、使用されていないスタイルが、あるブックから別のブックへコピーされます。」 http://support.microsoft.com/kb/2553085/ja 
が解決の糸口になるのかもしれませんが、Excel2007を持っていないのでこれは未確認です。

スタイルはブックに登録されるのでブックごとにスタイルの件数が違うようです。 Excel2007で作成されたブックでは、ワークシートのコピーでスタイルが増えるようなので、Excel2007で繰り返しワークシートをコピーして編集するような使い方をしている場合は、気づかないうちにスタイルが増えているのかもしれません。


スタイルが増えすぎるとどうなるのか

Excel2007で作成された、「スタイルが増えすぎたブック」を「Microsoft Office互換機能パック」で変換後に調べてみました。(この時のスタイル件数は3065件)

まっさらなワークシートをひとつだけ残して、他のワークシートをすべて削除した状態で書式設定をすると Excel2000では「表示形式を追加できません。」 が表示されました。 Excel2003では「セルの書式が多すぎるため、書式を追加できません」 が表示されました。

次にユーザースタイルをマクロを使って一括削除すると再び書式設定が出来るようになりました。

このことから、ワークシート内の書式数では無くて、スタイルの登録件数が多い場合に、このようなエラーが発生することがわかりました。(4,000件に満たない場合でも起こるようです。)



追記:2013年4月10日
スタイルが増えすぎて開くことができない場合は、この投稿が役立つかもしれません。

Office 互換機能パックでxlsxファイルが開けない。
Office 互換機能パックでxlsxファイルを開こうとすると「表示形式を追加できません。」や「セルの書式が多すぎるため、書式を追加できません」が表示される。


追記:2016年6月22日
Excelのスタイルに関連する他の投稿




スタイル設定をシートに出力するマクロ

大量のスタイル設定の内容を一覧表形式で確認したかったので、スタイル設定をシートに書き出すマクロを作ってみました。 一覧表に出力したスタイルを見てみると、Excelが自動的に(勝手に)追加したと思われるスタイルが大量にありました。

シートに出力したスタイル
シートに出力したスタイル

このマクロは、Excel2000とExcel2003を使って、WindowsXP SP3で動作確認しました。 マクロを実行すると、アクティブなブックに新しいシートを追加してスタイル一覧を出力します。

出力する書式設定の内容は、

  • スタイルの種類
  • セルにスタイル適用した結果を表示
  • スタイル名
  • 表示形式
  • 配置
  • 縦横位置
  • フォント名とサイズ
  • 罫線 左、右、上、下、右斜め下、右斜め上
  • パターン
  • 保護
  • 数式表示
としました。

組込スタイルとユーザースタイル別に、登録されたスタイル名順に並んでいます。

スタイルダイアログで「スタイルに設定されている書式」にチェックのない項目は適用されないため、書式の登録があっても表示していません。

スタイルの内容が確認できるように、B列のセルにスタイル設定を適用した表示をしています。


スタイル設定をシートに出力する VBAマクロ

'新しいシートにスタイルを出力。
Sub View_Style()
    Dim nCnt As Long
    Dim BltinCnt As Long
    Dim NotBltinCnt As Long
    Dim i As Long
    Dim st As String
    Dim stVal As Long
    Dim cnt As Long
    Dim sTitle As Variant
    Dim sh As Worksheet
    Dim bk As Workbook
    
    Dim kName As Variant
    Dim kXlValue As Variant
    Dim kStr(5) As String
    Dim kNum As Integer
    sTitle = Array("種類", "スタイル表示", "スタイル名", "表示形式", "配置 縦", "配置 横", "フォント名", _
                "サイズ", "罫線", "罫線", "罫線", "罫線", "罫線", "罫線", "パターン", "保護", "数式表示")
    kName = Array("左", "右", "上", "下", "右斜め下", "右斜め上")
    kXlValue = Array(xlLeft, xlRight, xlTop, xlBottom, xlDiagonalDown, xlDiagonalUp)
    
    On Error GoTo ERR_EXIT
    
    Set bk = ActiveWorkbook
    Set sh = bk.Worksheets.Add
    
    NotBltinCnt = 0
    BltinCnt = 0

    'タイトル表示
    sh.Range("a1").Resize(1, 17).Value = sTitle
    
    'スタイル読み出し
    cnt = bk.Styles.Count
    For i = 1 To cnt
        nCnt = i + 1
        
        '種類
        If bk.Styles(i).BuiltIn Then
            '組込みスタイル
            BltinCnt = BltinCnt + 1
            sh.Range("A" & nCnt).Value = "組込"
        Else
            'ユーザースタイル
            NotBltinCnt = NotBltinCnt + 1
            sh.Range("A" & nCnt).Value = "ユーザー"
        End If
        
        'スタイル表示
        sh.Range("B" & nCnt).Value = 1234567890

        'スタイル名
        sh.Range("C" & nCnt).Value = bk.Styles(i).NameLocal

        '表示形式
        If bk.Styles(i).IncludeNumber Then
            st = bk.Styles(i).NumberFormatLocal
        Else
            st = "-"
        End If
        sh.Range("D" & nCnt).Value = st
        
        '配置
        If bk.Styles(i).IncludeAlignment Then
            '縦 xlVAlign
            stVal = bk.Styles(i).VerticalAlignment
            Select Case stVal
            Case xlVAlignTop
                st = "上"
            Case xlVAlignCenter
                st = "中央"
            Case xlVAlignBottom
                st = "下"
            Case xlVAlignJustify
                st = "両端揃え"
            Case xlVAlignDistributed
                st = "均等割り付け"
            Case Else
                st = ""
            End Select
            sh.Range("E" & nCnt).Value = st

            '横 XlHAlign
            stVal = bk.Styles(i).HorizontalAlignment
            Select Case stVal
            Case xlHAlignGeneral
                st = "標準"
            Case xlHAlignLeft
                st = "左"
            Case xlHAlignCenter
                st = "中央"
            Case xlHAlignRight
                st = "右"
            Case xlHAlignFill
                st = "繰り返し"
            Case xlHAlignJustify
                st = "両端揃え"
            Case xlHAlignCenterAcrossSelection
                st = "選択範囲で中央"
            Case xlHAlignDistributed
                st = "均等割り付け"
            Case Else
                st = ""
            End Select
            sh.Range("F" & nCnt).Value = st
        Else
            sh.Range("E" & nCnt).Value = "-"
            sh.Range("F" & nCnt).Value = "-"
        End If
        
        'フォント
        If bk.Styles(i).IncludeFont Then
            'フォント名
            sh.Range("G" & nCnt).Value = bk.Styles(i).Font.Name
            
            'フォントサイズ
            sh.Range("H" & nCnt).Value = bk.Styles(i).Font.Size
        Else
            sh.Range("G" & nCnt).Value = "-"
            sh.Range("H" & nCnt).Value = "-"
        End If
        
        '罫線 XlLineStyle
        If bk.Styles(i).IncludeBorder Then
            For kNum = 0 To 5
                stVal = bk.Styles(i).Borders(kXlValue(kNum)).LineStyle
                If stVal <> xlLineStyleNone Then
                    kStr(kNum) = kName(kNum)
                Else
                    kStr(kNum) = "なし"
                End If
            Next kNum
            With sh.Range("I" & nCnt).Resize(1, 6)
                .Value = kStr
            End With
            
        Else
            With sh.Range("I" & nCnt).Resize(1, 6)
                .Value = "-"
            End With
        End If
        
        'パターン XlPattern
        If bk.Styles(i).IncludePatterns Then
            If bk.Styles(i).Interior.Pattern = xlPatternNone Then
                st = "網かけなし"
            Else
                st = "網かけ"
            End If
        Else
            st = "-"
        End If
        sh.Range("O" & nCnt).Value = st
        
        '保護
        If bk.Styles(i).IncludeProtection Then
            'ロック
            If bk.Styles(i).Locked Then
                st = "ロック"
            Else
                st = ""
            End If
            sh.Range("P" & nCnt).Value = st
            
            '非表示
            If bk.Styles(i).FormulaHidden Then
                st = "表示しない"
            Else
                st = "表示"
            End If
            sh.Range("Q" & nCnt).Value = st
        Else
            sh.Range("P" & nCnt).Value = "-"
            sh.Range("Q" & nCnt).Value = "-"
        End If
    Next i
    
    '並べ替え 種類:降順、 スタイル名:昇順、 先頭行:タイトル
    With sh.Range("A1").Resize(cnt + 1, 17)
        .Sort Key1:=Range("A2"), Order1:=xlDescending, Key2:=Range("C2"), Order2:=xlAscending, _
            Header:=xlGuess, OrderCustom:=1, MatchCase:=False
        .Font.Size = 9
        .Columns.AutoFit
    End With
    
    'スタイル表示セルに、スタイルを適用
    For i = 2 To cnt + 1
        sh.Range("B" & i).Style = sh.Range("C" & i).Value
    Next i
    
ERR_EXIT:
    If Err.Number <> 0 Then
        MsgBox "エラー№:" & Err.Number & " " & Err.Description, , "エラーのため終了します"
    End If
    
    Set sh = Nothing
    Set bk = Nothing
    
    MsgBox "組込スタイル=" & BltinCnt & ", ユーザースタイル=" & NotBltinCnt & vbCr & _
    "スタイル合計=" & BltinCnt + NotBltinCnt, , "スタイル件数"
End Sub


2012年6月9日土曜日

Firefox13がリリースされました。

Firefox13がリリースされましたね。
Firefox13.0ダウンロード
http://mozilla.jp/firefox/

Firefox13.0リリースノート
http://mozilla.jp/firefox/13.0/releasenotes/


今回は「スタートページ」と「新しいタブページが」新しくなっています。

新しいスタートページ

ツールバーのホームボタンを押すか、Alt+Homeを押すとスタートページに変わります。 

このスタートページ中央にはGoogle検索、下部分にはクイックリンクが配置されています。 このクイックリンクには、ダウンロード、ブックマーク、履歴、アドオン、Sync、オプション が配置されています。この場所からなら、メニューから呼び出すよりも1スッテップ早くアクセスできそうですね。

キーボードショートカットでも早そうですが、ダウンロードウインドウはCtrl+j、ブックマークサイドバーを開くはCtrl+b、 閉じるはCtrl+i、履歴サイドバーを開くはCtrl+h、アドオンマネージャを開くはCtrl+Shift+a、Syncは?、オプションは? このキーボードショートカットはなさそうです。やっぱりクイックリンクのほうが早そうですね。
新しくなったスタートページ
スタートページを変更している場合は、次の操作で新しいスタートページを表示できるようになります。

  1. メニューから「オプション」を選択
  2. 「一般」パネルを選択
  3. 「起動」セクションの「初期設定に戻す」ボタンをクリック
  4. OKボタンをクリック。

オプション
スタートページに検索窓をを配置している理由がおもしろいです。
MoZillaの調査では、多くのユーザーがホームボタンを押して検索を始めようとするからだそうです。
ユーザーがFirefoxの検索バーに気づいていないのか、それを使いたくないのか。  それはたぶん、検索バーの履歴の順番では…

Firefoxの検索バーは、「入力順」ではなく「文字(コード?)順」に出てくるみたいなので、これを使いにくいと思うユーザーが多いのではないでしょうか。 私もGoogleツールバーで、「入力の新しいもの順」に慣れ親しんだため、「文字順」ではちょっと使いづらくて、「入力順」に表示できるアドオンを入れて使っています。

ホームボタンを押して検索を始めようとする理由は、”スタートページに「Google.co.jp」が設定してあり、ホームボタンで呼び出してから検索する。”(これは以前の私の場合)。 

新しいタブページ

タブの右側の「+」ボタンを押すか、Ctrl+tを押すとタブページが開きます。 chromeのタブページと似ていますが、Firefoxのタブページではピン留め、削除、並べ替えができるようになっていなす。 ブックマーク代わりに、よく訪れるサイトをピン留めしておくと便利そうですね。



GoogleツールバーはFirefox13でも動いているようです。

今回のバージョンアップでは互換性チェックに引っかかって無効化されていますが、install.rdfファイルの <em:maxVersion>13.0.*に修正すれば動作するようです。

修正方法はこちらを参照ください。

install.rdfファイルの修正部分です。
現状は、Googleツールバーを常用せずに、前記事の「Googleツールバーをアドオンで置き換えてみる」 http://babooshka-innerjourneys.blogspot.jp/2011/10/google.html のように「アドオンで置き換え化」しています。

2012年6月7日木曜日

BarGraphViewer20120607をリリースしました。

BarGraphViewer20120607をリリースしました。
このページ上部メニューの 「WebSite BarGraphViewer」から、ダウンロードページに移動できます。



変更点

シート「BARGRAPH」の作成時に、言語色の表示とバーグラフの表示色が正しく表示できない問題点( Excel 2000 と Excel 2003 で発生しました。)を修正しました。

色が正しく表示できない状態

問題の発生原因

スタイル名の登録件数によってこの問題が発生することが分かりました。 Excel 2000 と Excel 2003 で発生することを確認しています。



問題の詳細

Excel ブックに登録されているスタイル名を調べてみると、大量のスタイル設定がありました。

スタイル設定は、メニューから書式設定スタイルでダイアログを開き、スタイル名のドロップダウンリストから見ることができます。

どれくらいのスタイル設定が登録されているのか調べるため、マクロを書いてスタイル名の登録件数を調べてみました。

スタイルをカウントする。
Sub Count_Style()
    Dim s, BltinNameCount, NotBltinNameCount
    On Error Resume Next
    
    NotBltinNameCount = 0
    BltinNameCount = 0
    With ActiveWorkbook
        For Each s In .Styles
            If Not s.BuiltIn Then
                'ユーザースタイルをカウント
                NotBltinNameCount = NotBltinNameCount + 1
            End If
        Next
        For Each s In .Styles
            If s.BuiltIn Then
                '組み込みスタイルをカウント
                BltinNameCount = BltinNameCount + 1
            End If
        Next
    End With
    MsgBox "styles count. Bltin=" & BltinNameCount & ", NotBiltin=" & NotBltinNameCount
End Sub

ダウンロードした青木リスト 「bia12.zip」を解凍し、「bia12.xlsx」を  Microsoft Office 互換機能パック で変換後、ファイルを XLS 形式で保存します。 保存直後のスタイル件数は 1,608 件、「BARGRAPH」シートの作成後のスタイル件数は 3,065 件になりました。(これは 6 月 2 日にダウンロードしたファイルで確認した件数です。)

以前のバージョンの Excel でサポートされない Office Excel 2007 の機能」によると。

Excel 2007 では、一意のセル書式を 64,000 使用することができますが、以前のバージョンの Excel では一意のセル書式は最大で 4,000 しか使用することができません。一意のセル書式には、ブック内で適用される特定の書式の組み合わせすべてが含まれます。
となっています。 スタイル名の登録件数が 4,000 件に達していないのに、この問題が発生した理由を考えると。スタイル名の登録件数と 「BARGRAPH」シートに設定した書式との総数が 4,000 件を超えたのが原因と思われます。 このことから Excel 2000 と Excel 2003 でこの問題が発生したようです。また、Excel 2007 では大丈夫だと思います。

ためしに、ブックに新しいシートを 1 つ挿入して、その他のシートを削除した後で挿入したシートに書式を設定すると。 「表示形式を追加できません。」のエラーダイアログが表示され、書式設定ができません。

このことから、ワークシートの内容というよりも、スタイル名の登録件数が多いことが原因と考えられます。

Excel2000の場合

Excel 2003 では、「セルの書式が多すぎるため、書式を追加できません」のエラーダイアログが表示されました。

Excel2003の場合

ここで、問題のユーザースタイル名の登録を削除してみることにします。

削除対象は 3,065 件もありますがスタイルダイアログでは 1 件ずつしか削除できず気の遠くなる数なのでマクロで一括削除します。

(削除対象はユーザースタイルだけです。組み込みスタイルは削除しません。 自分でユーザースタイルを登録している方は、このマクロで一括削除しないように注意してください。

'スタイルを削除する。
Sub Delete_StyleName()
    Dim s, NameCount
    On Error Resume Next
    
    NameCount = 0
    For Each s In ActiveWorkbook.Styles
        If Not s.BuiltIn Then
            NameCount = NameCount + 1
            s.Delete
        End If
    Next
    MsgBox "Delete complete.  count=" & NameCount
End Sub

削除後は Excel 2000 と Excel 2003 のどちらでも、再び書式設定が出来るようになりました。

Excel2000の場合
Excel2003の場合

このことから、ユーザースタイルを削除することで解決の目処がつきましたが、もう一つ問題が残っています。それは、「BARGRAPH」シートの作成後のスタイル件数が 3,065 件と 1.9 倍に増加したことです。

スタイル件数の増加がプログラムのどの部分で発生しているのか調べた結果、シートのコピーで発生していることが分かりました。

該当部分を書き出すと。

'ワークシートをコピー。
Sheets(ws_name_bi).Copy before:=Sheets(1)

'シート名の設定
Sheets(1).Name = ws_name_bar

このようにワークシートを丸ごとコピーすると、この問題が起こるようです。

※ブック上の「シートの移動またはコピー」ダイアログボックスで、「コピーを作成する」を選んだ時にも同じようにユーザースタイルの増加現象が起こりました。

そこでセル範囲をコピーするように修正しました。

コピー元のセル範囲を調べてから、コピーするようにしています。

Dim bi_row   As Integer                 'biリスト行数
Dim bi_col As Integer                   'biリスト列数 (右端の列)
Dim bi_range As Range

'biシートの最終行 STATION列の行数を確認
bi_row = Sheets(ws_name_bi).Cells(Rows.Count, 3).End(xlUp).row

'biシートの最右列 項目名行の列数を確認
bi_col = Sheets(ws_name_bi).Cells(2, Columns.Count).End(xlToLeft).Column

Set bi_range = Sheets(ws_name_bi).Range(Cells(1, 1), Cells(bi_row, bi_col))

'シートを追加、シート名の設定。
Sheets.Add(before:=Sheets(1)).Name = ws_name_bar
'セル範囲をコピー
bi_range.Copy Destination:=Sheets(ws_name_bar).Range("A1")

コピーの方法を、「シート丸ごとコピー」から「セル範囲をコピー」に変更することで、コピーによるスタイル件数が増加が解決。他には、「BARGRAPH」シートを作成後に、言語色の表示とバーグラフの表示色を正しく表示できない問題も解決しました。

今回リリースの「BarGraphViewer20120607」では、ワークシートのコピー方法の変更のみでユーザースタイルの自動削除は行っていません。 Excel ブックの中でスタイルが使われていたり、個人用に登録されているユーザースタイルがあると自動削除するわけにもいかず。 いまのところ 1,608 件程度でも問題ないようなので、しばらく様子を見ています。

もしも、ユーザースタイルの登録件数が気になる方は、この下のマクロでスタイルの一覧を確認してから削除されるのが良いかもしれません。



登録されているスタイルの一覧を、アクティブシートに書き出すマクロです。

このマクロを実行するとアクティブシートを上書きしますので、事前に新しいシートを挿入後アクティブな状態で実行してください。

'スタイルをアクティブシートに書き出す。
Sub View_Style()
    Dim NameCount, BltinNameCount, NotBltinNameCount, i
    On Error Resume Next
    
    NameCount = 0
    NotBltinNameCount = 0
    BltinNameCount = 0
    With ActiveWorkbook
        For i = 1 To .Styles.Count
            If Not .Styles(i).BuiltIn Then
                NameCount = NameCount + 1
                NotBltinNameCount = NotBltinNameCount + 1
                ActiveSheet.Range("A" & NameCount).Value = NotBltinNameCount
                ActiveSheet.Range("B" & NameCount).Value = .Styles(i).BuiltIn
                ActiveSheet.Range("C" & NameCount).Value = .Styles(i).NameLocal
            End If
        Next i
        For i = 1 To .Styles.Count
            If .Styles(i).BuiltIn Then
                NameCount = NameCount + 1
                BltinNameCount = BltinNameCount + 1
                ActiveSheet.Range("A" & NameCount).Value = BltinNameCount
                ActiveSheet.Range("B" & NameCount).Value = .Styles(i).BuiltIn
                ActiveSheet.Range("C" & NameCount).Value = .Styles(i).NameLocal
            End If
        Next i
    End With
    ActiveSheet.Range("A:C").Columns.AutoFit
    MsgBox "styles count. Bltin=" & BltinNameCount & ", NotBiltin=" & NotBltinNameCount & ", Total=" & NameCount
End Sub


2012年 6月14日追記
「Excel スタイル設定をシートに出力するマクロ」を作りました。

http://babooshka-innerjourneys.blogspot.jp/2012/06/excel.html