[[20121003092013]] 『グラフを選択時とアクティブセルについて』(ドカ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『グラフを選択時とアクティブセルについて』(ドカ)

あるセルを選択します。
その後、グラフを選択します。
グラフを選択しておいて、そのグラフを操作するマクロを走らせます。
その時に、あらかじめ選択しておいたセルのデータを使いたいのですが、どうすれば良いのでしょうか?

グラフを選択した時点で、ActiveCellを認識してくれないようなのです。

Excel2003、 Win7にて


 >グラフを選択しておいて、そのグラフを操作するマクロを走らせます。
 >グラフを選択した時点で、ActiveCellを認識してくれないようなのです。

 多分、書き方と言うかやり方がダメなんだと思います。

 今さら気づいたのだけれど、例えばコードの中で、

    ActiveSheet.ChartObjects("グラフ 1").Activate
    ActiveChart.ChartArea.Select
    MsgBox ActiveCell.Address

 てな事をやってませんか?

 >グラフを選択しておいて
 この手順がいまいち伝わらないのでなんともいえないのだけれど。
 手動で選択するのであれば、アクティブセルを認識すると思いますよ。
 BJ

回答ありがとうございます。
もう一度最初の質問をより詳しく書かせてください。

あるセルを手動で選択します。
その後、手動でグラフを選択します。
グラフを選択しておいて、そのグラフを操作するマクロを走らせます。
その時に、あらかじめ選択しておいたセルのデータを使いたいのですが、どうすれば良いのでしょうか?

という質問です。

そして、こうすれば出来るのかなということを思いつきましたが、コードではどう書けばよいか分からないので教えてください。

マクロを走らせたときに、選択されているグラフの認識N0?を覚えておきます。
そして、選んだグラフをマクロ上で一旦選択してない状態にします。
(手動であればESCキーを押すことと同じ)

そうするとセルがアクティブになるので、アクティブになっているセルを認識します。
(Set ○=ActiveCell)

そして、また、最初に覚えておいた認識NoのグラフをActive状態にします。

(ドカ)


 基本的にグラフは自分自身では使わないので詳しくないけど
 ・シート上に適当なグラフを作成し
 ・どこかのセルを選択し
 ・そのあと、グラフを選択し

 この状態で、以下を走らせると、選択されていたセルは認識できているけど?

 Sub test()
    MsgBox ActiveCell.Address
    MsgBox TypeName(Selection)
 End Sub

 (ぶらっと)


 ぶつかり

 >あるセルを手動で選択します。 
 >その後、手動でグラフを選択します。
 この手順なら、ActiveCellを認識しますよ。
 この後、マクロでグラフを選択して色々手を加えようとしている事がまずいと思います。
 グラフをいちいち選択しないと変更できないものもあったと思うので、
 この辺は断言できないけれども。
 アクティブセルを取得するタイミングの問題かと思いもしますけど?
 最初にアドレスを覚えておくなり、変数にセットしておけば良いんじゃないですか?
 >(Set ○=ActiveCell)
 BJ

ぶらっとさん レスありがとうございます。

事前に確認したつもりでしたが、やっちまったか!!
と思いながら、提示されたコードを実行してみましたが、
オブジェクトの変数またはWITHブロック変数が設定されていません。とエラーメッセージが出てしまいます。


BJさん レスありがとうございます。
ぶらっとさんと同じことを言われていると思いますが、
ぶらっとさんへのレスに書いたように、エラーメッセージが出てしまいます。

(ドカ)


 こちらではアクティブセルのアドレスが表示されるけど?
 2010だけど。

 そちらでエラーが出たコードは MsgBox ActiveCell.Address ここ?

 いずれにしても、不思議だねぇ・・・・

 (ぶらっと)

 別の板だけど

http://park7.wakwak.com/~efc21/cgi-bin/exqalounge.cgi?print+200910/09100107.txt

 こんなのがあった。ドカさんは2003ということだけど、いちど試してみたらいかが?

 (ぶらっと)

レスありがとうございます。

そちらでエラーが出たコードは MsgBox ActiveCell.Address ここ? そうです。ここでエラーが出ます。

win7+office2010とXP+office2000でもエラーがでます。

紹介されたサイトの方法で解決しました。

 Sub test()
  ActiveWorkbook.Activate ←これ追加で解決しました。

    MsgBox ActiveCell.Address
    MsgBox TypeName(Selection)
 End Sub


アクティブなウインドウがグラフウインドウになるからと以前教わりました(マナ)

 debug.print activewindow.caption

 2003と2010では挙動が違うようですね

レスありがとうございます。

WIN7+2010では、うまく行きました。
WIN7+2003では、うまく行きません。

2003では、どうすれば良いのでしょうか?

ドカ


 >debug.print activewindow.caption
 これが問題なら、

 Sub test()
    With ActiveSheet
       With .ChartObjects(1)  '実際のチャートオブジェクト
          .Activate
          .Chart.ChartArea.Select
       End With
    End With
    MsgBox "ok"
    ActiveWindow.Visible = False
    MsgBox ActiveCell.Address
 End Sub

 ichinose


出来るだけSelectしないが、本来とるべき対応だと思いますが(マナ)

 どんなときエラーになるかは、↓を試せばなんとなく理解できそうです。
 セルを選択した状態でステップ実行してみてください。

 Sub test1()
    ActiveSheet.ChartObjects(1).Select
    MsgBox ActiveChart.Name
    MsgBox ActiveWindow.Caption
    ActiveChart.ChartArea.Select  'ここでエラー
 End Sub

 Sub test2()
    ActiveSheet.ChartObjects(1).Activate
    MsgBox ActiveChart.Name
    MsgBox ActiveWindow.Caption
    ActiveChart.ChartArea.Select
 End Sub

で、何が言いたかったかというと、最初の質問のエラーは、これの逆バージョンなのではと、素人考えですが思いました(マナ)

 セルを選択して、グラフも選択して、その状態で実行ということの必要性というか、
 それがあるから、そういう処理コードにしているんだろうね。
 複数のグラフがあって、処理するグラフと、それに関するセルは、操作者に「任意に選ばせる」ために。

 もし、そうじゃなく、セルもグラフも特定できるなら、「選択」という状態に頼らないコードにすれば、なんとでもなるもんね。

 なので「必要なんだ」という前提で。

 当方、win7 + 2003 という環境がないので、そこでどうなるかはわからないけど
 XP + 2003 および Win7 + 2010 双方で、以下のコードで問題なく同じ結果になるので、
 Win7 + 2010 では、本来、不要であっても、コードとしては、共通のコードでいけるのでは?

 Sub Test()
    ActiveWorkbook.Activate
    MsgBox TypeName(Selection)
    MsgBox ActiveCell.Address
 End Sub

 (ぶらっと)

皆さん レスありがとうございます。
皆さんのコードを試すと、うまくいくので解決と思っていたのですが、
どうやらうまくいく場合と行かない場合があるようです。

というこで動作が安定していない気がします。
バージョンも色々あって、動作が不安定なので、何がうまくいって、何がいかないのかもわからなくなった状況です。

また、最初に手動でグラフを選んだ場合とコードから選んだ時では、挙動が違う気もします。
また、明日確認して、報告します。

ドカ


office2003について

朝、落ち着いて確認してみました。

下記コードは、動きます。

 Sub test()
  ActiveWorkbook.Activate ’←これ追加で解決しました。

    MsgBox ActiveCell.Address
    MsgBox TypeName(Selection)
 End Sub

手動でグラフを選んでおくと、グラフの周りに■のマークが付きます。
しかし、上のコードを動かすと、周りのマークが□に変わります。
この状態で、上のマクロを動かすとエラーになります。
これに気づかなかったため、動いたり動かなかったりすると勘違いしていました。
ということで、これでセルの情報を取得することは出来そうです。

一方で今度はグラフを手動で選んだ状態に戻したいので(■マークにしたい)、上のマクロを動かした後に、手動でグラフを選んだ状態に戻すコードを教えてください。

よろしくお願いいたします。

office2010は、ActiveWorkbook.Activateが無くても動きました。

(補足情報)
マクロの作動中に、セルを選んだり、グラフを選んだりするのは、実際やって見て大変面倒でした。
1回走らせるのなら良いのですが、その結果をみてデータの修正をするなど、何度も走らせるのは面倒です。
そのために、最初にこのセルのデータを使って、このグラフを修正しろと選んでおいて、マクロを動かようにしたいのです。

また、決まったフォームのエクセルファイルではなくても動くように、セルとグラフを手動で選択するようにしています。

ドカ


 > 一方で今度はグラフを手動で選んだ状態に戻したいので

 釈迦に説法ですが、グラフは選択しなくても処理できます。
 選択してから処理しようとするからムツカシクなってるのでは?

 (kanabun)


 >選択してから処理しようとするからムツカシクなってるのでは?
 多分これが1番の問題かと思いますけど
 データにしたいセル範囲を選んでコピー。
 グラフに貼り付け。
 の手動で良いんじゃないかと??
 BJ

釈迦じゃないので質問してま〜す。

ということで、以下のように対処して問題なく動くようになりました。
変更前)With Selection

