Excel VBA質問箱 IV

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

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


12545 / 13646 ツリー ←次へ | 前へ→

【9967】セルの幅の単位とオートシェイプのサイズの単位 B_BOSS 03/12/25(木) 19:32 質問
【9968】Re:セルの幅の単位とオートシェイプのサイズ... ichinose 03/12/25(木) 20:01 回答
【9982】Re:セルの幅の単位とオートシェイプのサイズ... B_BOSS 03/12/26(金) 18:35 質問
【9983】Re:セルの幅の単位とオートシェイプのサイズ... Kein 03/12/26(金) 20:28 発言
【9992】Re:セルの幅の単位とオートシェイプのサイズ... ichinose 03/12/27(土) 0:47 回答
【9995】Re:セルの幅の単位とオートシェイプのサイズ... B-BOSS 03/12/27(土) 18:16 お礼

【9967】セルの幅の単位とオートシェイプのサイズ...
質問  B_BOSS  - 03/12/25(木) 19:32 -

引用なし
パスワード
    ワークシート上のセルの幅と、オートシェイプをVBAで作成しようとすると、
 サイズを指定する数値とセルの幅を指定する数値が合いません。
 セルの幅、ピクセルで表示されますが、下のコードのオートシェイプのサイズを指定する
 数値は単位は何になるのでしょうか?

 セルの罫線を利用してグラフを作成したいのですが・・・?
 罫線とオートシェイプのサイズを合わせる方法ってありますか?


  Shapes.AddShape(msoShapeRectangle, 200, 100, 50, 5).Select

【9968】Re:セルの幅の単位とオートシェイプのサイ...
回答  ichinose  - 03/12/25(木) 20:01 -

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

> ワークシート上のセルの幅と、オートシェイプをVBAで作成しようとすると、
> サイズを指定する数値とセルの幅を指定する数値が合いません。
> セルの幅、ピクセルで表示されますが、下のコードのオートシェイプのサイズを指定する
> 数値は単位は何になるのでしょうか?
>
> セルの罫線を利用してグラフを作成したいのですが・・・?
> 罫線とオートシェイプのサイズを合わせる方法ってありますか?
>  Shapes.AddShape(msoShapeRectangle, 200, 100, 50, 5).Select
オートシェイプをセルの大きさに合わせる方法が分かればよいということでしょうか?
'=======================================================
Sub test()
  With ActiveCell
    ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
     .Left, .Top, .Width, .Height).Select
    End With
End Sub

↑は、アクティブセルの大きさに合わせてオートシェイプを作成しています。

【9982】Re:セルの幅の単位とオートシェイプのサイ...
質問  B_BOSS  - 03/12/26(金) 18:35 -

引用なし
パスワード
   回答ありがとうございまいた。
私の質問が判り難くて申し訳ありません。
 実はエクセルでガントチャートが造りたいのです。

セルの列をガントチャートの線とした時、1マスが10とした時に
"3"や"7"といった数値をオートシェイプで描きたいのです。

オートシェイプで四角を書こうとしたのですが、オートシェイプをあらわす数値は
ピクセルでもセンチでも内容です。

オートシェイプでサイズをあらわす数値は、ピクセル(又はcm)に換算すると
いくつになるのでしょうか?

それがわかれば、罫線を利用したグラフ(ガントチャート)が造れると
思うのです。


▼ichinose さん:
>▼B_BOSS さん:
>こんばんは。
>
>> ワークシート上のセルの幅と、オートシェイプをVBAで作成しようとすると、
>> サイズを指定する数値とセルの幅を指定する数値が合いません。
>> セルの幅、ピクセルで表示されますが、下のコードのオートシェイプのサイズを指定する
>> 数値は単位は何になるのでしょうか?
>>
>> セルの罫線を利用してグラフを作成したいのですが・・・?
>> 罫線とオートシェイプのサイズを合わせる方法ってありますか?
>>  Shapes.AddShape(msoShapeRectangle, 200, 100, 50, 5).Select
>オートシェイプをセルの大きさに合わせる方法が分かればよいということでしょうか?
>'=======================================================
>Sub test()
>  With ActiveCell
>    ActiveSheet.Shapes.AddShape(msoShapeRectangle, _
>     .Left, .Top, .Width, .Height).Select
>    End With
>End Sub
>
>↑は、アクティブセルの大きさに合わせてオートシェイプを作成しています。

【9983】Re:セルの幅の単位とオートシェイプのサイ...
発言  Kein  - 03/12/26(金) 20:28 -

引用なし
パスワード
   苦労してエクセルで作るより↓このようなフリーソフトを使わせてもらった方が
いいのでは ?
http://www4.ocn.ne.jp/~izu1/software/gunsuke.htm

【9992】Re:セルの幅の単位とオートシェイプのサイ...
回答  ichinose  - 03/12/27(土) 0:47 -

引用なし
パスワード
   ▼B_BOSS さん:
こんばんは。
以下に示すコードを標準モジュールに貼り付けて実行してみて下さい。
対象は、アクティブシートです。
尚、アクティブシートの次のシート(右シート)を作業シートとして
使っていますから、フリーにしといてください。
'===================================================================
Private st_col
Private st_point
Private myscale
'===================================================================
Sub main()
  With ActiveSheet
    Call open_scale(3, 10, 10)
    .Columns("a:b").ColumnWidth = 5
    .Columns("c:u").ColumnWidth = 10
    .Range("a1:a5").Value = Application.Transpose(Array("開始位置", 4, 28, 45, 60))
    .Range("b1:b5").Value = Application.Transpose(Array("サイズ", 20, 10, 7, 5))
    For idx = 2 To 5
     Call mk_rectangle(.Rows(2), .Cells(idx, 1).Value, .Cells(idx, 2).Value)
     Next
    End With
End Sub
'================================================================
Sub open_scale(開始列, 開始列までのセル巾, 目盛り巾)
  st_col = 開始列
  st_point = 開始列までのセル巾
  myscale = 目盛り巾
End Sub
'================================================================
Function mk_rectangle(rng As Range, 開始, 巾, Optional sht As Worksheet = Nothing) As Shape
  
  If sht Is Nothing Then Set sht = ActiveSheet
  cnv_left = get_point(開始 + st_point, sht.Next)
  cnv_width = get_point(巾, sht.Next)
  With rng
    Set mk_rectangle = sht.Shapes.AddShape(msoShapeRectangle, _
     cnv_left + 3.75 * (st_col - 1 + Int((開始 - 0.1) / myscale)), .Top, cnv_width + 3.75 * Int((巾 - 0.1) / myscale), .Height)
    End With
End Function
'=====================================================
Function get_point(セル幅, sht As Worksheet)
  With sht
    .Cells(1, 1).ColumnWidth = セル幅
    get_point = .Cells(1, 1).Width
   End With
End Function


これで、プロシジャーmainを実行してみて下さい。
セルA2〜A5が開始位置のデータ、セルB2〜B5をサイズデータ
として、四角が作られるはずですが・・・。
確認してみて下さい。

【9995】Re:セルの幅の単位とオートシェイプのサイ...
お礼  B-BOSS  - 03/12/27(土) 18:16 -

引用なし
パスワード
   有難う御座いました。
私がやろうとしている事に対し非常に参考になりそうです。

 1文1文、理解して行きます。
ありがとうございました。

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