![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?8acaa2e)
エクセルVBAで一番左側にあるシート名を取得する場合、通常は
Sub test01()
MsgBox Sheets(1).Name
End Sub
で簡単にできますが、このSheets(1)が非表示になっている場合でもその名前が取得されるため、見た目での一番左側にあるシート名ではなくなってしまいます。
もちろん、非表示になっているシートを除外して
Sub test02()
Dim n As Integer
For n = 1 To Sheets.Count
If Sheets(n).Visible Then
MsgBox Sheets(n).Name
Exit For
End If
Next
End Sub
とすれば取得できるのはわかりますが、こんなまだるっこい方法以外に簡単に一番左の可視シート名を取得する方法はないでしょうか?
(^∇^)?
ご教示くださいませ。
No.2ベストアンサー
- 回答日時:
こんにちは。
今思い付いたばかりで検証もしてませんので、
使えるかどうか、
使うかどうか、
の判断はお任せするとして、、、。
MsgBox Application.CommandBars("Workbook tabs").Controls(1).Caption
こんなのもありかも。
何に使うか、
ちょっと想像できませんが(^^;)
#1end-u さんのコメントは、この際の必要十分だと思います。
コメントとして付け加えることはありません。
>end-u さん、
先日はマクロ内の数式についてフォロー頂いて
ありがとうございました。(ちょっと嬉し恥ずかし)
プロットを書くのも気(手)が抜けない、と感じました。
(っか、抜き処が下手だったと反省)
また何かお気づきのことなど(もし)ございましたら
ツッコミ入れてやってくださいませ。よろこんで拝聴しますので。
(あ、これ、特にレス不要です)(規約了解済)
cj_moverさま、いつもありがとうございます。
> Application.CommandBars("Workbook tabs").Controls(1).Caption
なるほどぉ!
シート名を表示させるコマンドがこのように応用できるのですね。
驚きました。
ありがとうございます。
No.3
- 回答日時:
ぅは。
CommandBars("Workbook tabs")っていう手がありましたか。すみません。
>簡単なメソッドやプロパティは無いです。
ウソついてました。ごめんなさい。
使えるものであれば、簡略なものが良いというのは私も日頃から思ってるので異論ありません。
cj_moverさん、ありがとうございます。また勉強させて頂きました。
qa4007086を始めとして、いつも感服してレス拝読させて頂いてます。
前スレッドもそうですが、独特な着眼点が新鮮で、勉強になる事ばかりです。
これからも宜しくお願いします。
No.1
- 回答日時:
局所的なコードのみの話であれば、Sub test02()は別に『まだるっこい方法』ではなく、
真っ当な方法に思えます。
LoopしてのVisible判定は必要でしょう。
簡単なメソッドやプロパティは無いです。
記述が婉曲...という事であれば、
それなりのFunctionを作っておけば良いという話で終わるのかもしれませんね。
Sub test()
MsgBox EndShtName(ThisWorkbook)
End Sub
Function EndShtName(ByVal wb As Workbook, _
Optional rightflg As Boolean = False) As String
Dim i As Long
With wb.Sheets
If rightflg Then
For i = .Count To 1 Step -1
If .Item(i).Visible = xlSheetVisible Then
Exit For
End If
Next
Else
For i = 1 To .Count
If .Item(i).Visible = xlSheetVisible Then
Exit For
End If
Next
End If
EndShtName = .Item(i).Name
End With
End Function
サンプルとしては
Sub sample()
Application.ExecuteExcel4Macro ("select.all()")
MsgBox ActiveWindow.SelectedSheets(1).Name
ActiveSheet.Select
End Sub
こんな感じのもないことはないですが、
ActiveWorkbook限定ですし、一旦Selectして解除、は手間です。
ExecuteExcel4Macro ("select.all()")は
全Sheetを選択したい時、非表示シートがあると Sheets.Select できない場面で
使い道があるかもしれない手法、としてのみ留めておいたほうが良いでしょうね。
実際に、最左のシート名を取得しなければいけないような処理なのか、
という事も見直す必要があるのでは。
シートインデックスに左右されるような条件は排除しておいたほうが良いと思いますが。
必要であればブックの保護でシート構成が変更できないようにしておくなど。
あと、表示判定に If Sheets(n).Visible Then は使えません。
If Sheets(n).Visible = True Then のほうがまだしも、です。
Visibleプロパティには定数xlVeryHiddenがありますから。
end-uさま、今回もいろいろご指導ありがとうございます。
とても勉強になります。
> Visibleプロパティには定数xlVeryHiddenがありますから。
そのとおりでしたね。うっかりしておりました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Excel(エクセル) Excel VBAどこが間違ってますか? 4 2023/07/17 10:04
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 6 2022/06/08 12:55
- Visual Basic(VBA) VBA 請求書自動作成 3 2022/04/24 01:58
- Visual Basic(VBA) VBA Userformで一部別シートに転記がしたいのですが 2 2023/05/24 13:08
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Visual Basic(VBA) userformでSheetを選択して開くコード 1 2023/05/15 16:27
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 2 2022/03/25 08:33
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
マクロボタンを押すたびに違う動作をしたい
Excel(エクセル)
-
セルの値が変ると自動でマクロが実行される。
その他(Microsoft Office)
-
[VBA] 配列の要素を一括で検証する方法
Excel(エクセル)
-
-
4
VBA データ(特定値)のある最終行を取得したい
Excel(エクセル)
-
5
Excelでデータ全通り組み合わせ出力方法
Excel(エクセル)
-
6
複数の条件に合う行番号を取得するには
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
【Excel VBA】データ貼り付け先...
-
特定のシートのみ再計算させな...
-
エクセルでブック内の倍率がバ...
-
エクセルを開くとメニューバー...
-
Wordで差し込み印刷時に表示す...
-
エクセルの2つのシートを並び...
-
PCで使用できる暗記シート ア...
-
特定の複数のシートに同じ処理...
-
エクセルでリンク貼り付けした...
-
ワークシートそのものの色を変...
-
Accessのテーブルを既存のExcel...
-
ハイパーリンクでジャンプした...
-
エクセルのシー名を二段表示に...
-
EXCELの図形(テキストボックス)...
-
エクセル、特定のシートにパス...
-
エクセルでシートを追加したと...
-
エクセルVBAで一番左の可視シー...
-
エクセルマクロでシート名を条...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
エクセルで複数のシートに画像...
-
ハイパーリンクでジャンプした...
-
ワークシートそのものの色を変...
-
エクセルの2つのシートを並び...
-
【ExcelVBA】マクロの入ったシ...
-
エクセル、特定のシートにパス...
-
エクセルのシート連番の振り直し
-
EXCELの図形(テキストボックス)...
-
特定の複数のシートに同じ処理...
-
【Excel VBA】データ貼り付け先...
-
エクセルのシー名を二段表示に...
-
EXCELの「シートの見出し」のフ...
-
Accessのテーブルを既存のExcel...
-
Wordで差し込み印刷時に表示す...
-
accessへエクセルの複数のシー...
-
エクセル、別のシートの表をポ...
-
指定したシート名以外を非表示...
おすすめ情報