• ベストアンサー

エクセルVBA  activesheetの非表示

エクセル2002使用です。 sheet1のモジュールにsheet2のセルから値を取得するコードを書きました。 セルの値を取得後、sheet1の画面に戻します。 値を取得するために一度sheet2をactivesheetにする必要があると思うのですが、 その際にマクロを実行するとエクセルの画面が一瞬sheet1からsheet2に変わってしまいます。 この、一瞬のsheet2の画面を出さない方法はあるのでしょうか? sub aaa() Dim tukikekka as range Worksheets("sheet2").Activate Set tukikekka = ActiveSheet.Range("A2:A15") _ .Find(what:=ActiveSheet.Range("A1"), lookat:=xlWhole) Worksheets("sheet1").Activate ActiveSheet.Range("H7").Value = tukikekka.Offset(,7) end sub (実際のコードはもう少し長いので、Sheet2がはっきりと見えます) よろしくお願いします。

  • ken123
  • お礼率73% (299/409)

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

  • ベストアンサー
  • nicnicnic
  • ベストアンサー率47% (8/17)
回答No.1

はじめまして こんなのはどぉですか? ~ここから~ '表示が更新されて画面がちらつくのを抑止する Application.ScreenUpdating = False … 本題のプログラム … '復帰  Application.ScreenUpdating = True ~ここまで~

ken123
質問者

お礼

nicnicnic さま 早速のご回答ありがとうございました。 うまくいきました。 そうこんな風にしたかったのです。 今後ともよろしくお願いします。

その他の回答 (1)

  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.2

原因はSheet2をアクティブにしているので、それをしなければいいだけの話です。 Dim work As Worksheet Set work = Worksheets("Sheet2") こんな感じでにすれば work を Sheet2 として参照できます。 aaa() の最初でこれをやり現在 ActiveSheet となっている個所を work に変更すれば出来ると思います。

ken123
質問者

お礼

ttyp03 さま 早速のご回答ありがとうございました。 なるほど、Setステートメントはこう使うんですね。 今一よくわからず使ってました。 sheet2をactiveにしなくても数字を拾ってくれました。 今まで不思議だったんです。 今後ともよろしくお願いします

