
おはようございます。
現在マクロを実行しているブックのシート名を下のようなコードで取得していますが、これを
開いているもうひとつのブックのシート名を
マクロ実行しているシート“しーと1”のJ3セル以降に並べる
というように変更したいのですが、下のコードを少し変更して
対応できるでしょうか?教えていただけたら助かります。
Sub シート名()
Dim i As Integer
Dim mySheetCnt As Integer
Dim mySheetNam As String
Application.ScreenUpdating = False
Columns("J:J").Select
Selection.ClearContents
Range("J2").Select
ActiveCell.FormulaR1C1 = "項目名"
mySheetCnt = ThisWorkbook.Sheets.Count
For i = 2 To mySheetCnt
mySheetNam = Sheets(i).Name
Sheets("しーと1").Cells(i, 10) = mySheetNam
Next i
Application.ScreenUpdating = True
MsgBox "シート名更新しました。"
End Sub
No.4ベストアンサー
- 回答日時:
再度の登場、onlyromです。
>いただいたコードを自分で直せず申し訳ありません。
いえ、いえ、別にどうってことありませんよ。
考え過ぎましたね。(^^;;;
>調べる対象は「もうひとつのブック」限定に書出したい
なら、先の回答にブック名をチェックするコードを入れるだけでいいのですが、
今度は、For Eachで。
'------------------------------------------------
Sub Test555()
Dim myBook As Workbook
Dim mySheet As Worksheet
Dim LastRow As Long
Application.ScreenUpdating = False
ThisWorkbook.Activate
Sheets("しーと1").Select
Columns("J:J").ClearContents
Range("J2").Value = "シート名"
For Each myBook In Workbooks
If myBook.Name <> ThisWorkbook.Name Then
For Each mySheet In myBook.Worksheets
LastRow = Cells(Rows.Count, "J").End(xlUp).Row
Cells(LastRow + 1, "J").Value = mySheet.Name
Next mySheet
End If
Next myBook
Application.ScreenUpdating = True
MsgBox "該当ブックのシート名を表示しました"
End Sub
'-----------------------------------------------
上記は、マクロのブックと他に1つブックが開いている場合です。
もし、他に複数のブックが開いていて、その中のどれか、という場合は、
そのどれかを決めてやらなければできません。
他に複数ブックが開いていてその中の、"売上.xls" というブックを対象にしたい場合は
If myBook.Name <> ThisWorkbook.Name Then
これを
If myBook.Name = "売上.xls" Then
とします。
それからマクロの書いてあるブックがアクティブで、かつ、シート1がアクティブな状態で
実行する場合は、下記2行はいりません。
ThisWorkbook.Activate
Sheets("しーと1").Select
また、常に、ブック名、シート名をRangeオブジェクトの前に付加する場合もいりません。
以上。
どうもありがとうございました。勉強になりました。二つのブックということを操作しようとすのは、思った以上のことでした。又是非宜しくお願いします。
No.3
- 回答日時:
こんにちは。
ご質問者のreprogress様は、マクロは、かなりお分かりになるようですね。
>調べる対象は「もうひとつのブック」限定
やはり確実なのは、全部出すことですが、それを、#2のお礼で書かれている「もうひとつのブック」というのを限定するというのは、思っているよりも難しいのです。
通常は、元のコードの
mySheetCnt = ThisWorkbook.Sheets.Count
を、
mySheetCnt = ActiveWorkbook.Sheets.Count
として、
ActiveWorkbook.Sheets(i).Name
として、人間が選択したほうが早いです。
ただし、
For i = 1 To mySheetCnt 'i = 1
mySheetNam = Sheets(i).Name
Sheets("しーと1").Cells(i + 2 , 10) = mySheetNam ' i+2(3行目から)
Next i
としたほうがよいです。
「もうひとつのブック」というのは、言葉では、単数なのですが、Excel VBAのプログラミングになれた人は、本能的に、その言葉を、必ずしも、「合計2ブック」としてコードを書くわけではありません。見えないブックも、いくつか立ち上がっていることがあります。また、足りないこともあります。
こういうことは、余計だと思うかもしれませんが、なるべく問題が起こらないような形の許容範囲でマクロを考えます。
私の場合、「もうひとつのブック」を、見えているもので、立ち上げた順序が、自ブック以外で一番早いものという限定をしました。
なお、ActiveWorkbook がどちらでも、自ブック以外のシート名(ワークシート名だけではありません)を同じように書き出します。
Worksheet とSheet の区別があります。
----------------------------------------
Sub Macro1()
Dim wb As Workbook
Dim tWb As Workbook
Dim i As Integer
'もうひとつのブックを探す
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name _
And wb.Windows(1).Visible = True Then
Set tWb = wb
Exit For
End If
Next wb
If tWb Is Nothing Then
MsgBox "もうひとつのブックがありません。", 48
Exit Sub
End If
Application.ScreenUpdating = False
With ThisWorkbook.Worksheets("しーと1")
.Columns(10).ClearContents
.Range("J2").Value = "*項目名*"
For i = 1 To tWb.Sheets.Count
.Cells(i + 2, 10).Value = tWb.Sheets(i).Name
Next i
End With
Application.ScreenUpdating = True
Set tWb = Nothing
MsgBox "シート名更新しました。", 64
End Sub
Wendy02さんありがとうございます。
>「もうひとつのブック」というのを限定するというのは、思っているよりも難しいのです。
知らなかったです。コードばっちりでした。Wendy02さんの回答はいつも参考にさせていただいています。今回最初の方からも解決の答えをいただきましたので、次点にさせていただくこと、申し訳ありません。また是非宜しくお願いします。
No.2
- 回答日時:
どうせなら、ThisWorkbookも含め開いているブックの全シート名を表示する方がいいような。
。。ということで、開いている全てのブックの全シート名を、ThisWorkbookの"しーと1"のJ列、K列・・・に表示。
またそれぞれの列の1行目には、ブック名を表示。
'-------------------------------------------------
Sub Test()
Dim B As Integer
Dim S As Integer
Dim BookCnt As Integer
Dim SheetCnt As Integer
Application.ScreenUpdating = False
ThisWorkbook.Activate
Sheets("しーと1").Select
For B = 1 To Workbooks.Count
SheetCnt = 0
BookCnt = BookCnt + 1
Columns(BookCnt + 9).ClearContents
Cells(1, BookCnt + 9).Value = Workbooks(B).Name
Cells(2, BookCnt + 9).Value = "シート名"
For S = 1 To Workbooks(B).Sheets.Count
SheetCnt = SheetCnt + 1
Cells(SheetCnt + 2, BookCnt + 9).Value = Workbooks(B).Sheets(S).Name
Next S
Next B
Application.ScreenUpdating = True
MsgBox "開いているブックの全シート名を表示しました"
End Sub
'-----------------------------------------------------
●For B=1 to workbooks.Count
の代わりに
●For Each B In Workbooks
とする方法を使うとコードが若干短くなります。
以上。
ありがとうございました。せっかく書いていただいて恐縮ですが、調べる対象は「もうひとつのブック」限定に書出したいと考えています。いただいたコードを自分で直せず申し訳ありません。
No.1
- 回答日時:
Sub シート名()
Dim i As Integer
Dim mySheetCnt As Integer
'シート名を配列に格納するために、配列で変数を定義
Dim mySheetNam(256) As String
Application.ScreenUpdating = False
mySheetCnt = ThisWorkbook.Sheets.Count
'このループでシート名の取得は完了
For i = 2 To mySheetCnt
mySheetNam(i) = Sheets(i).Name
Next i
'別のブックに記述するという要件なので、別ブックをアクティブに
Windows("Book2.xls").Activate
Columns("J:J").Select
Selection.ClearContents
Range("J1").Select
ActiveCell.Value = "項目名"
'このループで取得したシート名をセルに代入
For n = 2 To mySheetCnt
Sheets("しーと1").Cells(n, 10).Value = mySheetNam(n)
Next n
Application.ScreenUpdating = True
MsgBox "シート名更新しました。"
End Sub
===
上記で良いでしょうか?
excel2003では正常に動きました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルを共有するとPCによっ...
-
VBAでブックを非表示で開いて処...
-
エクセルで参照しているデータ...
-
エクセルの関数 ENTERを押...
-
【マクロ】【画像あり】ファイ...
-
参照したいブックのパス名に"["
-
【マクロ】【画像あり】❶ブック...
-
Excelで複数ブックの同一セルに...
-
エクセルファイルをオープンし...
-
Excelで指定範囲のデータ...
-
WorkBooksをオープンさせずにシ...
-
ワードやエクセルで「時間が来...
-
フォルダ内の複数ファイルから...
-
VBA バックグラウンドで別ブッ...
-
【マクロ】for nest について ...
-
Excel起動時に特定のワークシー...
-
印刷しようとすると強制終了に...
-
EXCELで複数のブックの特定のセ...
-
エクセルで別ブックをバックグ...
-
エクセルVBAで、PDFファイルを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【マクロ】アクティブセルの時...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
エクセルを共有するとPCによっ...
-
WorkBooksをオープンさせずにシ...
-
エクセルで参照しているデータ...
-
Excelファイルをダブルクリック...
-
Excelでブックの共有を掛けると...
-
「ブックの共有」を有効にして...
-
Excel(2010)のフィルターが保...
-
Excelの新しい空白のブックを開...
-
同じフォルダへのハイパーリン...
-
フォルダ内の複数ファイルから...
-
エクセルで別ブックをバックグ...
-
別ブックから入力規則でリスト...
-
ブックのピボットを別ブックに...
-
エクセルでウィンドウの枠固定...
-
エクセルにおける,「ブック」...
-
Excelで複数ブックの同一セルに...
-
Excelで指定範囲のデータ...
おすすめ情報