エクセル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も見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルでブック内の倍率がバ...
-
【ExcelVBA】マクロの入ったシ...
-
特定のシートのみ再計算させな...
-
ハイパーリンクでジャンプした...
-
Wordで差し込み印刷時に表示す...
-
EXCELの図形(テキストボックス)...
-
【Excel VBA】データ貼り付け先...
-
エクセルで複数のシートに画像...
-
エクセル、特定のシートにパス...
-
特定の複数のシートに同じ処理...
-
エクセルシートのタブの階層化表示
-
エクセルの2つのシートを並び...
-
アクセスからエクセルのシート...
-
エクセルでリンク貼り付けした...
-
Accessのテーブルを既存のExcel...
-
エクセルのシート名のフォント...
-
Excel 全シート上のボタンを削...
-
エクセルのシート連番の振り直し
-
エクセルを開くとメニューバー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
EXCELで複数のシートを一度に「...
-
エクセルで複数のシートに画像...
-
エクセルでブック内の倍率がバ...
-
特定のシートのみ再計算させな...
-
ワークシートそのものの色を変...
-
【ExcelVBA】マクロの入ったシ...
-
ハイパーリンクでジャンプした...
-
エクセルのシート連番の振り直し
-
エクセル、特定のシートにパス...
-
エクセルの2つのシートを並び...
-
エクセルのシー名を二段表示に...
-
Wordで差し込み印刷時に表示す...
-
Accessのテーブルを既存のExcel...
-
【Excel VBA】データ貼り付け先...
-
EXCELの「シートの見出し」のフ...
-
EXCELの図形(テキストボックス)...
-
accessへエクセルの複数のシー...
-
アクセスからエクセルのシート...
-
特定の複数のシートに同じ処理...
-
エクセルで、シートの名前を変...
おすすめ情報