
おはようございます。
現在マクロを実行しているブックのシート名を下のようなコードで取得していますが、これを
開いているもうひとつのブックのシート名を
マクロ実行しているシート“しーと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で質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/13 08:41
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) 【マクロ】マクロが保存されているエクセルとは、別のエクセルブックの全シートの非表示列を再表示したい 1 2022/12/24 20:48
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
このQ&Aを見た人はこんなQ&Aも見ています
-
今年はじめたいことは?
今年はこれをはじめたい!ということを教えてください!
-
初めて自分の家と他人の家が違う、と意識した時
子供の頃、友達の家に行くと「なんか自分の家と匂いが違うな?」って思いませんでしたか?
-
みんなの【マイ・ベスト積読2024】を教えてください。
積読、ついついしちゃいませんか?そこでみなさんの 「2024年に買ったベスト積読」を聞きたいです。
-
あなたの人生で一番ピンチに陥った瞬間は?
これまでの人生で今振り返ると「あの時、1番ピンチだったなぁ...」という瞬間はありますか?
-
思い出すきっかけは 音楽?におい?景色?
記憶をふと思い出すきっかけは 音楽、におい、景色 どれですか?
-
EXCEL VBAで2つEXCELを起動したときのブック名取得の方法
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの関数 ENTERを押...
-
エクセルを共有するとPCによっ...
-
VBAでブックを非表示で開いて処...
-
Excelの警告について
-
WorkBooksをオープンさせずにシ...
-
フォルダ内の複数ファイルから...
-
同じフォルダへのハイパーリン...
-
Excelファイルをダブルクリック...
-
VBA:ワークブックを変数でActi...
-
Excelで指定範囲のデータ...
-
Excelでブックの共有を掛けると...
-
エクセルにおける,「ブック」...
-
エクセルファイルを開かずにpdf...
-
ブックのピボットを別ブックに...
-
エクセルでウィンドウの枠固定...
-
複数ファイルから特定シートの...
-
VBA バックグラウンドで別ブッ...
-
エクセル 複数のブックを一度...
-
ブックの保護ができないんです...
-
【マクロ】【VBA】同じフォルダ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelの警告について
-
エクセルを共有するとPCによっ...
-
エクセルの関数 ENTERを押...
-
VBAでブックを非表示で開いて処...
-
Excelファイルをダブルクリック...
-
WorkBooksをオープンさせずにシ...
-
エクセルファイルを開かずにpdf...
-
Excelでブックの共有を掛けると...
-
Excelで複数ブックの同一セルに...
-
同じフォルダへのハイパーリン...
-
エクセルで参照しているデータ...
-
Excel(2010)のフィルターが保...
-
フォルダ内の複数ファイルから...
-
印刷しようとすると強制終了に...
-
ブックのピボットを別ブックに...
-
フォルダ内の複数ファイルから...
-
エクセルで「ディスクがいっぱ...
-
エクセルでウィンドウの枠固定...
-
エクセルファイルをオープンし...
-
エクセルにおける,「ブック」...
おすすめ情報