
マクロを実行しないで
シート名が「審査」にVBAコードを設定して同じように図形を移動させる方法を教えてください。
作業ブックに
Sub 図形移動()
Dim shp As Shape
With Range("L6")
Set shp = ActiveSheet.Shapes("電子審査")
shp.Top = .Top + (.Height - shp.Height) / 2
shp.Left = .Left + (.Width - shp.Width) / 2
End With
With Range("L9")
Set shp = ActiveSheet.Shapes("審査完了")
shp.Top = .Top + (.Height - shp.Height) / 2
shp.Left = .Left + (.Width - shp.Width) / 2
End With
With Range("L12")
Set shp = ActiveSheet.Shapes("チェック完了")
shp.Top = .Top + (.Height - shp.Height) / 2
shp.Left = .Left + (.Width - shp.Width) / 2
End With
With Range("L15")
Set shp = ActiveSheet.Shapes("PDF")
shp.Top = .Top + (.Height - shp.Height) / 2
shp.Left = .Left + (.Width - shp.Width) / 2
End With
End Sub
マクロ式があります。
マクロを事項すると図形名の図形の中央が指定セルの中央に移動できるマクロです。
1. シート名が「審査」のセル値Y11が「電子申請」と表示されたタイミングで
図形「電子審査」「審査完了」「チェック完了」を上記の設定で移動
2. シート名が「審査」のセル値Y13が「Web」と表示されたタイミングで
図形「PDF」を上記の設定で移動する方法を教えてください。
コードの最初を「Private Sub Worksheet_Change(ByVal Target As Range)」
に設定すれば良いと思いますが、その先のコードがわかりません。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
こんにちは
少し気になる点が・・・ >表示されたタイミングで
これ、入力でなく(関数)式での表示ですか?
そうであれば、Worksheet_Changeではうまく行かないかな・・
入力でならWorksheet_ChangeでIntersectを使い対象セルを制御(限定)し
実行コードを実行するようにします。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Y11")) Is Nothing Then
If Target = "電子申請" Then
Call shp_move(ActiveSheet.Shapes("電子申請"), Range("L6"))
Call shp_move(ActiveSheet.Shapes("審査完了"), Range("L9"))
Call shp_move(ActiveSheet.Shapes("チェック完了"), Range("L12"))
End If
End If
If Not Intersect(Target, Range("Y13")) Is Nothing Then
If Target = "Web" Then
Call shp_move(ActiveSheet.Shapes("PDF"), Range("L15"))
End If
End If
End Sub
Sub shp_move(shp As Shape, r As Range)
With r
shp.Top = .Top + (.Height - shp.Height) / 2
shp.Left = .Left + (.Width - shp.Width) / 2
End With
End Sub
同じコードが複数回あるのでサブに出しました
ほぼ、コピペで書いたので、エラー処理、イベント抑制などは組み込んでいません
数式の場合は、もう少し情報がないと難しいかと思いますが取敢えず
No.3
- 回答日時:
こんにちは
直接(数式などでなく)値の変わるセルは?
=受付!D2 なので 受付シートD2ではないのでしょうか
受付シートD2も数式で値が入るのなら その式を教えてください
変更になった時の為に
Worksheet_Changeのトリガーはイベントが書かれているシートです
受付シートなら、受付シート
シート審査ならシート審査のシートモジュールに書きます
Worksheet_Changeは数式で変更表示された値(シートの計算処理)では
動きません。
なので、値が表示されるセルにどの様な数式が入っているか理解する必要があります。(Worksheet_Changeの場合、数式の参照元を実行トリガーにします)
数式のセルを選択して リボンタグ 数式の参照元のトレースボタンを
押下して参照元をだどりましょう。(参照元が続く場合、Beepが鳴るまで複数回押します)
シートがまたがるとシートのアイコンが出ます。
もっとも、数式を見れば、どこのセルが参照元か分かると思いますが。
で、多分コードを書いたシートモジュールが違います
Range("Z12")は Range("D12") かと #2に書きました
=IF(AND(Y11="電子申請",Y12="無"),"電子無","")
これ Y12? Y13では・・・
>セルY11には「=受付!D12」数式があり 同じくセルY13には「=受付!E12」があります。
ならば、色々やり方はありますが、一例として
受付E12 は "無"か"Web"で・・処理したいのだと思うので
受付E12をトリガーにして
<受付シートモジュールに書きます>
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wS As Worksheet
Set wS = Worksheets("審査")
If Not Intersect(Target, Range("E12")) Is Nothing Then '実行セル
If Range("D2").Text & Range("E12").Text = "電子申請無" Then
Call shp_move(wS.Shapes("電子申請"), wS.Range("L6"))
Call shp_move(wS.Shapes("審査完了"), wS.Range("L9"))
Call shp_move(wS.Shapes("チェック完了"), wS.Range("L12"))
Call shp_move(wS.Shapes("PDF"), wS.Range("L15"))
End If
End If
End Sub
<審査シートのコードは消して>
受付D2を変更した時も実行するには
If Not Intersect(Target, Range("D2,E12")) Is Nothing Then
No.2
- 回答日時:
問題はシートイベントのトリガーにあります・・いや、問題ではなく仕様なのですが・・
再計算をトリガーにする場合はPrivate Sub Worksheet_Calculate()なのですが、これにはByVal Target As Rangeが有りません。
色々やり方はあるのですが、・・・
私的には 受付シートのWorksheet_Changeイベントで対応した方が良いかも知れません。(受付シートにChangeイベントなどがすでにある場合は少し複雑になるかも知れませんが)
ちなみにこの、
受付シートでD12「電子申請」とE12「Web」がにそれぞれ表示され
はどのように表示されるのでしょう?リストボックス?数式?フォームなどからの出力? この条件が分からないと受付シートのWorksheet_Changeイベントはやはり使いにくいかも知れませんね
受付シートのD12 E12値そのものが変わる場合、
Worksheets("審査")を付加すればOKかと思います。
受付シートモジュールに
Private Sub Worksheet_Change(ByVal Target As Range)
Dim wS As Worksheet
Set wS = Worksheets("審査")
If Not Intersect(Target, Range("D12")) Is Nothing Then
If Target = "電子申請" Then
Call shp_move(wS.Shapes("電子申請"), wS.Range("L6"))
Call shp_move(wS.Shapes("審査完了"), wS.Range("L9"))
Call shp_move(wS.Shapes("チェック完了"), wS.Range("L12"))
End If
End If
If Not Intersect(Target, Range("E12")) Is Nothing Then
If Target = "Web" Then
Call shp_move(wS.Shapes("PDF"), wS.Range("L15"))
End If
End If
End Sub
Sub shp_move(shp As Shape, r As Range)
With r
shp.Top = .Top + (.Height - shp.Height) / 2
shp.Left = .Left + (.Width - shp.Width) / 2
End With
End Sub
多分結果は得られると思いますがコード内コメントなどを付けて
改修時に忘れないようにしておく方が良いかもです。
シェイプの移動だけなので別に良いかも知れませんが
他のシートをいじるので制御系のコードも入れておいた方が良いかも知れません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/05/26 17:19
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Excel(エクセル) エクセル VBA For Next 繰り返しの書き方を教えてください 6 2022/09/01 14:11
- Visual Basic(VBA) QRコード作成マクロについて 3 2022/11/26 16:55
- Excel(エクセル) エクセルで同じ数字同士を自動で線で結ぶVBAを教えてください 6 2022/04/26 23:13
- Excel(エクセル) VBA 1 2023/04/27 13:37
- その他(Microsoft Office) エクセルのマクロでスライサー教えてください。 1 2022/09/28 16:40
- Visual Basic(VBA) 【VBA】写真の縦横比を変えずに貼り付ける 5 2023/06/13 11:42
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Office365 のExcelでオブジェク...
-
エクセルで図形やワードアート...
-
指定範囲内で図形等を削除する...
-
Excel組織図を横に展開する方法...
-
Excel 図形を移動させると複写...
-
word2010 SmartArtで連絡網作...
-
エクセル コマンドボタン 丸...
-
オートシェイプで任意のドーナ...
-
エクセル マクロで、選択してい...
-
パワーポイント(2016)、線を...
-
EXCEL2007にてVBAによる図形の...
-
エクセルVBAでShapeRangeについて
-
PowerPoint2013で、図形の枠線...
-
excelのオートシェイプを使って
-
ワードで大量の図形を一括でグ...
-
花子で円を等分割
-
図形の特定の色を一括置換する...
-
Illustrator CS2で等間隔斜め線...
-
エクセルで図形を一気に消す方法
-
Excelで図形(線分)を挿入し、 ①...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで図形やワードアート...
-
指定範囲内で図形等を削除する...
-
Excel組織図を横に展開する方法...
-
Office365 のExcelでオブジェク...
-
word2010 SmartArtで連絡網作...
-
Excel に貼り付けた図形が、勝...
-
エクセル マクロで、選択してい...
-
ワードで大量の図形を一括でグ...
-
Excel 図形を移動させると複写...
-
jwCAD 登録した図形を呼び出し...
-
マウスで選択した図形のみVBAで...
-
マクロで選択した図形の選択状...
-
オートシェイプで任意のドーナ...
-
パワーポイント(2016)、線を...
-
図形の特定の色を一括置換する...
-
エクセル コマンドボタン 丸...
-
ワードの図形をコピー&ペイス...
-
PowerPoint2013で、図形の枠線...
-
JPEG画像をイラストレータの塗...
-
なぜか同色を指定しているのに...
おすすめ情報
回答ありがとうございました。
貴者がおっしゃる通り、実は
セルY11には「=受付!D12」数式があり 同じくセルY13には「=受付!E12」があります。 受付シートでD12「電子申請」とE12「Web」がにそれぞれ表示され Y11に「電子申請」Y13に「Web」が表示されても上手く動作しませんでしたが Y11とY13にそれぞれ直接文字を入力しましたら上手く動作してくれました。 この内容の解決方法を教えて頂けますでしょうか。 よろしくお願いいたします。
回答ありがとうございます。
ただいま、パソコンから離れてしまいましたので
明日の朝確認させていただきます。
申し訳ありません、よろしくお願いいたします。
おはようございます。昨日は失礼いたしました。少し内容を変更させていただきました。
「シート審査」のセルY11「=受付!D2」Y12「=受付!D12」Z12「=IF(AND(Y11="電子申請",Y12="無"),"電子無","")」Z12「=IF(AND(Y11="電子申請",Y13="Web"),"電子有","")」を設定し
文字数の都合上何回かに分けてお送りします。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("Z12")) Is Nothing Then
If Target = "電子無" Then
Call shp_move(ActiveSheet.Shapes("電子審査"), Range("L6"))
Call shp_move(ActiveSheet.Shapes("審査完了"), Range("L9"))
Call shp_move(ActiveSheet.Shapes("チェック完了"), Range("L12"))
Call shp_move(ActiveSheet.Shapes("PDF"), Range("L15"))
End If
End If
End Sub
Sub shp_move(shp As Shape, r As Range)
With r
shp.Top = .Top + (.Height - shp.Height) / 2
shp.Left = .Left + (.Width - shp.Width) / 2
End With
End Sub
を設定しましたが、やはり、上手く動作してくれませんでした、直接文字を入力すると動作します。何度も申し訳ありません。貴者にはいつも助けて頂いており、感謝いたします。今回もよろしくお願いいたします。
回答ありがとうございます。申し訳ありません、いろいろ設定している中で、私の質問に変更が出てしまいました、このままだとルール違反になりますので、一旦、ベストアンサーとさせて頂きまして
改めて質問させていただいてもよろしいでしょうか、
本当に申し訳ございません。
よろしくお願いいたします。