アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBA初心者です。
ワークシート上にグラフを作成した後(例えば「グラフ1」とします)、B列の幅を作成したグラフの幅と同じに設定するには、どのように記述すればよいのしょうか?

Columns("B").ColumnWidth = ActiveSheet.Shapes("グラフ1").Width

Columns("B").Width = ActiveSheet.Shapes("グラフ1").Width

Columns("B").ColumnWidth = ActiveSheet.Shapes("グラフ1").ColumnWidth

どれもうまくいきませんでした。よろしくお願いします。

A 回答 (2件)

こんにちは。

Wendy02です。

>ColumnWidthのヘルプによると
>解説
>・
>とのことです。

その書き方は、かなり手厳しく感じました。ヘルプで調べてから回答を書きなさい、ということですね。私の書き方がまずかったようですね。失礼しました。

 ただ、そのヘルプの内容は、若干、意味が曖昧です。仮に等幅フォントであっても、本当に、1文字の積み重ねが、列幅になるとお思いになっているのでしたら、それは違います。セル幅は、PIXEL値(Long型)に丸められて、それを逆算して、例えば「8.38」 という数字が出てきているのであって、決して、1文字のフォントの長さが、列幅にそのまま反映しているわけではありません。ロジックでいうと、「AはBによって作られているが、BはAには等しからず」ということになりますね。

変換率の出し方は、以下のようになりますが、Constの定数はやめ、ALPHAを変数にして、以下のようにすればよいはずです。

Dim Alpha As Double
Alpha = ActiveSheet.Cells(256).Width / ActiveSheet.StandardWidth

しょせん、理論値では不可能(だと思う)ですから、影響のないセルに対して、実測値を元に、変換値を出したにすぎませんが。

これで、問題なくできるはずです。
    • good
    • 0
この回答へのお礼

>その書き方は、かなり手厳しく感じました。ヘルプで調べてから回答を書きなさい、ということですね。
本当に、本当に、本当にすみませんでした。ただ、その様なつもりで書いたのではないことはご理解下さい。回答を頂いた後、自分なりに調べて、単位の意味が分かったので、報告のつもりで書きました。こちらは助けてもらっている立場ですので、丁寧に回答して頂きとても感謝しています。思慮の足りない書き方をして、本当に申し訳ありませんでした。
アドバイスの通り記述して、目的とする結果が得られることを確認しました。本当にありがとうございました。

お礼日時:2006/03/02 13:18

こんばんは。



コードのロジックとしては、間違っていませんね。先ほどからやってみましたが、どうも単位が違うようなのです。その単位が何かわかりませんでした。それで、一応、実測値として以下に入れました。グラフオブジェクトを、セル幅に合わせるほうは入れられるのですが、グラフオブジェクトの幅をセル幅に合わせるほうは出来ないようですね。うまくいかないようでしたら、そのALPHAの数値を変えてみてください。


Sub GraphLocating()
  Dim myColumnWidth As Double
  'この定数は、実測値
  Const ALPHA As Double = 6
  Application.ScreenUpdating = False
  With ActiveSheet.ChartObjects(1)
   ActiveSheet.Columns("B").ColumnWidth = .Width / ALPHA
   .Left = ActiveSheet.Range("B5").Left
   .Width = ActiveSheet.Range("B5").Width
  End With
  Application.ScreenUpdating = True
End Sub
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。ColumnWidthのヘルプによると

解説
列幅の単位は、標準スタイルの 1 文字分の幅に相当します。プロポーショナル フォントでは、数字の 0 の幅が列幅の単位になります。列幅をポイント単位で取得するには、Width プロパティを使ってください。

とのことです。数字の0の幅(ALPHA)を取得する方法は、分かりますでしょうか?

お礼日時:2006/03/02 09:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!