Excel (VBA)

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

 
(指定なし : 指定なし)
何枚目のシートか指定する方法
投稿日時: 20/09/11 09:53:42
投稿者: 春麗

下記でファイルが開いた時点で今日の日付をシート名にできるのですが,
シートが複数になってしまい,目的のシートが常にアクティブなわけではないので,
何枚目のシートとか,指定はできますでしょうか.
 
Private Sub Workbook_Open()
 
ActiveSheet.Name = sh_name & Format(Date, "mmdd")
 
End Sub
 

回答
投稿日時: 20/09/11 10:30:42
投稿者: WinArrow
投稿者のウェブサイトに移動

 
>ActiveSheet.Name = sh_name & Format(Date, "mmdd")
 ↑これは、アクティブシートの名前を変更する命令です。
 
例(sh_nameの意味が分からないので、例としてあります)
 
Me.Sheets(Format(Date,"mmdd")).Activate
   
というように変更が必要です。
 
 
 
但し、このままでは、
いつ、当該シートを作成(又は、名前変更?)するのか、わかりませんが、
 該当するシートが存在しなかった場合、エラーで止まってしまいます。
  
それを回避する措置があると無難です。
 

投稿日時: 20/09/11 11:12:37
投稿者: 春麗

WinArrowさん
 

WinArrow さんの引用:

Me.Sheets(Format(Date,"mmdd")).Activate
   
というように変更が必要です。
 

 
どうもありがとうございます.
 
WinArrow さんの引用:

但し、このままでは、
いつ、当該シートを作成(又は、名前変更?)するのか、わかりませんが、
 該当するシートが存在しなかった場合、エラーで止まってしまいます。
  
それを回避する措置があると無難です。

 
状況としましては,1〜15までの15枚のシートがあり,1〜15までのデータが集計される様なシートが16枚目にあります.
この16枚目のシートのシート名が毎日開かれるたびに日付になってくれると助かるので質問させていただきました.
この16枚目のシートがなくなることはありません.
 

回答
投稿日時: 20/09/11 12:05:24
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:

この16枚目のシートのシート名が毎日開かれるたびに日付になってくれると助かるので質問させていただきました.

 
最初の質問の内容とまったく違いますね?
 
シートの位置は、自由に変更できてしまうので
16枚目という指定は、危険です。、
他のシートと区別特別なシート名を
付けた方がよいですね?
 
例えば、"合計"を先頭につけて、その後ろに"mmdd"を付加したシート名にするとか・・・
sh_name
は、そういう意味だったのかな?
だとすると
sh_name = "合計"
 
そうすると、シート名の先頭が"合計"というシートを探せばよいことになります。ke
Dim G_sht As Worksheet
 
For Each G_Sht In Me.Sheets
    If G_Sht.Name Like sh_name & "*" Then
       G_Sht.Name = sh_name & Format(Date,"mmdd")
       G_sht.Activate
    End if
Next

投稿日時: 20/09/11 13:39:39
投稿者: 春麗

[quote="WinArrow"]

引用:

 
sh_name = "合計"
 
 
Dim G_sht As Worksheet
 
For Each G_Sht In Me.Sheets
    If G_Sht.Name Like sh_name & "*" Then
       G_Sht.Name = sh_name & Format(Date,"mmdd")
       G_sht.Activate
    End if
Next

 
質問の仕方,大変失礼しました.
お恥ずかしい質問なのですが, In Me.Sheets はどういう意味なのでしょうか

回答
投稿日時: 20/09/11 14:07:07
投稿者: WinArrow
投稿者のウェブサイトに移動

春麗 さんの引用:

In Me.Sheets はどういう意味なのでしょうか

 
workBook.Open() プロシジャは、Thisworkbookモジュールに記述します。
このプロシジャ内では、
Thisworkbook

Me
と記述することができます。
 
従って
Me.Sheets
は、Thisworkboo内の全シートと指します。
 
For Eac G_sht In Me.Sheets
は、Thisworkboo内の全シートを1つづつ参照するコードとなります。
 
別の記述
For s = 1 To Me.Sheets.Count
とすると
 If me.Sheets(s).Name =
という方法でシートを特定できます。

投稿日時: 20/09/11 14:35:22
投稿者: 春麗

WinArrowさん
 
わかりやすくどうもありがとうございました.
Meってその様に使えるのですね.
 
今回,期待通りの動きで完成しました.
 
助かりました.