Excel VBA質問箱 IV

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

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


63349 / 76732 ←次へ | 前へ→

【17980】Re:3次元棒グラフをマクロで描くには 追伸
発言  ichinose  - 04/9/11(土) 22:05 -

引用なし
パスワード
   ▼カド さん:
こんばんは。

回答ありがとうございます。

>ずれるのは、高さ方向もですが、前面の幅の大きさが合わないですね。
>やっぱりちょっと私の手には負えないようです。
うーん、微妙なずれがあるみたいですねえ!!

このズレ、Adjustmentが上端にあるか左端にあるかで出てきているみたいです。

私がチェックした限りでは、

ActiveSheet.Shapes.AddShape(msoShapeCube, 50, 80, 20, 30)

の場合、Width<Heightと言う関係から、Adjustmentが上端

ActiveSheet.Shapes.AddShape(msoShapeCube, 50, 70 + 6, 20, 10)

の場合、Width>Heightと言う関係から、Adjustmentは左端

何回かサンプリングした結果、

Width<Heightの関係が成立した場合、Adjustmentが上端

それ以外の場合、Adjustmentは左端

となっていました(あくまでもサンプリングの結果ですが)。

この結果から考えると、Widthが20の場合、Heightは、16以上であれば、
Adjustmentは上端で統一できますよね?

他のには、
この3Dの長方形をShapeの組合せで作ってしまう方法ですが、
若干、Shapeのスケールが違いますが、以下のコードを試してみて下さい。
但し、あまり小さいと全部表示できません。

'==================================================================
Sub test()
  Call mk_graph_pt(ActiveSheet, 50, 80, 15, 30)
  Call mk_graph_pt(ActiveSheet, 50, 70, 15, 10)
End Sub
'======================================================================
Function mk_graph_pt(sht As Worksheet, x As Double, y As Double, w As Double, h As Double)
  Dim px(1 To 4) As Double
  Dim py(1 To 4) As Double
  Dim para1 As Shape
  Dim para2 As Shape
  Dim para3 As Shape
  Dim pi As Double '円周率
  Dim g_nm()
  pi = WorksheetFunction.pi()
  px(1) = x + w + w * 0.6 * Cos(4 / 5 * pi): py(1) = y + w * 0.6 * Sin(4 / 5 * pi)
  px(2) = x + w: py(2) = y
  px(3) = x + w: py(3) = y + h
  px(4) = x + w + w * 0.6 * Cos(4 / 5 * pi): py(4) = y + w * 0.6 * Sin(4 / 5 * pi) + h
  Set para1 = Mk_Parallelogram(sht, px(), py(), 22)
  px(1) = x: py(1) = y
  px(2) = x + w: py(2) = y
  px(3) = x + w + w * 0.6 * Cos(4 / 5 * pi): py(3) = y + w * 0.6 * Sin(4 / 5 * pi)
  px(4) = x + w * 0.6 * Cos(4 / 5 * pi): py(4) = y + w * 0.6 * Sin(4 / 5 * pi)
  Set para2 = Mk_Parallelogram(sht, px(), py())
  Set para3 = sht.Shapes.AddShape(msoShapeRectangle, x + w * 0.6 * Cos(4 / 5 * pi), y + w * 0.6 * Sin(4 / 5 * pi), w, h)
  g_nm() = Array(para1.Name, para2.Name, para3.Name)
  Set mk_graph_pt = sht.Shapes.Range(g_nm()).Group
End Function
'======================================================================
Function Mk_Parallelogram(sht As Worksheet, p_x() As Double, p_y() As Double, Optional cl As Long = 9) As Shape
  Dim para As Shape '四辺形のShapeオブジェクト
  With ActiveSheet.Shapes.BuildFreeform(msoEditingAuto, p_x(1), p_y(1))
   For idx = 2 To 4
     .AddNodes msoSegmentLine, msoEditingAuto, p_x(idx), p_y(idx)
     Next idx
   .AddNodes msoSegmentLine, msoEditingAuto, p_x(1), p_y(1)
   Set Mk_Parallelogram = .ConvertToShape
   With Mk_Parallelogram
      .Fill.ForeColor.SchemeColor = cl
      .Fill.Visible = msoTrue
      .Fill.Solid
      End With
   End With
End Function

高さの調整は、単純で上記のコードの方がよいと思いますが・・・。

まっ、試してみて下さい。

2 hits

【17918】3次元棒グラフをマクロで描くには カド 04/9/10(金) 12:32 質問
【17919】Re:3次元棒グラフをマクロで描くには IROC 04/9/10(金) 13:01 回答
【17948】Re:3次元棒グラフをマクロで描くには カド 04/9/10(金) 20:52 お礼
【17941】Re:3次元棒グラフをマクロで描くには ichinose 04/9/10(金) 18:24 発言
【17962】Re:3次元棒グラフをマクロで描くには カド 04/9/11(土) 9:36 お礼
【17963】Re:3次元棒グラフをマクロで描くには ichinose 04/9/11(土) 10:42 発言
【17964】Re:3次元棒グラフをマクロで描くには 追伸 ichinose 04/9/11(土) 10:48 発言
【17969】Re:3次元棒グラフをマクロで描くには 追伸 カド 04/9/11(土) 17:06 お礼
【17980】Re:3次元棒グラフをマクロで描くには 追伸 ichinose 04/9/11(土) 22:05 発言
【17987】Re:3次元棒グラフをマクロで描くには ち... ichinose 04/9/12(日) 0:44 発言
【18061】Re:3次元棒グラフをマクロで描くには ち... カド 04/9/14(火) 9:46 お礼
【18094】Re:3次元棒グラフをマクロで描くには ち... ichinose 04/9/15(水) 7:34 発言
【18105】Re:3次元棒グラフをマクロで描くには ち... カド 04/9/15(水) 13:46 お礼
【18107】Re:3次元棒グラフをマクロで描くには ち... カド 04/9/15(水) 16:55 お礼
【18108】Re:3次元棒グラフをマクロで描くには ち... カド 04/9/15(水) 17:54 お礼

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