関連するQ&A

  • エクセルVBAでコピーすると行の高さが低くなる

    いつもお世話になってます。 エクセル2003のVBAで、セルの範囲を指定してコピーすると行の高さが低くなってしまいます。その他の書式は、変化せずうまくコピーできています。以下がプログラムです。 Sub copy_hyou() Worksheets("sheet1").Activate Range("A1:K24").Copy 'セルA1からK24をコピーします。 Range("A25").Select 'A25からペイストします。 ActiveSheet.Paste End Sub どう直せば、行の高さもコピーできるでしょうか? お休み中すみませんがよろしくお願いいたします。

  • エクセルVBAのコーディング

    現在、次のようなことがやりたくてエクセルのコードを作ってみました。 ・データが書かれたエクセルの複数のsheetの特定のセルをコピーして、sheet1にコピーペーストしていきたい。 そこでこのようなコードを書いてみました。 Private Sub Worksheet_Activate() Sheet4.Select Range("A16").Copy Sheet1.Select Range("U63").Select Sheet1.Paste End Sub とりあえずSheet4のセルA16のデータをSheet1のU63にコピーペーストするようにしてみたのですが、うまくいきません。 この場合のコードの書き方をご教授いただけないでしょうか? どうぞ、よろしくお願い致します。

  • コピー後に値のみ貼り付け エクセル、VBAの記述について

    マクロ初心者です。 エクセルで選択範囲を指定後コピーし、 自動的に別のシートの末尾に貼り付けられるようにしたのですが、 この内容のまま「貼り付け」を「値のみ貼り付け」に訂正する場合 どのように変更すればいいのか、教えてくださると嬉しいです。 宜しくお願いいたします。 Sub 選択範囲をコピー後、指定シートの末尾に貼り付け Worksheets("sheet1").Activate Range("b11:I17").Copy Workbooks("book2.xls").Worksheets("Sheet1").Activate 行 = Range("B1").CurrentRegion.Rows.Count + 1 ActiveSheet.Paste _ Destination:=Workbooks("book2.xls").Worksheets("Sheet1").Range("B" & 行) End Sub

  • エクセル2000のマクロにおける、複数シート間のコピー&ペーストについて

    閲覧ありがとうございます。 現在、エクセル2000(OS、WIN2KPRO)を用いて、以下のような仕様のマクロを組もうとしています。 1.Sheet1のCommandButton1から実行する。 2.Sheet2のA1セルから、O?セルまでのデータの入っているセルをコピーし、Sheet1のB4セル以下にペーストする。 3.O?セルの?は1000以下の値で変化する。 4.Sheet2のF列には、ユニークキーが入力される為、必ず値が入力されている。 上記の仕様に従い、以下のようなマクロを組みましたが、 > Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Select のラインでエラーが発生します。 激しく独学の為、汚いソースですみません^^; **************************************** Private Sub CommandButton1_Click() Worksheets("Sheet2").Select Worksheets("Sheet2").Activate Dim Line_Num Line_Num = 1000 - WorksheetFunction.CountBlank(Range("F1:F1000")) Worksheets("Sheet2").Range("A1").Select Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Select Worksheets("Sheet2").Range(Cells(1, 1), Cells(Line_Num, 15)).Copy Worksheets("Sheet1").Select Worksheets("Sheet1").Activate Range("B4").Select ActiveSheet.Paste End Sub

  • どこが間違ってますか? (エクセルVBAです)

    質問をご覧くださりありがとうございます。 どなたか助けていただけないでしょうか。 以下のコードの場合、B2セルをダブルクリックすればシート(1)が開くと思っていたのですが、B2以外のセルをダブルクリックしてもシート(1)が開いてしまいます。 どこが悪いのでしょうか。 詳しい方がいらっしゃいましたら、どうか教えてください。 Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, cancel As Boolean) If Target = Range("B2") Then cancel = True Worksheets("シート(1)").Activate End If End Sub どうか、宜しくお願いいたします。

  • 〖緊急〗エクセルのVBAについて質問です。

    エクセルのVBAを使用して、下記の動作を実行したいのですがうまくいきません。 おしえてください。 sheet1に移動したいシート名の一覧を作成し、一覧を参照してシートを移動したいです。 RangeにカーソルをあてるとA1に入力したシート名前が反映しているようなのですが・・・。 sheet1のセルA1に移動させたいシート名を入力しています。 Sub Worksheet() Worksheets(Range("A1")).Activate End Sub ※❝インデックスが有効範囲にありません❞とエラーがでます。 ※同一のBOOK内での作業です。 よろしくおねがいします。

  • エクセルVBAで、閉じたブックを参照したい

    Excel97を使用しています。 過去のQ&Aを拝見しまして、 Application.ExecuteExcel4Macro を使うと閉じたままのブックを参照できることが判ったのですが、 http://oshiete1.goo.ne.jp/kotaeru.php3?q=373903 同じ要領で閉じたブック内を検索して、見つかったセルからOffset(0,-4)のセルの内容を取得するには、どのように記述したらよろしいでしょうか? Sub コード取得()  氏名 = "●● ●●"  MsgBox Worksheets("s主項目").Range(Cells(1, 5), Cells(Range("A65536").End(xlUp).Row, 5)).Find(氏名, , , xlWhole).Offset(0, -4).Value End Sub このように書いて「s主項目」シート上で実行すると、氏名に対応するコードNo.が出てきますが、これを他ブック上で氏名を入力し、「s主項目」のブックを閉じたままコードNo.を取得したいのです。 ご存知の方、どうぞよろしくお願いいたします。

  • Excel VBAのFor...Next ステートメントについて

    大学での研究に使うシミュレーション・プログラムのひな形を作成して おりまして、不明な点が出てしまったので質問させて頂きます。  シートを4つ使うシミュレーションで、シート1のA1に変数(0.5から2まで、0.05ずつ)を挿入し、 シート2のA1で計算、シート3のA1で集計・計算、 シート4のA1にそれぞれの変数を挿入した結果を縦方向に記入したいと 考えております。  VBAはまだ習い始めたばかりなので、かなり下手くそですが、なんとか コードを書いてみました。 Sub macro1() '画面更新停止 Application.ScreenUpdating = False '自動計算停止 ActiveSheet.EnableCalculation = False Dim sheet1 As Worksheet Set sheet1 = Worksheets(1) 'シート1をアクティブにする Sheet1.Activate '変数を宣言する For i = 0.5 To 2 Step 0.05 For j = 1 To 30 'シート1のパラメータの値(A1)を0.5から2まで 0.05 刻みで変化させる Sheet3.Cells(1, 1).Value = i '再計算・自動再計算停止 ActiveSheet.EnableCalculation = True ActiveSheet.EnableCalculation = False 'シート2をアクティブにする Sheet2.Activate '再計算・自動再計算停止 ActiveSheet.EnableCalculation = True ActiveSheet.EnableCalculation = False 'シート3をアクティブにする sheet1.Activate '再計算・自動再計算停止 ActiveSheet.EnableCalculation = True ActiveSheet.EnableCalculation = False 'シート3(A1)の値をシート4のA列のj列目にコピー&ペースト sheet1.Range("A1").Value = Sheet4.Range("A" & j).Value Next Next End Sub このコードを実行してもシート4の変数の結果が全て同じになって しまいました。 どの部分が不適切でしょうか。 是非ともアドバイスをお願い致します。

  • エクセルVBA ウィンドウ左上になるセルを指定する

    いつもお世話になっております。 以下のようなマクロを書きました。 Sub test() Worksheets("Sheet2").Select Range("A1").Value = "☆" Worksheets("Sheet1").Select Range("AG100").Activate End Sub 上記マクロでは、最後にAG100セルが見えるようになりますが AG100セルがウインドウ一番左上でアクティブになるように するためにはどのように記述すればよいか ご教示ください。 よろしくお願いします。

  • エクセルVBA 1つのシートで出来ますか?

    説明が下手で申し訳ございませんが、宜しくお願い致します。 sheet(1)に20個のボタンがあります。 ボタンをクリックすると、別のシートが開きます。 開いたシートにも複数のボタンがあり、そのうちの任意のボタンをクリックすると、そのボタンの値がsheet(1)のそれぞれのボタンに対応したセルに入力される、という動作を実現したいと思っています。 現状、下記のようなコードで目的の動作は実現できてはいるのですが、各ボタンそれぞれにシートを作っているような状況です。(データ自体は全く同じ内容のものが、計20シート) たぶん、もの凄く頭の悪い事をやっているんだろうと思います。 sheet(1)を除いた各シートの入力データ自体は全く同じなので、シート一枚で出来るんじゃないのかなと思い、ネットや本で調べながら色々試してみたのですが、どうも上手く行きません。データが同じでも、sheet(1)のクリックしたボタンによって入力するセルを変えなければならないのが問題です。 sheet(1)のボタンとセルの関連付けや、sheet(1)のどのボタンを押したのかの判別ができればいいのかなと思って調べてみても、初心者にはよく理解できず、もう何週間もチャレンジしているのですがお手上げです。 上級者の方の知恵をお借りできれば幸いです。 Sub sheet2を開く() Worksheets(2).Select End Sub Sub 入力1() Worksheets(1).Range("F8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("F8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("F8") = "データ3" Worksheets(1).Select End Sub Sub sheet3を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("H8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("H8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("H8") = "データ3" Worksheets(1).Select End Sub Sub sheet4を開く() Worksheets(3).Select End Sub Sub 入力1() Worksheets(1).Range("M8") = "データ1" Worksheets(1).Select End Sub Sub 入力2() Worksheets(1).Range("M8") = "データ2" Worksheets(1).Select End Sub Sub 入力3() Worksheets(1).Range("M8") = "データ3" Worksheets(1).Select End Sub    ・    ・    ・    ・    ・

専門家に質問してみよう