• ベストアンサー

オートシェイプがずれる

エクセルで、選択した項目によって○をつけるコードを書いたのですが、 自分のパソコン(エクセル2003)では、思ったところにいくのですが、 知人のパソコン(エクセル2002,SP3)ではずれて表示されます。 ActiveSheet.Shapes("xlBunsyo").Select Selection.ShapeRange.Left = 437 Selection.ShapeRange.Top = 18 このようなコードなのですが、確認のため違うパソコン(エクセル2002,SP3)で確認してもうまく行きます。 知人の仕事場ではエクセルを使ってなにかシステムを使用している用のですが、知人が離れているため現象を確認できません。 知人も他のパソコンで確認したところ8台中1台はうまく行ったようです。 オートシェイプをしてするにあたり、何か他の設定があるのでしょうか? ご教授ください。 お願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • izmlz
  • ベストアンサー率55% (67/120)
回答No.3

 ずれてしまうのは、TopとLeftを絶対ポイントで設定しているためだと思います。その理由については↓などをご参考にしてみてください。 別のコンピュータでファイルを開くと画面表示や印刷結果が異なる場合の注意事項 http://support.microsoft.com/kb/881233/ja  従って、keirikaさんご提案のように、絶対ポイントではなくセルの位置にオートシェイプを合わせる方法が私も良いんじゃないかと思います。Top、Leftに加えて、WidthとHeightもセル範囲にあわせるマクロの例は↓です。 Sub test()  Dim Rng As Range  Dim myShape As Shape    Set Rng = Range("I2") '選択した項目によって○を表示させるセルを設定。Range("I2:J4")のようなセル範囲でもOK  Set myShape = ActiveSheet.Shapes("xlBunsyo")    With myShape   .Left = Rng.Left   .Top = Rng.Top   .Width = Rng.Width   .Height = Rng.Height  End With    Set Rng = Nothing  Set myShape = Nothing End Sub  なお、alatoさんのご質問を読んで、私には、実情とその問題の原因、解決策などは上のように、それほど苦労することなく思い浮かびました。(もし、はずしていたら申し訳ありませんが)「質問として無茶」などとは全く思いませんでした。

参考URL:
http://support.microsoft.com/kb/881233/ja
alato
質問者

お礼

早速のご回答ありがとうございます。 今回の原因が究明できました。 画面のプロパティでフォントの大きさが違っておりました。 自分のが小さいフォント96dpi,相手のが大きいフォント120dpiでした。 ご教授いただいた方法でうまくいきました。 ありがとうございました。 最後のフォローもありがとうございました!

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

この質問は実情を十分表現していない。質問として無茶。 全体の流れはどうなっているのか。 どういう風に何をしたいのか。 (1)>選択した項目によって○をつけるコードを書いたのですが 丸はどこに入れるのか。セルか図形の上かその他か。セルでもクリックするとそのセルの位置に丸を出すのか。 セルの画面上の位置は列幅、行高を変えると丸の位置は相対的に変わるぐらい常識だ。 セル位置と○は関連付けるコードは書いているのか。 (2)質問のコードでは丸を描く部分のコードが出てないが。 (3)図形を選択したというイベントを考えているのか、その他か。 (4)>オートシェイプをしてするにあたり ーーー 不都合の原因を考える(読者・回答者に考えてもらう)、指摘することは、非常に高等な、困難な難しいことなんだ。 このつもりで、十分な状況情報を開示しないと出来ませんよ。 質問者はこのことで頭がいっぱいでも、読者にはコードもやりたいことは判らない。読者の状況が読めてない。

alato
質問者

お礼

アドバイスありがとうございます。 自分の知識が乏しいために要領を得た質問ができずに申し訳ありません。 理解していないせいか、どういうふうに質問してよろしいかどうかさえもわかりません。 とりあえず、解決できましたので、今後の質問の参考にさせていただきます。 ありがとうございました。

  • keirika
  • ベストアンサー率42% (279/658)
回答No.1

ActiveSheet.Shapes("xlBunsyo").Select Selection.ShapeRange.Left = Range("I2").Left Selection.ShapeRange.Top = Range("I2").Top ではどうでしょうか。

alato
質問者

お礼

早速のご回答ありがとうございます。 セルの情報を使うのですね! そんな方法があったとは知りませんでした。 勉強になります。 これを参考に作り直させていただきます。