![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
http://oshiete.goo.ne.jp/qa/6535908.html
http://oshiete.goo.ne.jp/qa/6541470.html
タイトルと質問内容は関係があるようでないような感じです。
質問1、Shapeオブジェクトで真円を描くには?
質問2、Shapeオブジェクトを目的の位置に配置するには?
<質問1の理由>
Shapeオブジェクトで0.7mmの円を描かせるとH=0.72、W=0.70の円を描くことがあります。
こういう誤描画は、一度に描く円の数に比例して増加しています。
<質問2の理由>
自動化を更に推し進めて配置座標もプログラムで計算・指定。
ですが、どうにも指定した座標(top=320,left=210 etc.)通りに配置されません。
<質問1の原因と対策>
2、3個ですと真円を描くが30個程度になると保証の限りではありません。
ということは、作業量が誤描画の引き金かと推察。
対策1、一つ円を描画したら次の描画まで0.1秒だけプログラムの実行を停止する。
対策2、円を描画しても画面を更新しないように設定する。
<質問2の原因と対策>
シートの表示スケールを飼えると描く位置も変化しているように思います。
対策1、シートの表示スケール100%を基準にする。
※ここら辺りはプログラムの問題ではなく経験知に属するかと思います。
※皆様の1、2への対応要領を教えてもらえれば幸いです。
No.1ベストアンサー
- 回答日時:
>0.7mm
0.7cmですか?
単純な描画だけの場合、こちらの環境では再現しません。(Zoom100%)
Sub test()
Dim L As Single
Dim T As Single
Dim W As Single
Dim i As Long
L = 20
T = 20
W = 19.84252 '0.7cmに該当するポイント
With ActiveSheet.Shapes
For i = 1 To 100
.AddShape msoShapeOval, L, T * i, W, W
Next
End With
End Sub
1つの対策としては、Duplicateで複製するのもありかもしれません。
Sub test2()
Dim s As Shape
Dim L As Single
Dim T As Single
Dim W As Single
Dim i As Long
L = 40
T = 20
W = 19.84252
With ActiveSheet.Shapes
Set s = .AddShape(msoShapeOval, L, T, W, W)
For i = 2 To 100
s.Duplicate.Top = T * i
Next
End With
Set s = Nothing
End Sub
質問2について、ver2007ではZoomによって描画位置がずれるという話がありました。
Zoom100%での作成をおすすめします。
また、MicrosoftUpdateで最新パッチをあてれば解消されるかとも思います。
<質問1について>
>こちらの環境では再現しません。
との回答で、当方との差異を考えてみました。
・円を描画するだけではなく当該のデータを転写していること。
この場合、シートの更新をオフにし描画間隔を0.2秒にすると誤描画は回避可能。
でも、これじゃーチト待機があって難点。
そこで、描画と当該のデータの転写の同時実行を中止、
描画のみ行った後にデータの転写を行って回答者の環境に酷似させてみました。
結果、見事に、誤描画はシートの更新をオフにする限りで皆無となりました。
感謝感激です。
<質問2について>
ズーム100%の場合、全く問題はありません。
以上のように問題は悉く解決しました。
完全自動作画を実現した結果、作業時間は60分から6分へと大幅に短縮されました。
ただし、現状では、自動化したパターンは半分のみです。
が、残りの半分も、アイデア次第では完全自動作画が可能だと推察します。
昨年は、半年間、Javaのプログラミングに熱中。
その後、プログラミングから遠ざかって一年。
久しぶりに「よっしゃー」の日々でした。
JavaからVBAに感覚を戻すのに少し苦労しました。
が、回答者のお陰で無事に目的を達成することが出来ました。
まあ、これが還暦を過ぎた私の最後のプログラミングかも知れません。
そういう意味では、お付き合いに本当に感謝しています。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
word
-
[VB.net] DataGridViewの列ヘッ...
-
TextBoxに文字を書いても表示さ...
-
MFCでOnPaintのタイミング
-
C# ラバーバンドの描画を快適に...
-
OnDrawが呼び出されません
-
この二つの違いは・・・?
-
MFC 6.0 VC++ で、処理が重くな...
-
NVIDIAのシェーダーキャッシュ
-
テクスチャに半透明ポリゴンを...
-
CStaticコントロールの静的イメ...
-
(新)EXCEL VBA コードをズバリで
-
MFC ビットマップ描画で残像が残る
-
InvalidateRectの使い方について
-
ビデオのSLIについて
-
vb.netでテキストボックス内の...
-
コンボボックスの高さを変えたい
-
FlexGridの一部のみ表示を更新...
-
エディットコントロールを再描...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
word
-
NVIDIAのシェーダーキャッシュ
-
MFCでOnPaintのタイミング
-
Minecraft 統合版(PC)の描画距...
-
google Colabでmatplotlibの描...
-
TextBoxに文字を書いても表示さ...
-
[VB.net] DataGridViewの列ヘッ...
-
UpdateData( FALSE); による文...
-
OneNote 2010 文字と描画がずれる
-
Labelの文字をスクロールする際...
-
InvalidateRectの使い方について
-
VB.netでのライン描画方法がわ...
-
CStaticコントロールの静的イメ...
-
VC++プログラムをつかったBMP画...
-
WM_SIZEとWM_SIZINGの違い (Win...
-
エクセルでガンチャートを作成...
-
c言語を使いダイアログにbmpを...
-
WM_PAINT
-
MFCのタイマーのつかい方を教え...
おすすめ情報