Excelについて詳しい方教えてください。

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

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/09/15 12:40:41
  • 終了:2006/09/15 17:29:24

ベストアンサー

id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612006/09/15 14:49:58

ポイント50pt

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

id:matttsu

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

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

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

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

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

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

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

2006/09/15 15:29:27

その他の回答(1件)

id:llusall No.1

llusall回答回数505ベストアンサー獲得回数612006/09/15 13:23:47

ポイント30pt

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


以下のスクリプトをメモ帳などで、「対応.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!"


id:matttsu

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

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

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

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

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

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

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

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

2006/09/15 13:58:55
id:llusall No.2

llusall回答回数505ベストアンサー獲得回数612006/09/15 14:49:58ここでベストアンサー

ポイント50pt

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

id:matttsu

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

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

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

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

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

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

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

2006/09/15 15:29:27
  • id:llusall
    いるか君、ありがとうございます。

    >ピボットテーブルを作ればよいのでは?との意見
    私は生憎、エクセルの関数や集計機能は苦手ですので、あとは、
    rikuzaiさんや、takntさんにバトンタッチです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません