アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAについて
シートが3つあり、それぞれ同じマクロのボタンがあります。

内容は非表示、再表示にするマクロです。
そして最後に1番左のシートをActiveにして
A2にある数字を7にするというものです。
(A2は実績をVlookupで抽出するときの行番号となっています。一番左のシートのA2を変更すると他のシートも計算式で行番号が変わるしくみです。)

一番左のシートでマクロを実行する時は問題ありませんが、例えば2つ目のシートでマクロを実行した場合、非表示・再表示を行った後、一番左のシートをアクティブにしてA2の数字を変更する為、実行後は一番左のシートがアクティブで終了になってしまいます。

一番左のシートを数字変更した後は
マクロを実行したシート(上の場合は2つ目のシート)を
アクティブにしたいのですが、どのようにしたら良いでしょうか?

説明不足でわかりづらければ申し訳ありません。
宜しくお願いします。

A 回答 (3件)

マクロを実行した際のアクティブなシート番号を取得しておいて、最後にそのシートをまたアクティブにすれば良いのでは?



Dim i As Integer

i = ActiveSheet.Index

' ~何かする

Worksheets(i).Activate

『非表示・再表示』がシートを切り替えての作業を意味するのか、またはシート自体を隠す目的があり必要時に再表示するのかなどについては不明ですけどね?
    • good
    • 0

こんにちは



実際のコードの記載がないので、ご質問文からの想像ですが・・・

作成なさっているマクロには
 Worksheets("○〇").Activate
とか、
 Range("△△").Select
などといった記述がされているのではないかと推測します。

No1様も指摘なさっていますが、大抵のマクロではこのような「Activate」、「Select」といった記述をしなくても、同様の処理を行うことが可能です。
むしろ、そのような記述法にした方が処理効率は良くなりますし、マクロ実行中に「画面がチラチラする」ような現象も起きずに済みます。

ご質問文を読む限り
 ・非表示、再表示にする
 ・1番左のシートのA2を7にする
という内容なので、実行前のシートから移動することなく処理が可能と推測します。
例えば、A2の値を7にする処理を例にすれば
 Worksheets(1).Range("A2").Value = 7
の1行で済みますし、これなら表示シートが移動することもありません。
非表示/再表示 に関しても同様ですが、こちらは内容が不明なので、具体例は示せません。
    • good
    • 0
この回答へのお礼

解決しました。

ありがとうございます‼
助かりました✧*。

お礼日時:2020/01/28 03:22

「1番左のシートをActiveにしてA2にある数字を7にする」となっていますが「1番左のシートをActive」にしないといけない理由は何でしょうか?



一般的には次のようにされれば問題ないと思います。

Dim アクティブシート名 As String
アクティブシート名 = ActiveSheet.Name
' A2にある数字を7にする等の処理
Sheets(アクティブシート名).Select
    • good
    • 0

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