VBAで図形を指定のセルに移動させる方法

このQ&Aのポイント
  • ワークシート上の図形を任意のセルで指定し、その場所に移動させたい方法を教えてください。
  • 特定のセルに図形を移動させる方法を教えてください。
  • VBAを使用して図形を指定したセルに移動させる方法を教えてください。
回答を見る
  • ベストアンサー

VBA 図形の移動をセル指定にしたい

ワークシート上の図形を任意のセルで指定して その場所に移動させたいのですが 上手くいかないので質問します。 やりたいこと A1~A10セルに月・火・水・・・とランダムに 曜日が入っていて その中に、土という文字があれば その土とかかれたセルまで図形を持っていき さらにその図形をちょっと右にずらすという動きをさせたいです。 コードは下記を見て頂きたいのですが 図形の指定や図形をちょっと右にずらすのはできたのですが 土とかかれたセルの位置に持ってくるのがどうしてもできませんでした どうすれば指定した位置に図形を持ってこれるのでしょうか? すいませんがコードを記載してもらえると助かります。 回答よろしくお願いします。 Sub 図形移動() Dim a As Variant For a = 1To 10 If Cells(a, 1).Value = "土" Then ActiveSheet.Shapes("Rounded Rectangle 29").Select  Selection.ShapeRange.IncrementLeft 90 End If Next a End Sub

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

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

参考までに。 Sheet1に図形 長方形を貼り付け。 そのSheet1のSelectionChangeイベントに ーー Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 1 Then If Target.Value = "土" Then ActiveSheet.Shapes(1).Top = Target.Top ActiveSheet.Shapes(1).Left = Target.Offset(0, 1).Left End If End If End Sub ーー そのシート限定で、またA列限定で値が「土」のセルをクリックすると、その行のB列に図形が移動。 === しかし、シートのイベントを利用すること、Changeイベントを使う、構想に、に 不安定性から、自信がないですが。 質問者の質問の構想も、そうする理由が述べられておらず、質問説明として、不十分と感じる。 ・図形を ・その場所に移動させたい 全般に、何をしたいのか。

TaikooniQ1
質問者

お礼

分かりずらい質問ですいません すごくoffsetの部分が参考になりました。 回答ありがとうございます。

その他の回答 (1)

  • SI299792
  • ベストアンサー率48% (713/1474)
回答No.1

ずらす画像は、Rounded Rectangle 29固定でいいですか? ずらす位置は右へ90でいいですか。 Option Explicit ' Sub Macro1()   Dim Find As Range '   Set Find = [A1:A10].Find("土", LookAt:=xlWhole) '   With ActiveSheet.Shapes("Rounded Rectangle 29")     .Left = Find.Left + 90     .Top = Find.Top   End With End Sub

