Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
シートのグループ化
投稿日時: 18/08/18 20:44:27
投稿者: はじめて

お世話になります
即効テクニックを参考にシートをグループ化し、モニター画面上はシートが移動しないように設定しました。
 画面上はシートの移動は見られませんが、各シートに表示ミスがあります。
sheet1は、B1、C1、D1が着色ミス
sheet2は、C1、D1が着色ミス
shhet3は、D1が着色ミス
sheet4は正常に着色
どこがミスかわかりません。ご教示いただけませんか。
よろしくお願いします。
  
Sub Macro4()
   
     Sheet1.Select
     Range("A1").Select
     With Selection.Interior
      .Color = 65535
     End With
       
     Sheet2.Select False
     Range("B1").Select
     With Selection.Interior
      .Color = 12611584
     End With
   
     Sheet3.Select False
     Range("C1").Select
     With Selection.Interior
      .Color = 65535
     End With
       
     Sheet4.Select False
     Range("D1").Select
     With Selection.Interior
      .Color = 12611584
     End With
   
     Sheets("Sheet1").Select
   
 End Sub

回答
投稿日時: 18/08/18 21:06:50
投稿者: 半平太

どんな即効テクニックを参考にしたのか分からないですし、
はじめて さんが何をしたいのかも説明して貰わなかったら、何がミスなのかも分からないですぅ。
 
ただ、Sheet4が正解って言うなら、グループ化した事自体がミスなんじゃない、と思えて来ますけど。

回答
投稿日時: 18/08/18 21:10:05
投稿者: よろずや

なんのためにシートをグループ化してるのでしょうか?
 
モニター画面上はシートが移動しないようにする手段はグループ化ではありません。
Selectしなければいいだけのことです。
 
Sheet1.Range("A1").Interior.Color = 65535
Sheet2.Range("B1").Interior.Color = 12611584
Sheet3.Range("C1").Interior.Color = 65535
Sheet4.Range("D1").Interior.Color = 12611584

投稿日時: 18/08/18 21:41:32
投稿者: はじめて

半平太 さん よろずや さん 早速ありがとうございます。
 
このマクロは画面上の表示をsheet1のままで変えることなく、sheet2〜sheet4までの処理をするものです。
ふつうは処理を進めることにより画面がsheet1〜sheet4まで順次変わっていきます。
参考にしたのは即効テクニックの中の「シート操作関連のテクニック・選択されたシートを操作する」を参考としました。

回答
投稿日時: 18/08/18 22:27:21
投稿者: WinArrow
投稿者のウェブサイトに移動

>ふつうは処理を進めることにより画面がsheet1〜sheet4まで順次変わっていきます。
 
ちょっと表現が違うよ!
あなたは、「シートを選択する」をふつうと言っているのでは?
 
「シートを選択」する記述をするから、変わるのであって、
「シートを選択」する記述を外せば、変わりません。
でもね、セルの参照をシート名で修飾することを忘れると、
常に、アクティブシートのセルを参照することになるから、気を付けましょう。
 
表示ミス?
を目視するためには、シートを選択するしかないよね?
見えないものは見えないから・・・・

回答
投稿日時: 18/08/18 22:43:54
投稿者: WinArrow
投稿者のウェブサイトに移動

sheet1,sheet2,sheet3,sheet4
各々がどのような色になればよいのですか?
 
意図する結果を掲示してみましょう。

回答
投稿日時: 18/08/18 23:07:31
投稿者: 半平太

>このマクロは画面上の表示をsheet1のままで変えることなく
 
この時点で、シートをSelectするのは疑問ですね。
Selectすれば表示が変わるのが「普通」だから矛盾ぽいですよね?
 
Selectしたいし、画面は変えたくないし、となると
初っ端に「画面更新をとめる」を書くことになります。
 
つまり、とする
     ↓
 Application.ScreenUpdating = False
 
そして、普通にSelectする。
    つまり、このFalseを外して、グループ化はやめる
         ↓
 Sheet2.Select ’False
 
以上で目的は達するハズです。
 
でも上達してくると、そういうコードは書きません。
 
シートをSelectして、アクティブシートを処理対象にすることは、
状況依存の危ない書き方だからです。
 
プログラムが複雑になってくると、いまActiveSheetは何だっけー、
なんて考えながらコードを書くなんてとても出来ません。
やると大抵コケます。
 
上級者は成長過程で何度もこの失敗をしているので、滅多にSelectは書きません。
 
代わって何をやるかと言うと、確実に対象シートを特定するようになります。
そうです、よろずや さんが示したサンプルの様にです。

投稿日時: 18/08/18 23:12:44
投稿者: はじめて

WinArrow さん 
ありがとうございます。ご指摘のように各シートが見えた方が確認もできるので良いことは分かります。
平素はこの方法でマクロを組んでおります。自己管理の場合はこの方法がベターだと思います。
他の人が使う場合は、画面が変わってちらちらするよりもと思い今回考えた次第です。当然保護などもかけ安易に関数等が消されないようにすることもしばしばです。今回お尋ねした件は一例であります。
6シートと、12シートあるのにマクロを組み込んでいます。どちらも正常に動作していますが、冒頭表記しました考えで画面がちらつかない方法がないものかとお尋ねをしました。
よろしくお願いします。

回答
投稿日時: 18/08/18 23:31:13
投稿者: WinArrow
投稿者のウェブサイトに移動

画面ちらつき対策は、
Application.ScreenUpdating = False
で可能と思いますが、
グループ化する意図が分かりません。
 
再掲します。

WinArrow さんの引用:
sheet1,sheet2,sheet3,sheet4
各々がどのような色になればよいのですか?
 
意図する結果を掲示してみましょう。

回答
投稿日時: 18/08/18 23:33:45
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

sheet1は、B1、C1、D1が着色ミス
sheet2は、C1、D1が着色ミス
shhet3は、D1が着色ミス

例えば、
Sheet1でいえば、B1,C1,D1には、色が設定されてほしくない
ということかしら?

投稿日時: 18/08/18 23:50:09
投稿者: はじめて

半平太 さん よろずや さん WinArrow さん 
色々なご教示ありがとうございました。
お三方のアドバイスを参考にこれからも頑張っていきたいと思います。