Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


11261 / 13644 ツリー ←次へ | 前へ→

【17026】グラフのサイズを一定にするマクロ kT/q 04/8/19(木) 15:12 質問[未読]
【17034】Re:グラフのサイズを一定にするマクロ ni 04/8/20(金) 8:27 回答[未読]
【17038】Re:グラフのサイズを一定にするマクロ Jaka 04/8/20(金) 9:01 回答[未読]
【17040】Re:グラフのサイズを一定にするマクロ kT/q 04/8/20(金) 9:11 お礼[未読]
【17049】グラフの選択って・・・・ つん 04/8/20(金) 14:07 質問[未読]
【17051】でけました(^^; つん 04/8/20(金) 15:06 お礼[未読]
【17052】Re:グラフの選択って・・・・ Jaka 04/8/20(金) 15:07 発言[未読]
【17053】Re:グラフの選択って・・・・ つん 04/8/20(金) 15:12 お礼[未読]
【17054】Re:グラフの選択って・・・・ Jaka 04/8/20(金) 15:42 発言[未読]
【17055】Re:グラフの選択って・・・・ つん 04/8/20(金) 15:50 発言[未読]
【17056】Re:グラフの選択って・・・・ Jaka 04/8/20(金) 15:59 発言[未読]
【17057】Re:グラフの選択って・・・・ Jaka 04/8/20(金) 16:02 発言[未読]
【17058】Re:グラフの選択って・・・・ つん 04/8/20(金) 16:10 発言[未読]
【17061】Re:グラフの選択って・・・・ Jaka 04/8/20(金) 16:58 発言[未読]
【17063】コントロールは全て「Range」!? つん 04/8/20(金) 17:07 発言[未読]
【17079】Re:コントロールは全て「Range」!? bykin 04/8/20(金) 23:54 発言[未読]
【17099】Re:コントロールは全て「Range」!? つん 04/8/22(日) 12:55 発言[未読]
【17100】Re:コントロールは全て「Range」!? bykin 04/8/22(日) 14:06 発言[未読]

【17026】グラフのサイズを一定にするマクロ
質問  kT/q  - 04/8/19(木) 15:12 -

引用なし
パスワード
   度々すみません。マクロを使ってグラフを描画するところまでは
できたのですが,その出来上がったグラフのサイズの変更をVBA
を使って行いたいと思っています。当方,昨日からVBAの勉強を
始めたばかりで,十分に理解できていません。そこで,マクロの
記録を使って作っていますが,汎用性に欠けます。
できたプログラムは,

Sub グラフのサイズ変更()
  ActiveChart.Axes(xlValue).Select
  ActiveChart.ChartArea.Select
  ActiveSheet.Shapes("グラフ 19").ScaleWidth 1.03, msoFalse, msoScaleFromBottomRight
  ActiveSheet.Shapes("グラフ 19").ScaleHeight 1.02, msoFalse, msoScaleFromBottomRight
  ActiveSheet.Shapes("グラフ 19").ScaleWidth 0.45, msoFalse, msoScaleFromTopLeft
  ActiveSheet.Shapes("グラフ 19").ScaleHeight 0.53, msoFalse, msoScaleFromTopLeft
End Sub

です。グラフ19で固定されているため,使い回しができません。
現在アクティブなグラフを自動で選択できませんか?

また,ScaleWidthやScaleHeightのようにスケーリングによって
サイズを決定するのではなく,WidthやHeightを直接与えることは
できませんか?

よろしくご教授下さい。

【17034】Re:グラフのサイズを一定にするマクロ
回答  ni  - 04/8/20(金) 8:27 -

引用なし
パスワード
   こんにちは

ActiveChart の .Width や、 .Height プロパティを変更してやればよろしいかと思います。

ActiveChart.Width=100
ActiveChart.Height=80

【17038】Re:グラフのサイズを一定にするマクロ
回答  Jaka  - 04/8/20(金) 9:01 -

引用なし
パスワード
   If TypeName(Selection) <> "ChartObject" Then
  MsgBox "グラフを選択してください。"
  End
End If
GrNm = Right(ActiveChart.Name, InStr(ActiveChart.Name, " ") - 1)
With ActiveSheet.ChartObjects(GrNm)
  .Height = 150
  .Width = 150
End With

【17040】Re:グラフのサイズを一定にするマクロ
お礼  kT/q  - 04/8/20(金) 9:11 -

引用なし
パスワード
   皆様,ご返答ありがとうございました。
考えた通りのことが実行できました。
感謝いたします。


▼Jaka さん:
>If TypeName(Selection) <> "ChartObject" Then
>  MsgBox "グラフを選択してください。"
>  End
>End If
>GrNm = Right(ActiveChart.Name, InStr(ActiveChart.Name, " ") - 1)
>With ActiveSheet.ChartObjects(GrNm)
>  .Height = 150
>  .Width = 150
>End With

【17049】グラフの選択って・・・・
質問  つん E-MAIL  - 04/8/20(金) 14:07 -

引用なし
パスワード
   こんにちは。

さっきから、自分でいろいろいろいろ試してたんですが、
どーしてもわからなかったので、お尋ねします。

グラフの選択ってどーやったら出来るんですか?

こちらの質問の件、私も考えていたんですが、わからず、
Jakaさんの解答で解決した!とのことで、早速試してみようと思いました。
・・・が、

>If TypeName(Selection) <> "ChartObject" Then
>  MsgBox "グラフを選択してください。"
>  End
>End If

グラフを選んでいるのにかかわらず、このIF文が通ってしまいます。
なんで?と思い、

 MsgBox TypeName(Selection)

を実行してみると、「ChartArea」が返ってきました。
確かに・・・選んでいるのは、グラフエリアです。
では、グラフそのもの?を選択するのはどうしたらいいんでしょう?

あんた、今頃そんなこと言うとるんかい!って言われそうな質問ですが・・・(>_<)
宜しくお願いします。

【17051】でけました(^^;
お礼  つん E-MAIL  - 04/8/20(金) 15:06 -

引用なし
パスワード
   図形のツールバーだして、「オブジェクトの選択」ボタンで
選択したらでけました。

どもども……お騒がせしました。
お恥ずかしい次第です(^^;

【17052】Re:グラフの選択って・・・・
発言  Jaka  - 04/8/20(金) 15:07 -

引用なし
パスワード
   こんにちは。

う〜ん。また難しいことを。
ところで、どこにグラフを作っていらっしゃるのでしょうか?
新しいシートって事は無いと思いますが、念のため。
これだとグラフシートになっちゃって、試したところ何とかエリア?とか数種でました。

作る時は、シート上に作って下さい。
「新しいシート」ではなく「オブジェク」の方を選んでください。

んでもって、たぶんデータが書かれてあるシート上に出来たグラフを選択してちょ。

これで解決すると思います。パハップス

>あんた、今頃そんなこと言うとるんかい!って言われそうな質問ですが・・・(>_<)
言ってもよろしいんでっしゃろか.....?v(^o^)v

【17053】Re:グラフの選択って・・・・
お礼  つん E-MAIL  - 04/8/20(金) 15:12 -

引用なし
パスワード
   Jaka さん。
いやはや、どもども(^^;

入れ違いになったようで・・・

>う〜ん。また難しいことを。
>ところで、どこにグラフを作っていらっしゃるのでしょうか?
>新しいシートって事は無いと思いますが、念のため。
>これだとグラフシートになっちゃって、試したところ何とかエリア?とか数種でました。
>作る時は、シート上に作って下さい。
>「新しいシート」ではなく「オブジェク」の方を選んでください。
>んでもって、たぶんデータが書かれてあるシート上に出来たグラフを選択してちょ。

いやー、この通りにしてたんですけどね(^^;
どうやって選択しても、「グラフエリア」しか選択出来ませんでした。
「オブジェクトの選択」をONにして、なんとか選択出来ました。
もしかして、通常の状態でも選択できるもんなんやろか?

>>あんた、今頃そんなこと言うとるんかい!って言われそうな質問ですが・・・(>_<)
>言ってもよろしいんでっしゃろか.....?v(^o^)v

言うてやってくださいませ……(>_<)
お返事ありがとうございました。

【17054】Re:グラフの選択って・・・・
発言  Jaka  - 04/8/20(金) 15:42 -

引用なし
パスワード
   こんにちは。

>「オブジェクトの選択」をONにして、なんとか選択出来ました。
>もしかして、通常の状態でも選択できるもんなんやろか?
う〜ん。
「オブジェクトの選択」をONにしてからだと、グラフ選択時にグラフの周りに白い四角が表示されますよね。
通常の選択時は、黒い四角形ですけど、この黒い四角形の状態でも大丈夫なはずなんですが...。

って、全く違うこと言ってますね!
もしかして通常の状態だと、全く選択できないって事ですか?
なぞだ!

【17055】Re:グラフの選択って・・・・
発言  つん E-MAIL  - 04/8/20(金) 15:50 -

引用なし
パスワード
   >う〜ん。
>「オブジェクトの選択」をONにしてからだと、グラフ選択時にグラフの周りに白い四角が表示されますよね。
>通常の選択時は、黒い四角形ですけど、この黒い四角形の状態でも大丈夫なはずなんですが...。

そうそう。
「オブジェクトの選択」をONにしてからだと、グラフの周りに白い四角…ちゅーか、
白い丸なの。
で、その状態だと、名前ボックスも「グラフ 1」とかになってて、
ああ、グラフが選択されてるな〜って感じなんだけど、

そうじゃないときは、Jakaさんのおっしゃる通り、黒い四角で、
名前ボックスは「グラフ エリア」なの。

>もしかして通常の状態だと、全く選択できないって事ですか?

そうなのだ!通常の状態でどーーーんだけ、頑張ってクリックしても、
黒い四角付き状態にしかならないのでありました。

>なぞだ!

おいらんとこ、何かが変なのかしらん?
Excel2002なんだけど・・・関係ない?

【17056】Re:グラフの選択って・・・・
発言  Jaka  - 04/8/20(金) 15:59 -

引用なし
パスワード
   ▼つん さん:
>そうなのだ!通常の状態でどーーーんだけ、頑張ってクリックしても、
>黒い四角付き状態にしかならないのでありました。
この黒い状態で、いいんです。

>>なぞだ!
>
>おいらんとこ、何かが変なのかしらん?
>Excel2002なんだけど・・・関係ない?

2002だと解りませんが、と言いたいところですが、単純につんさんの勘違いのような気がします。

【17057】Re:グラフの選択って・・・・
発言  Jaka  - 04/8/20(金) 16:02 -

引用なし
パスワード
   >この黒い状態で、いいんです。
と、言うより大丈夫です。

【17058】Re:グラフの選択って・・・・
発言  つん E-MAIL  - 04/8/20(金) 16:10 -

引用なし
パスワード
   Jaka さん
何度もお返事ありがとうございます。

>この黒い状態で、いいんです。
>2002だと解りませんが、と言いたいところですが、単純につんさんの勘違いのような気がします。

えー、そうでしょうか?
だって、黒い状態で、

  MsgBox TypeName(Selection)

を実行すると、「ChartObject」ではなくて、「ChartArea」が
表示されるんですよ?
白い状態だと、「ChartObject」になります。
今、隣のPC(2000)を借りて試してみたけど、同じだったなあ。
ちなみに、2000は白い四角でした(オブジェクトの選択をONにしたとき)

何か私が気付かない落とし穴でもあるんかなあ?

【17061】Re:グラフの選択って・・・・
発言  Jaka  - 04/8/20(金) 16:58 -

引用なし
パスワード
   解りました。
マクロの実行方法の違いによるものでした。

もしかしてグラフ選択後、VBエディタ上からマクロを実行していませんか?
もしくは、Alt + F8 かツール→マクロ→マクロから実行していませんか?
これだと「ChartArea」と表示されました。
なんかすごい不安定な要素ですねぇ!
コロッコロ変わって....。

シー上にフォームのボタン作ってマクロ登録後、そこから実行してみてね!
コントロールの方のボタンからだと、また変わるんだろうか?
なんか腑に落ちない...。

【17063】コントロールは全て「Range」!?
発言  つん E-MAIL  - 04/8/20(金) 17:07 -

引用なし
パスワード
   Jaka さん!

>もしかしてグラフ選択後、VBエディタ上からマクロを実行していませんか?

そうですそうです。そうやってました。

>シー上にフォームのボタン作ってマクロ登録後、そこから実行してみてね!

やってみました。
出来ました!
実行したあとは、黒い四角が、白い四角に変化してました。
うーーーん、なんか変な仕様?

>コントロールの方のボタンからだと、また変わるんだろうか?

これもやってみたら、なにを選択しても、「Range」が返ってきました。
グラフでも、他のシェイプでも、セルでも。
なんかすごく変・・・

実行する方法で、こんなに結果が変わるって、ちょっと(>_<)

>なんか腑に落ちない...。

私も・・・・

【17079】Re:コントロールは全て「Range」!?
発言  bykin  - 04/8/20(金) 23:54 -

引用なし
パスワード
   こんばんわ。

>>コントロールの方のボタンからだと、また変わるんだろうか?
>これもやってみたら、なにを選択しても、「Range」が返ってきました。

これはコマンドボタンのTakeFocusOnClickプロパティがTrueになってるから
みたいやね。
Falseにすれば"ChartObject"になります。

興味深い内容やったんで、いろいろ実験してみました。(2003で実験)

--------------------------------------------------------------------------
[準備]
1.グラフを1個配置したシートにコマンドボタンを2個配置する。
2.Commandbutton1(ボタン1)はTakeFocusOnClick=True(デフォルト)
  Commandbutton2(ボタン2)はFalseに設定する。
3.各ボタンにプロシージャは設定しない。
4.フォームツールバーのボタン(ボタン3)を1個配置し、下記マクロを
  登録する。
  Sub test()
    MsgBox TypeName(Selection)
  End Sub

[確認1]
1.グラフを選択(黒ハンドル)する。(=グラフコマンドバーが表示される)
 ↓
2.ボタン1をクリック。
 ↓
3.ボタン1にフォーカスが移り、グラフ選択が解除(=グラフコマンドバーが
  非表示となる)される。
 ↓
4.再度グラフを選択。
 ↓
5.最初の状態に戻る。

[確認2]
1.グラフを選択(黒ハンドル)する。(=グラフコマンドバーが表示される)
 ↓
2.ボタン2をクリック。
 ↓
3.ボタン2にはフォーカスは移らない。
  グラフの黒ハンドルは消えるが、グラフコマンドバーは表示されたまま。
  (ただし、一部のボタンは使えない)
 ↓
4.再度グラフを選択。
 ↓
5.グラフオブジェクトが選択状態になる。(白ハンドル)

--------------------------------------------------------------------------

で、最初の"Range"が表示される件について考えてみました。([確認1])
TakeFocusOnClick=Trueの状態で、コマンドボタンをクリックすると、
コマンドボタンにフォーカスが移り、グラフのSelect状態は解除されるけど、
コマンドボタンは編集モード以外では「選択」できへんですわなー
つまりSelectionが無い状態になってまいます。
こういう場合はSelectionは「RangeSelectionプロパティが参照してるセル範囲」
を返すってことやと考えればええように思います。
これは、グラフを選択した状態から
Private Sub CommandButton1_Click()
  On Error Resume Next
  MsgBox Selection.Address
End Sub
なんてことをやれば確認できます。

次に黒ハンドルが白ハンドルに変わってまう現象について考えてみました。
([確認2])
コマンドボタンを押すとグラフのSelect状態は一見解除されたように見えるけど、
実は解除されてないようです。
グラフコマンドバーは表示されたままやし、この状態でイミディエイトで
?TypeName(Selection) ってやったら、"ChartObject"が返りました。
せやから、この時点ですでにオブジェクト選択状態に変化してるという
ことやと思います。

フォームツールバーのボタンで実行したら
>実行したあとは、黒い四角が、白い四角に変化してました。
ってのは、上記確認2と同じパターンやね。
これもマクロを登録したボタンは「選択」できへん(クリックするとマクロを
実行するのみ)からなんとちゃうかな?

--------------------------------------------------------------------------
[確認3]
1.ボタン2に下記イベントマクロを設定する。
  Private Sub CommandButton2_Click()
    MsgBox TypeName(Selection)
  End Sub
 ↓
2.グラフを選択(黒ハンドル)する。(=グラフコマンドバーが表示される)
 ↓
3.ボタン2をクリック。
 ↓
4."ChartObject"と表示される。
 ↓
5.メッセージを消すと、確認2の3の状態になる。(一見選択対象が無い状態)

ちょっとわからんのは、フォームツールバーのボタンの場合は、マクロ終了後に
自動的にグラフオブジェクトの選択状態(白ハンドル)になるんやけど、
コマンドボタンの場合は一見選択対象が無い状態になってまうことです。

Private Sub CommandButton4_Click()
  MsgBox TypeName(Selection)
  Selection.Select
End Sub

ってやってもだめ。

Private Sub CommandButton4_Click()
  MsgBox TypeName(Selection)
  Selection.Activate
End Sub

にしたら、何故かChartArea選択状態(黒ハンドル)になってまいました・・・
なんだかわけわからんねー(^^;;

長文のごみレスですんまへーん。
ほな。

【17099】Re:コントロールは全て「Range」!?
発言  つん E-MAIL  - 04/8/22(日) 12:55 -

引用なし
パスワード
   bykinさん、こんにちは〜

>興味深い内容やったんで、いろいろ実験してみました。(2003で実験)

おお!すごーい!でございます(なんちゅー日本語^^;)
私も、やってみまいした。
といっても、bykinさんの実験を2002でそのまましただけだけど^^;
2002でも、同じ結果でした。
(97あたりですると違う結果が出るのかも?)

私は、TakeFocusOnClickというプロパティの存在も知りませんでしたわ^^;
ボタンを押したことによって、「選択しているもの」が変わっているなんて、思いつかなかったな。

「Selection」とか、「Activeナンタラ」に対して処理を行う時は、要注意ってことですかね?

VBAって訳わかんないことだらけだー(@_@)
bykinさん、ありがとうございました(^o^)ノ

【17100】Re:コントロールは全て「Range」!?
発言  bykin  - 04/8/22(日) 14:06 -

引用なし
パスワード
   つんはん、お元気?

>「Selection」とか、「Activeナンタラ」に対して処理を行う時は、要注意ってことですかね?

今何を選択しているのか?ってのは全部コードでやってる場合は把握できると思うけど、
コマンドボタンを使わせるとか、ユーザーの操作が入る場合は気ぃつけなあかんってことやろね。

で、ちょっと追加情報。

>ちょっとわからんのは、フォームツールバーのボタンの場合は、マクロ終了後に
>自動的にグラフオブジェクトの選択状態(白ハンドル)になるんやけど、
>コマンドボタンの場合は一見選択対象が無い状態になってまうことです。

の部分でっけど、ボタン2を押したときにフォームツールバーのボタン(ボタン3)の
実行結果(白ハンドル状態)と同じにするのは、↓こんなんでできるみたいです。

Private Sub CommandButton2_Click()
  MsgBox TypeName(Selection)
  With Selection
    ActiveWindow.RangeSelection.Select
    .Select
  End With
End Sub

ほな。

11261 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free