人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelについて詳しい方教えてください。
以下の質問の続きになります。
http://q.hatena.ne.jp/1158211864
いただいた回答で現象を回避できることはわかりました。
ただレジストリをいじるのが難しい状況になりました。
調べてみたのですが日本語の情報がMSの公式にぐらいしかないので
英語が不得意な私にはちょっと難しいです。
たぶん無理な気はしているのですがVBA上などでExcelに対して
このExcel97Subtotalsというオプションを動的に操作など出来ないでしょうか?
同じような動きになれば方法は問いません。
よろしくお願いします。

●質問者: matttsu
●カテゴリ:コンピュータ
✍キーワード:Excel MS VBA オプション レジストリ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● llusall
●30ポイント

スクリプトでレジストリを変更します。


以下のスクリプトをメモ帳などで、「対応.vbs」などと適当に名前を付けて保存し、ダブルクリックしてください。

なお、エクセルのバージョンにより、「2003もしくは2002」に書き換えてください。

いずれにせよ、レジストリを修正するので、念のためバックアップ等とっておいたほうが宜しいかと思います。


Option Explicit

'----------------------------------------------------------------------------------

'----------------------------------------------------------------------------------

Const XL_VERSION = 2003 'エクセルのバージョン(2003/2002) ■ここを変更してください。

'----------------------------------------------------------------------------------

'----------------------------------------------------------------------------------

Const REG_10 = "HKCU\Software\Microsoft\Office\10.0\Excel\Options\Excel97Subtotals"

Const REG_11 = "HKCU\Software\Microsoft\Office\11.0\Excel\Options\Excel97Subtotals"

Dim REG_STR

Dim WshShell

REG_STR = ""

If XL_VERSION = 2003 Then

    REG_STR = REG_11

End If

If XL_VERSION = 2002 Then

    REG_STR = REG_10

End If

If REG_STR = "" Then

    MsgBox "バージョン不正!"

    WScript.Quit

End If

Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.RegWrite REG_STR, 1, "REG_DWORD"

MsgBox "セットOk!"


◎質問者からの返答

サンプルソースまでありがとうございます。

ただやはりレジストリ変更が必要ですか。

Excel上のVBA(マクロ)からは難しいということですね。

実はこのExcel97Subtotalsの値を変更するとExcelのほかの機能にも影響がありそうということで

あるマクロを実行するときだけこのExcel97Subtotalsの値を変更して

実行後に戻すということをやりたかったのですが…。

やはりちょっと無理そうですね。

一応もう少し回答を待って無理そうであればあきらめてVBAの力技で頑張ろうと思います。


2 ● llusall
●50ポイント ベストアンサー

VBAにて次のプロシージャを追加してください。

'レジストリ追加

Call RegAdd()

'-----------------------

'--なにかのマクロ処理---

'-----------------------

'レジストリ削除

Call RegDel()

のようにすれば宜しいかと思います。


11.0のところは、エクセルのバージョンで異なるので適宜修正するなどしてください。


Option Explicit

    

Private Const REG_STR = "HKCU\Software\Microsoft\Office\11.0\Excel\Options\Excel97Subtotals"

Sub RegAdd()

    'レジストリの追加

    Dim WshShell

    

    Set WshShell = CreateObject("WScript.Shell")

    WshShell.RegWrite REG_STR, 1, "REG_DWORD"

    Set WshShell = Nothing

End Sub


Sub RegDel()

    'レジストリの削除

    Dim WshShell

    

    Set WshShell = CreateObject("WScript.Shell")

    WshShell.RegDelete (REG_STR)

    Set WshShell = Nothing

End Sub

◎質問者からの返答

本当にたびたびありがとうございます。

ソースコードそのまま使えました。

処理のたびにレジストリの追加・削除が走るというのが気になりますが

これで実現は可能だということはわかりました。

Administrator権限などが必要なのでは・・・。などちょっと気になる点はありますが・・。

前回の質問にピボットテーブルを作ればよいのでは?との意見もありましたので

今度はその方向の質問を立ててみようかと思います。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