🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

3回答

21665閲覧

VBA シート選択のシート名にワイルドカード

tttkkk

総合スコア38

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

1クリップ

投稿2021/02/16 13:16

いつも初歩的な質問に答えて頂きありがとうございます。

シートを選択するときにシート名を使うことでシートを選択できるかと思うのですが、その際にワイルドカードを使用することはできるのでしょうか。
また同時変数の使用できるのでしょうか。

したいことを簡素化して申し上げますと、
A1セルに別のシート名の一部が入力されていて、そのA1セルに入力された値とワイルドカードを繋げて、別シートを取得したいということです。
実際にマクロを実行しますと インデックスが有効範囲にありません。 というエラーメッセージが出てきてしまいます。

以下にサンプルコードを載せましたので参考にお願い致します。

VBA

1Sub sheetNameWildcard() 2 3Dim a1Cell 4'アクティブシートのa1セルに入力されている別のシート名の一部を取得 5a1Cell = ActiveSheet.Cells(1, 1).Value 6'取得した別のシート名の一部とワイルドカードを繋げてシートを取得 7Sheets(a1Cell & "_*").Cells(1, 1).Value = 12345 8 9End Sub 10

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2021/02/16 13:31

そのようなことはできません。自前でワイルドカードを展開する仕組みを造るしかないです。
guest

回答3

0

そのような機能はないので、自分で作成しましょう。
標準モジュールに下記の関数を作成します。

vba

1Public Function FindSheet(SheetName As String) As Worksheet 2 Dim ws As Worksheet 3 4 For Each ws In Worksheets 5 If ws.Name Like SheetName Then 6 Set FindSheet = ws 7 Exit For 8 End If 9 Next 10End Function

上記を作成しておけば、
質問のコードのSheetsFindSheet に変更するだけです

vba

1Sub sheetNameWildcard() 2 3 Dim a1Cell 4 'アクティブシートのa1セルに入力されている別のシート名の一部を取得 5 a1Cell = ActiveSheet.Cells(1, 1).Value 6 '取得した別のシート名の一部とワイルドカードを繋げてシートを取得 7 FindSheet(a1Cell & "_*").Cells(1, 1).Value = 12345 8 9End Sub

投稿2021/02/16 13:59

hatena19

総合スコア34073

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tttkkk

2021/02/17 03:42

なるほど!そういうやり方もあるんですね! ネットで調べるとやはりfor eachを使うのが主みたいですが、新しい知見を教えて頂きありがとうございます! ただ今回は私も初心者というのもありまして、一般的なfor eachを使ってみようと思いましたので、申し訳ありませんが、ベンストアンサーは外させて頂きました
guest

0

ベストアンサー

シート名をワイルドカードで直に引き当てる方法はたぶんなかったと思います。
以下のように Like演算子を使って、ActiveWorkbook.Sheets 配列から探すのが最もご希望に近い方法ではないかと思います。

VBA

1Sub sheetNameWildcard() 2 3Dim a1Cell As String 4'アクティブシートのa1セルに入力されている別のシート名の一部を取得 5a1Cell = ActiveSheet.Cells(1, 1).Value 6'取得した別のシート名の一部とワイルドカードを繋げてシートを取得 7Dim wc As String 8wc = a1Cell & "_*" 9 10' ワイルドカードを使ってシートを取得 11Dim objSheet As Worksheet 12For Each objSheet In ActiveWorkbook.Sheets 13 If objSheet.Name Like wc Then 14 objSheet.Cells(1, 1).Value = 12345 15 Exit For 16 End If 17Next objSheet 18 19End Sub

投稿2021/02/16 13:49

kozuchi

総合スコア1193

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

こんな感じでしょうか。

VBA

1Sub sheetNameWildcard() 2 3 Dim a1Cell 4 'アクティブシートのa1セルに入力されている別のシート名の一部を取得 5 a1Cell = ActiveSheet.Cells(1, 1).Value 6 '取得した別のシート名の一部とワイルドカードを繋げてシートを取得 7 8 Dim ws As Worksheet 9 For Each ws In ActiveWorkbook.Worksheets 10 If ws.Name Like a1Cell & "_*" Then Exit For 11 Next 12 If ws Is Nothing Then Exit Sub 13 ws.Cells(1, 1).Value = 12345 14 15End Sub

投稿2021/02/16 13:48

jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問