Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7725 / 13645 ツリー ←次へ | 前へ→

【37239】アクティブなシートに移らないで・・・ ペーロケ 06/4/26(水) 18:37 質問[未読]
【37241】Re:アクティブなシートに移らないで・・・ Kein 06/4/26(水) 18:48 回答[未読]
【37243】その理由とは・・ ペーロケ 06/4/26(水) 19:17 発言[未読]
【37245】Re:その理由とは・・ Kein 06/4/26(水) 19:27 発言[未読]
【37246】Re:その理由とは・・ ペーロケ 06/4/26(水) 20:13 お礼[未読]
【37242】Re:アクティブなシートに移らないで・・・ 06/4/26(水) 18:58 発言[未読]
【37244】Re:アクティブなシートに移らないで・・・ ペーロケ 06/4/26(水) 19:19 お礼[未読]

【37239】アクティブなシートに移らないで・・・
質問  ペーロケ  - 06/4/26(水) 18:37 -

引用なし
パスワード
   いつもお世話になっています。
今、2つのシートとグラフがあるとします。
1枚目のシートにボタンを割り当て
2枚目のシートに計算表
3枚のシートにグラフがあるとします。

ボタンには2枚目の計算表の中を処理するよう記述し
最終的には3枚目を表示と流れをやってみてるんですが、
2枚目のシートは一切表示させない(計算中表示)ように
したいんですが、よく分かりません・・・

まだまだ修行中で
分かりづらいソースですが
ご教授お願いします。。


Sub test()

Dim i As Long
Dim j As Long
Dim ws As Worksheet

Set ws = Worksheets("集計")
i = 27
j = 2

ws.Range("b5:h14").ClearContents

With ws
  Do While .Cells(25, i) <> ""
  '空欄になるまで実行

    If .Cells(25, i) = .Cells(20, 27) And _
      .Cells(26, i) = .Cells(21, 27) Then

      Range(.Cells(29, i), .Cells(38, i)).Select
      Selection.Copy
      Cells(5, j).Select
      Selection.PasteSpecial Paste:=xlValues
      j = j + 1

    End If

  i = i + 1
Loop

End With


グラフ1.Select
End Sub

【37241】Re:アクティブなシートに移らないで・・・
回答  Kein  - 06/4/26(水) 18:48 -

引用なし
パスワード
   ↓このように、Selectしない書き方を学習して下さい。

Sub test()
Dim i As Long
Dim j As Long
Dim ws As Worksheet

Set ws = Worksheets("集計")
i = 27
j = 2
ws.Range("b5:h14").ClearContents
With ws
  Do While .Cells(25, i) <> ""
  '空欄になるまで実行

    If .Cells(25, i).Value = .Cells(20, 27).Value And _
      .Cells(26, i).Value = .Cells(21, 27).Value Then
     .Range(.Cells(29, i), .Cells(38, i)).Copy
      .Cells(5, j).PasteSpecial Paste:=xlValues
      Application.CutCopyMode = False
     j = j + 1
    End If
    i = i + 1
  Loop
End With
Set ws = Nothing
グラフ1.Select
End Sub

【37242】Re:アクティブなシートに移らないで・・・
発言    - 06/4/26(水) 18:58 -

引用なし
パスワード
   ▼ペーロケ さん:
こんばんわ。
ただ単純に、シート(集計)を表示しないようにすると言うことであれば、

>Sub test()
>
>Dim i As Long
>Dim j As Long
>Dim ws As Worksheet
>
>Set ws = Worksheets("集計")
>i = 27
>j = 2
>
Application.ScreenUpdating = False

>ws.Range("b5:h14").ClearContents
>
>With ws
>  Do While .Cells(25, i) <> ""
>  '空欄になるまで実行
>
>    If .Cells(25, i) = .Cells(20, 27) And _
>      .Cells(26, i) = .Cells(21, 27) Then
>
>      Range(.Cells(29, i), .Cells(38, i)).Select
>      Selection.Copy
>      Cells(5, j).Select
>      Selection.PasteSpecial Paste:=xlValues
>      j = j + 1
>
>    End If
>
>  i = i + 1
>Loop
>
>End With
>
Application.ScreenUpdating = True
>
>グラフ1.Select
>End Sub

を試してみてください。

【37243】その理由とは・・
発言  ペーロケ  - 06/4/26(水) 19:17 -

引用なし
パスワード
   Kein さん アドバイスありがとうございます。

まだまだ初歩的なソースしか書けない自分が悔しいです・・

ところで、selectしない方が良いのは
やはりプログラムを早くまわすためなんでしょうか?

単純な質問で申し訳ありません!

【37244】Re:アクティブなシートに移らないで・・・
お礼  ペーロケ  - 06/4/26(水) 19:19 -

引用なし
パスワード
   吉 さん アドバイスありがとうございます。

Application.ScreenUpdating

を挿入した結果、望んでたとおりの動きをしました。
これはまだ見たことがなかったので
他の機会でも活用していきたいと思います!

ありがとうございました。

【37245】Re:その理由とは・・
発言  Kein  - 06/4/26(水) 19:27 -

引用なし
パスワード
   処理効率を上げて時間短縮を図るのが目的ですが、この度は特に
>2枚目のシートは一切表示させない(計算中表示)ようにしたい
と書かれていたので、それを実現しようとしました。
ま、明確な目的があろうと無かろうと、マクロの記録コードのレベルから
早く卒業したいと思ったら、Select や Activate をしない書き方を
身につけるのが第一歩です。
ちなみにそのコードでは、単に画面の動きを抑止するコードを入れたぐらいでは
不十分であることを指摘しておきます。よく考えてみて下さい。

【37246】Re:その理由とは・・
お礼  ペーロケ  - 06/4/26(水) 20:13 -

引用なし
パスワード
   Kein さん 厳しいご指摘ありがとうございます。

>ま、明確な目的があろうと無かろうと、マクロの記録コードのレベルから
>早く卒業したいと思ったら、Select や Activate をしない書き方を
>身につけるのが第一歩です。

そうですね。
目標を見つけてやればいいんですが、仕事ではまず使うことはなく
趣味の領域を越えないです・・・
でも、今回はそれなりの目標を持ってやってるので
ご指摘の通り、経験を積んで早く記録コードを卒業できるようになりたいです!


>ちなみにそのコードでは、単に画面の動きを抑止するコードを入れたぐらいでは
>不十分であることを指摘しておきます。よく考えてみて下さい。

分かりました。。
もっと色んな記述を覚えて頑張ってみます!

また投稿すると思いますが、その際はよろしくお願いします!

7725 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free