関連するQ&A

  • エクセル マクロで画像を指定したコマへ移動する

    よろしくお願いします。 マクロは触ったばかりです。 何度も検索をかけたのですがどうしても うまくヒットさせることが出来ず こちらで相談させて頂くことにしました。 画像を毎回決まった大きさにトリミングし その後 その画像の左端をセルB17に移動させたいのですが マクロの記録で行うと 右へどれくらい、左へどれくらいと 指定されてしまい必ず同じ場所へ移動してくれません。 「その画像の左端をセルB17に移動」 このコードを教えてください。 出来上がっているコードは Selection.ShapeRange.PictureFormat.CropBottom = 224.39 Selection.ShapeRange.PictureFormat.CropTop = 21.6 Selection.ShapeRange.PictureFormat.CropRight = 11.4 Selection.ShapeRange.PictureFormat.CropLeft = 9.6 Selection.ShapeRange.ScaleWidth 0.76, msoFalse, msoScaleFromBottomRight Selection.ShapeRange.ScaleHeight 0.76, msoFalse, msoScaleFromTopLeft End Sub ここまでです。 (右へどれくらい移動というのは 消しました。) よろしくお願いします。

  • Excelマクロ ○印図形を消したい

    ○印図形を消したい Private Sub CommandButton2_Click() ' ○印をつける Dim a As Range If TypeName(Selection) = "Range" Then Set a = Selection ActiveSheet.Shapes.AddShape(msoShapeOval, a.Left, _ a.Top, a.Width, a.Height).Select Selection.ShapeRange.Fill.Visible = msoFalse a.Select End If End Sub Private Sub CommandButton3_Click() 上記のマクロでつけた○印を下記のようなマクロで(指定の範囲のセルにつけた○印を全て)消したいのですが、上記のマクロは問題なく動作するのですが、下記のマクロがうまく動きません、どこをどのように変更したらよいのでしょうか?、どなたかご教示ください。 ' 指定したセル範囲にある図形を削除する() ' ○印の削除 指定セル範囲 = "U32:X41" With ActiveSheet Set セル範囲 = .Range(指定セル範囲) For Each 図形 In .Shapes If 図形.Type = msomsoPicture Then Set 共有セル範囲 = Intersect(Range(図形.TopLeftCell, _ 図形.BottomRightCell), セル範囲) If Not (共有セル範囲 Is Nothing) Then 図形.Delete End If End If Next End With End Sub

  • VBA ある日付の指定

    やりたいこと 例:今日の日付が4/1ならA1セルに『A』という文字を入れる というIF文を書きたいのですができません。 この場合、2022/4/1という限定的な指定方法ではなく 4/1なら(2023年や2024年でも指定できる)という形で コードを書きたいのですができませんでした。 すいませんが回答よろしくお願い致します。 sub test() if date = 4/1 then  range("A1").value="A" end if end sub

  • オートシェイブをIncrementLeftプロパテ

    オートシェイブをIncrementLeftプロパティで今ある位置から指定したポイントだけ左にするのではなく、 一番左から指定したポイント分の位置を指定するプロパティを教えてください。 今は、 Sub test() ActiveSheet.Shapes.Range(Array("タイトル")).Select Selection.ShapeRange.IncrementLeft -10000 Selection.ShapeRange.IncrementLeft 40 End Sub にしてるのですが、2度手間なので、 -10000せずに、40と設定したら、 左から40の位置を指定できるプロパティを教えてください。

  • 図形 Selectionが省略できない VBA

    「タイトル」という名の図形はシート上に存在するのですが、 Sub a() ActiveSheet.Shapes.Range(Array("タイトル")).ShapeRange.Height = 110 End Sub Sub b() ActiveSheet.Shapes.Range(Array("タイトル")).Select Selection.ShapeRange.Height = 110 End Sub aだとエラーになりますが、 bだと正常に動きます。 SelectやSelectionは省略できるものだと思ってるのですが なぜaだとエラーになるのでしょうか? 一度図形をアクティブにする動作が必要なのですか?

  • VBA 図形の削除

    以下のようなコードにおいて、図名を指定するのではなく、図の種類を指定して削除したいのです。 テキストボックスを消す グラフを消す オートシェイプを消す などなど、オブジェクトの種類を指定して消すようにしたいのですが、どうすれば良いですか? Sub 指定図形削除()  図名=”削除したい図形名”  For Each zu In ActiveSheet.Shapes   If zu.Name = 図名 Then    zu.Delete    Exit For   End If  Next End Sub

  • VBAでセル範囲条件の指定

    下記のようなことを行いたいのですが、VBAの記述でうまくいかなくて困っています。 ----------------------- もし、現在選択中のセルがA1からA5の範囲にあるならば→「実行1」を行う もし、A1からA5の範囲内にないなら「実行2」を行う ------------------------ たったのこれだけのことなのですが、「A1からA5の範囲」を指定する方法がよくわかりません。 ------------------------ Sub セル範囲判定() If ActiveCell = Range("A1:A5") Then MsgBox "A1:A5がアクティブです" Else MsgBox "A1:A5がアクティブではありません" End If End Sub ------------------------- などとしてもうまくいきません。 構文が良くわかっていないので困っています。 「アクティブセルが○○なら」という部分を教えていただけると助かります。

  • VBAの修正 Enterを押した後のセル移動について

    以前、下記でお世話になった者です。 その節はありがとうございました。 「質問:ExcelでEnterを押したあとの移動先について06-03-07 23:03」 http://oshiete1.goo.ne.jp/qa2014068.html 「質問:No.2014068のつづきです。VBAで困ってます。06/03/09 22:06」 http://oshiete1.goo.ne.jp/qa2018448.html 当時のもので快調に使用できていましたが、社内システムの入れ替えでデータが増えたため、VBA(または関数)の修正をして使い勝手をよくしたいのです。 データシート名:[データ]に下記のコードが入っています。 シートのデータ範囲はA4:J65536で、I列に製品コードが入っています。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Column = 11 Then Cells(ActiveCell.Row, 1).Select End If End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$2" Then Range("A65536").End(xlUp).Offset(, 0).Select End If End Sub このコードのおかげで「B2でEnterを押すとA列の「あ」が入っているセルに移動」できました。 これを「B2で製品コードを入力してEnterを押すと、データ範囲のI列を検索して該当レコードの行頭にセルが移動する」に変えたいのです。 ただし、I列の製品コードは1レコードにつき1コード(一品一様)ではありますが、現時点ですべてのコードづけが終わっていないためにB2で入力したものが無い確率の方が高いのです。 この場合は「あ」にセルが移動するようにしたいのですが、どのようにしたらよいのでしょうか。 ご回答よろしくお願いします。

  • VBAでセル記入禁止

    たとえば、"A1"に1を記入した場合、B1を記入不可にできるような、VBAのコードがあれば教えて欲しいです。 sub 記入不可() if range("A1").value = "A1" then B1のセルが記入できないコード end if end sub です。 よろしくお願い致します。

  • 変化するセルが変更されたら実行、というVBAを組みたい

    たとえば、このセルが変更されたら実行、というのは Private Sub WorkSheet_change (Byval Target As Range) If(Target.Address = "$D$3") Then call *** End If End Sub のようにしますよね? この場合、指定したセルは「D3」ですが、たとえば、 A列、B列、C列、D列のアクティブの行のセルが変更されたらコード実行、 というようにするにはどうしたらいいのでしょうか?

専門家に質問してみよう