プロが教える店舗&オフィスのセキュリティ対策術

ExcelVBAにオートシェイプを使っています。ダブルクリックするとセル内の中にオートシェイプが書けるようになっています。ここまでは良いのですがダブルクリックしてから少し位置がずれることがあります。(VBA作成者と操作者が異なる為)すでにセル内でダブルクリックした位置が少しずれている場合に元のセル内にオートシェイプを戻す為にはどの様にVBAが考えられますか?(オートシェイプの位置とセル位置を使って情報の分析をしています)。何卒ご教示お願いします。

質問者からの補足コメント

  • へこむわー

    オートシェイプの数がすごい量なので自動調整ができると、とても助かります。何卒よろしくお願いします。

      補足日時:2023/08/25 23:24
  • うーん・・・

    Sub テスト()

    Dim i As Long

    For i = 1 To Worksheets("テスト").Shapes.Count

    Worksheets("テスト").Cells(i, 1).Value = Worksheets("テスト").Shapes(i).TopLeftCell.Address

    Worksheets("テスト").Cells(i, 2).Value = Worksheets("テスト").Shapes(i).BottomRightCell.Address

    Next i

    End Sub

    No.1の回答に寄せられた補足コメントです。 補足日時:2023/08/27 20:14
  • うーん・・・

    Sub テスト2()

    Dim i As String
    Dim j As String
    Dim pos As Range
    Dim row As Long

    For row = 1 To 2

    i = Worksheets("テスト").Cells(row, 1).Value
    j = Worksheets("テスト").Cells(row, 2).Value


    Set pos = Application.Intersect(ActiveCell, Range(i & ":" & j))

    If pos Is Nothing Then

    MsgBox i & ":" & j & "範囲外です"

    Else

    MsgBox i & ":" & j & "範囲内です"

    End If

    Next row

    End Sub

      補足日時:2023/08/27 20:15
  • うーん・・・

    オートシェイプが連続する場合などは罫線のセルのようにオートシェイプのアドレス範囲が重複してしまいます。(オートシェイプの位置とセル位置を使って情報の分析をしています)オートシェイプの正しい位置が特定できません。発想変えて元のセルにオートシェイプを戻せないのかと考えました。

      補足日時:2023/08/27 22:38
  • うーん・・・

    >位置が変わっては困るのであれば、初めから位置固定にして、セルサイズの変更もできないようにロックをかけておけば済むのではないでしょうか?

    オートシェイプの位置固定の参考URLなどご存じでしたら教えてください。
    使っているオートシェイプは沢山の指定したセルをダブルクリックするとオートシェイプがセル内に入ります。イベントプロシージャを使っています。
    つたいない説明で恐れ入りますがよろしくお願いします。

    No.2の回答に寄せられた補足コメントです。 補足日時:2023/08/28 20:51

A 回答 (3件)

No2です。



>オートシェイプの位置固定の参考URLなどご存じでしたら教えてください。
検索すればよいだけの話。
http://www4.synapse.ne.jp/yone/excel2013/excel20 …
https://supvalue.net/archives/3153
    • good
    • 0

No1です。



何をなさりたいのかさっぱりわかりませんけれど・・

>オートシェイプが連続する場合などは罫線のセルのように
>オートシェイプのアドレス範囲が重複してしまいます。
オートシェイプがセルにまたがっていれば、セル範囲は複数セルになりますし、シェイプが重なっていれば当然範囲も重複します。

そもそもですが、ユーザが自由に操作できる環境であれば、(誤操作も含めて)シェイプは自由に位置を変えられます。
また、セルの幅や高さの変更でも、そのサイズが変わることがあります。
(変わらない設定もありますが)
位置が変わっては困るのであれば、初めから位置固定にして、セルサイズの変更もできないようにロックをかけておけば済むのではないでしょうか?

>オートシェイプの位置とセル位置を使って情報の分析をしています
位置がわかりさえすれば良いのなら、生成する際にシェイプの名称をセルアドレスにしておくなども考えられます。
こちらであれば、どこに移動されても最初に設定した(はずの)位置は、名称を見ればわかりますので。
ただし、同じ位置に複数のシェイプを設定できるようなシステムであれば、連番を振るなどの工夫が必要になるかも知れません。
この回答への補足あり
    • good
    • 0

こんばんは



どのような「調整」をなさりたいのか不明ですが、ロジカルに説明できる内容であれば可能と思われます。

例えば、当該ShapeのTopLeftCellプロパティで、左上に該当するセル位置を取得できますので、それを基準に調整するとかでしょうか?
https://learn.microsoft.com/ja-jp/office/vba/api …

普通に、Left、Topプロパティで、シートに対する位置を取得することもできますし、Width、HeightでShapeのサイズ(=外包矩形)も取得できます。

>(VBA作成者と操作者が異なる為)
通常は、「作成者しか使えないコード」は作成者が個人的に使う為にしか利用しません。
汎用的に利用するのなら、そちらのコードを修正すべきかと想像します。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A