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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Minecraft 統合版(PC)の描画距...
-
エクセルでガンチャートを作成...
-
MFCでOnPaintのタイミング
-
NVIDIAのシェーダーキャッシュ
-
InvalidateRectの使い方について
-
PCで「使用可能な場合はグラフ...
-
google Colabでmatplotlibの描...
-
ドローソフトのダブルバッファ...
-
Androidのスマホについての質問...
-
word
-
OpenCV処理画像をpictureBoxへ。
-
ボタン形のラベル
-
OpenGLのテクスチャマッピング
-
TextBoxに文字を書いても表示さ...
-
Wave波形の描画について
-
OneNote 2010 文字と描画がずれる
-
うまく表示されない。(API・C言...
-
グラフの交点の求め方(Excel)
-
エクセルで作った新しいウイン...
-
コントロールの書式設定で、“コ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6,リストボックスの特定行の...
-
Minecraft 統合版(PC)の描画距...
-
[VB.net] DataGridViewの列ヘッ...
-
MFCでOnPaintのタイミング
-
TextBoxに文字を書いても表示さ...
-
word
-
NVIDIAのシェーダーキャッシュ
-
InvalidateRectの使い方について
-
UpdateData( FALSE); による文...
-
CStaticコントロールの静的イメ...
-
CScrollViewの使用方法について
-
VB.netでのライン描画方法がわ...
-
VBAにGDI+を参照させる方法
-
この二つの違いは・・・?
-
Form1 Load で実行されない。
-
OneNote 2010 文字と描画がずれる
-
OnDrawが呼び出されません
-
C# ラバーバンドの描画を快適に...
-
コンボボックスの高さを変えたい
-
panelのスクロール表示について
おすすめ情報