変更後)With ActiveChart.SeriesCollection(1).Points(n)

(う〜ん、でも、どうすれば、もう一度選択した状態に戻せるのでしょうかねぇ)

ドカ


 私も含めて、皆さんが【暗に】指摘というか心配(?)している「選択」。
 この必要性があってのことだろうけど、その必要性というか理由を説明すれば、皆さん、その方向で
 回答をアップしてくれると思う。

 それがないので、【だからSelect/Selectionを使わなきゃいいでしょ?】という回答以上のことを
 一生懸命考える気力がわいてこないねぇ。

 (ぶらっと)

う〜ん。流れがおかしくなってきました。

セルとグラフを最初に選択しておく理由は、4つ位前に書きました。
そして、オリジナルのコードがselectinを使っていたのと、私にselectionを使わないコードの知識がないため、選択する方法をお聞きしました。

現時点では、不具合は解決しましたので、選択する必要はありません。
最後の質問で、選択状態に戻したいと言っているのは、単なる興味本位です。

ドカ


 マクロ以前に選択するのは 「グラフの系列のどれか」だけにしておいて、
 マクロ実行途中で、セルを選択させてもいいのでは?
 たとえば↓

 Sub try1() 
    '■系列を選択しておく
    If TypeName(Selection) <> "Series" Then Exit Sub

    'セル範囲を指定
      Dim r As Range
      On Error Resume Next
      Set r = Application.InputBox("セル範囲を指定してください", Type:=8)
      On Error GoTo 0
      If r Is Nothing Then Exit Sub

    '指定範囲で 系列データを更新
      Selection.Values = r.Value
 End Sub
 (kanabun)


kanabunさんへ

提示頂いたコードのようにやっていたのを、あえて、最初にセルを選択しておく方法に変更したので、今回の質問に至っています。

その他回答いただいた皆さんへ

グラフに関する知識がないので、皆さんに色々ご迷惑をおかけしました。

一旦、解決・終了とさせていただきたいと思います。

(ドカ)


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.