- ベストアンサー
エクセルVBAで一番左の可視シート名を取得
cj_moverの回答
こんにちは。 今思い付いたばかりで検証もしてませんので、 使えるかどうか、 使うかどうか、 の判断はお任せするとして、、、。 MsgBox Application.CommandBars("Workbook tabs").Controls(1).Caption こんなのもありかも。 何に使うか、 ちょっと想像できませんが(^^;) #1end-u さんのコメントは、この際の必要十分だと思います。 コメントとして付け加えることはありません。 >end-u さん、 先日はマクロ内の数式についてフォロー頂いて ありがとうございました。(ちょっと嬉し恥ずかし) プロットを書くのも気(手)が抜けない、と感じました。 (っか、抜き処が下手だったと反省) また何かお気づきのことなど(もし)ございましたら ツッコミ入れてやってくださいませ。よろこんで拝聴しますので。 (あ、これ、特にレス不要です)(規約了解済)
関連するQ&A
- エクセルVBAでSheet1.ActivateとSheet(n).Activate
エクセル2000です。 VBAでの疑問点を教えてください。 Sub test1() Sheet1.Activate MsgBox ActiveSheet.Name End Sub これは問題なく作動します。 Sub test2() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheet(n).Activate MsgBox ActiveSheet.Name Next End Sub これは「SubまたはFunctionがていぎされていません」というエラーになります。 もちろん、 Sub test3() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets(n).Activate MsgBox ActiveSheet.Name Next End Sub のように書けばOKなのは存じておりますが、これではSheet名に係らず、左から順番となってしまいます。 Sub test4() x = ThisWorkbook.Worksheets.Count For n = 1 To x Sheets("Sheet" & n).Activate MsgBox ActiveSheet.Name Next End Sub のように明確にシート名として記述すればOKなのですが、それでは、Test1のSheet1.Activate が通って、Sheet(n).Activate が通らないのはなぜでしょう? しょうもない質問でごめんさない。
- ベストアンサー
- オフィス系ソフト
- エクセルVBAでシートの種類を取得したい
エクセル2000です。 BOOK内の全シートに、ある処理をしようと思いますが、シートの種類によって分岐させたいのです。そのためにはシートが Worksheetか、古いですがDialogsheetか、あるいはグラフなのかを判別しなければなりません。 ためしに、 Sub test01() For Each st In Sheets st.Activate MsgBox st.Type Next End Sub としてみましたが取得できませんでした。 シートの種類を取得するにはどのような記述になるのでしょうか?
- ベストアンサー
- オフィス系ソフト
- エクセルVBA シート名の部分一致検索について エクセル2007
VBAでエクセルの全シート名を部分一致で検索したいと考えています。 そこで以下のコードを書いたのですが、 インプットボックスにどんな文字列を入力しても全てのシート名を 取得してしまって途方にくれています。 どなたかお助けください。 Sub test01() Dim name As String Dim ws As Worksheet shn = InputBox("検索文字列を入力") For Each ws In ThisWorkbook.Worksheets If ws.Name Like " * " & name & " * " Then ws.Activate MsgBox ws.Name End If Next ws End Sub
- 締切済み
- オフィス系ソフト
- エクセルVBAでシートコピー
Sheets("Sheet1")をCopyして、現在の最終のシートの後に持っていき、それを変数wsに設定しようとしています。 Sub TEST01() Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) Set ws = Sheets(Sheets.Count) MsgBox ws.Name End Sub これで通常はうまくいきますが、最終シートが非表示になっているとwsはその非表示のシートが指定され、Sheets("Sheet1")をCopyしたものでなくなってしまいます。 Sheets("Sheet1")をCopyして、現在の最初のシートの前に持っていき、それを変数に設定しようとしています。 Sub TEST02() Sheets("Sheet1").Copy Before:=Sheets(1) Set ws = Sheets(1) MsgBox ws.Name End Sub これで通常はうまくいきますが、最初のシートが非表示になっているとwsはその非表示のシートが指定され、Sheets("Sheet1")をCopyしたものでなくなってしまいます。 Set ws = ActiveSheet で設定できましたが、それ以外の方法はないでしょうか?
- ベストアンサー
- Excel(エクセル)
- エクセルVBAでシート名検索
エクセル2000です。 あるブックにAAAという名前のワークシートが存在するかどうかの判定方法の質問です。 現在はそのブックを開き、 Sub test() For Each sh In ActiveWorkbook.Worksheets If sh.Name = "AAA" Then flag = "ありまする。" Else flag = "ないでござる。" End If Next MsgBox flag End Sub のように判定しています。 質問は、 1.開かずに判定することは可能かどうか?可能ならその方法 2.上記コードのように各シート総当り以外にシート名を検索する方法があるか?あるならその方法 です。よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- 【Excel VBA】ワークシートの表示(続き)
すみません。 追記が出来なかったため、コードの続きをこちらに記載します。 For i = 1 To 12 If actsht = tmp(i) Then Flag = 1 Anser = MsgBox("翌月分シートを作成しますか?", vbYesNo + vbDefaultButton1, "確認") If Anser = vbYes Then ActiveSheet.Copy After:=ActiveSheet ActiveSheet.Name = tmp(i + 1) Sheets(actsht).Tab.ColorIndex = 2 Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value ActiveSheet.Range("A2").Select Exit For ElseIf Anser = vbNo Then Exit For End If End If Next If Flag = O Then MsgBox ("新しいワークシートを作成出来ません。") End If If actsht = tmp(i) Then If Sheets(元データ).Visible = False Then Sheets(元データ).Visible = True End If End If End Sub
- 締切済み
- 情報工学
- Excel VBAである特定文字列を含むシート名例えば「りんご(1)」
Excel VBAである特定文字列を含むシート名例えば「りんご(1)」「みかん(1)」「みかん(2)」「いちご(1)」のシート名があるファイルに対して「みかん*」で検索を行い、一致したシート(複数Sheet)=「みかん(1)」「みかん(2)」に対して処理を行う方法はありますでしょうか。 宜しくお願いいたします。 完全一致するファイルは下記のようなのですが、Scheck = 0の部分が理解でいません。 型は何にすればよいのでしょうか。 Sub Sheet_Add5() Scheck = 0 For Each sheet_name In Worksheets If sheet_name.Name = ("検索シート名") Then Scheck = 1 Exit For End If Next If Scheck = 0 Then Sheets.Add.Name = "検索シート名" End If End Sub
- ベストアンサー
- オフィス系ソフト
- エクセル、ワークシートが保護されているかどうかを判断するVBAは?
以下のように書いてもダメでした。 どう直せばよいでしょうか? Sub TEST2() Dim n As Integer n = ThisWorkbook.Worksheets.Count For i = 1 To n If Worksheets(i).Protect = False Then MsgBox Worksheets(i).Name End If Next End Sub
- ベストアンサー
- オフィス系ソフト
- Excel VBAの不可解(?)な動作について
Excel 2000 VBAでの質問です。 Sheet1に以下のようなコードを書きました。 --------------------------------------------------------- Public Sub test() Application.DisplayAlerts = False Sheets("Sheet2").Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "test" Sheets("test").Visible = xlVeryHidden Sheets("Sheet3").Visible = xlVeryHidden Sheets("test").Visible = True Sheets("test").Delete Sheets("Sheet2").Copy After:=Sheets(Sheets.Count) Sheets(Sheets.Count).Name = "test" '問題の行 Application.DisplayAlerts = True End Sub --------------------------------------------------------- このコードで期待している動作は、最終的にSheet3(xlVeryHiddenになっている)の後ろにSheet2をコピーし、その名前を「test」にするというものです。 しかし、実際にはSheet3の後ろにSheet2がコピーされるものの、名前はSheet2が「test」と変更されてしまいます。 Sheets.Countの値はSheet3をさしているはずなのですが・・・。 皆様に教えていただきたいのは、 ・この意図しない動作がなぜ起こるか ・どうすればこの問題を回避できるか です。よろしくお願いいたします。 もし初歩ミスでしたら、申し訳ありません・・・。ご指摘ください。
- ベストアンサー
- その他(プログラミング・開発)
- エクセル 漢字のシート名をあいうえお順に並び替え
エクセル2003を使っています。 シートが80ほどあり、シート名は漢字で氏名になっています。 その80あるシートをあいうえお順に並べたいと思っています。 別のサイトで下記を見つけたので、使いました。 並びかわりましたが、漢字を使っているせいか、あいうえお順に 並び変わりませんでした。 試しに、2~3のシート名をカタカナに変えたら正しく並び変わりました。 やはり、漢字だとうまく並びかわらないのでしょうか。 また、何か別の方法はありますか? 教えて下さい。 Sub SortSheets() Dim intLoopA As Integer Dim intLoopB As Integer For intLoopA = 1 To Sheets.Count For intLoopB = 1 To Sheets.Count - 1 If Sheets(intLoopB).Name > Sheets(intLoopB + 1).Name Then Sheets(intLoopB).Move after:=Sheets(intLoopB + 1) End If Next intLoopB Next intLoopA End Sub
- ベストアンサー
- オフィス系ソフト
お礼
cj_moverさま、いつもありがとうございます。 > Application.CommandBars("Workbook tabs").Controls(1).Caption なるほどぉ! シート名を表示させるコマンドがこのように応用できるのですね。 驚きました。 ありがとうございます。