
シート名「審査」に
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
If Not Intersect(Target, Range("Z13")) 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
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("紙PDF"), Range("L12"))
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
があります。同じシートのセル値に対応して、図形を指定セルに移動できるコードです。
このコードだと問題があり、それを解決する方法を教えてください。
審査シートZ12には「=IF(AND(Y11="電子申請",Y12="無"),"電子無","")」の数式があり
Z13には「=IF(AND(Y11="電子申請",Y13="Web"),"電子有","")」の数式があります。又、Y11「=受付!D2」Y12「=受付!D12」Y13「=受付!E12」があり
それぞれのセル値が「シート名:受付」から引用されており、又、受付シートのセル値も同じシート内で色々な数式によりセルに反映されております。
受付シートでセル値を変更してもこのVBAコードでは上手く動作してくれません。
直接「Y11・Z12・Z13」に指定文字を入力すると上手く動作してくれます。
以前、受付シート側でのコード設定を教えて頂きましたが、受付シートには、元々複雑なVBAコードが設定されており、今回は「審査シート」にてコードを設定して図形を動かしたいでです。
何度か同じような質問をしており、恐縮ですが、
受付シートセル値に合わせて、審査シートの図形を上手く移動させる
解決方法を教えてください。
受付シートには
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tbl As Variant
Dim i As Integer
tbl = Array("D10", "D11", "E10", "E11", "F10", "F11")
With Worksheets("審査")
For i = 0 To 5
.Range("B" & 26 + i).Value = Range(tbl(i)).Value
If Range(tbl(i)).Value = "" Then
.Range("E" & 26 + i).Value = ""
Else
.Range("E" & 26 + i).Value = "後日図書の提出をお願いいたします。"
End If
Next i
End With
Application.ScreenUpdating = False
Application.EnableEvents = False
Sheets("消防添").Visible = [R37] = "消防添"
途中省略
Sheets("INDX").Visible = [D2] = "電子申請"
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
があります。
受付シートを利用する場合は、元々のコードにどのように今回のコードを追加する方法を教えてください。
又、受付シートぼ場合はセルO35に「=IF(AND(D2="電子申請",D12="無"),"電子無","")」
O36に「=IF(AND(D2="電子申請",E12="Web"),"電子有","")」を設定しております。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
こんばんは
現状で最も簡単な方法でやるなら
受付シートのPrivate Sub Worksheet_Change(ByVal Target As Range)
でしょうか・・・
D12とE12がどの様に入力されるのか、わからないので 正しく動くか分かりませんが、
D2セルの値がキーになるようなので
Sheets("INDX").Visible = [D2] = "電子申請"
この下に
Dim dmy
Call shape_branch(dmy)
Application.ScreenUpdating = True
で同じ受付シートのモジュールにプロシージャを2つ作成
Sub shape_branch(dmy)
Dim wS As Worksheet
Dim shpPDF As String
If Range("E12").Text = "Web" Then
shpPDF = "消防PDF"
ElseIf Range("D12") = "無" Then
shpPDF = "PDF"
End If
Set wS = Worksheets("審査")
Select Case Range("D2").Text
Case "電子申請"
Call shp_move(wS.Shapes("電子審査"), Range("L6"))
Call shp_move(wS.Shapes("審査完了"), Range("L9"))
Call shp_move(wS.Shapes("チェック完了"), Range("L12"))
Call shp_move(wS.Shapes(shpPDF), Range("L15"))
Case "紙申請"
Call shp_move(wS.Shapes("紙審査"), Range("L6"))
Call shp_move(wS.Shapes("紙審査完了"), Range("L9"))
Call shp_move(wS.Shapes("紙PDF"), Range("L12"))
End Select
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
条件式はD12E12の優先順位や両方ある場合など良く分からないので
直してください
Web、無は~PDFの名前の違うところだけでしたので文字列変数にしました
シェイプを戻すのはボタン?
No.1
- 回答日時:
こんにちは
>受付シートでセル値を変更してもこのVBAコードでは上手く動作してくれません。
>直接「Y11・Z12・Z13」に指定文字を入力すると上手く動作してくれます。
理由を理解しておられますか?
エクセルの計算によって値が変化した場合は、Changイベントが発生しないからです。
イベント処理で行いたければ、
1)発生元のシートでイベントをキャッチする
2)Calculateイベントでキャッチする
のどちらかになると思われます。
ただし、Calculateイベントの場合は(計算処理がまとめて行われるので)発生元のセル情報などは取得できませんので、対象セルを順にチェックする必要があると思われます。
(計算式が多く設定されていて、他の計算などが頻繁に発生するようだと、無駄に処理が動き、重くなる原因となるかもしれません)
発生元をキチンと整理できるのであれば、発生元のChangeイベントを取得する方が宜しいように思われます。
発生元がいろいろなシートに点在しているのであれば、ThisWorkbookモジュールに処理をまとめて記述するようにして、(シート、セル)を併せてチェックすればよろしいでしょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PowerPoint(パワーポイント) ExcelのVBAコードについて教えてください。 3 2022/05/25 14:32
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 4 2023/05/26 10:43
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Excel(エクセル) Excelのマクロについて教えてください。 4 2022/05/31 14:07
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/06/10 11:06
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2023/05/23 16:28
- Excel(エクセル) 【マクロ】スクショ印刷がうまく動かない件 5 2022/12/06 17:37
- Visual Basic(VBA) ExcelのVBAコードについて教えて下さい。 2 2022/06/25 14:04
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
実行時エラー'1004': WorkSheet...
-
実行時エラー1004「Select メソ...
-
【ExcelVBA】全シートのセルの...
-
別のシートから値を取得するとき
-
エクセルのシート名変更で重複...
-
ユーザーフォームに入力したデ...
-
監視ウインドウの常時表示
-
VBA 存在しないシートを選...
-
特定の文字を含むシートだけマ...
-
【Excel VBA】Worksheets().Act...
-
VBAマクロでシートコピーした新...
-
エクセルのブック内の複数シー...
-
マイコンRX62N イーサネット通...
-
ワイルドカードの入力を禁止し...
-
エクセル・マクロ シートの非...
-
userFormに貼り付けたLabelを変...
-
IFステートの中にWithステート...
-
VBA ユーザーフォーム上のチェ...
-
【VBA】シート名に特定文字が入...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロのエラーを解決した...
-
特定の文字を含むシートだけマ...
-
ユーザーフォームに入力したデ...
-
excelのマクロで該当処理できな...
-
【ExcelVBA】全シートのセルの...
-
別のシートから値を取得するとき
-
VBAで指定シート以外の選択
-
実行時エラー'1004': WorkSheet...
-
実行時エラー1004「Select メソ...
-
シートが保護されている状態で...
-
IFステートの中にWithステート...
-
VBA 検索して一致したセル...
-
ブック名、シート名を他のモジ...
-
Worksheet_Changeの内容を標準...
-
XL:BeforeDoubleClickが動かない
-
VBA 存在しないシートを選...
-
Excel VBA リンク先をシート...
-
userFormに貼り付けたLabelを変...
-
ExcelVBA シート名を複数セルか...
-
【Excel VBA】Worksheets().Act...
おすすめ情報