質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

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

Q&A

1回答

711閲覧

特定の名前の含まれるシートのみ処理を行いたいのですが……

amatsukaze

総合スコア1

VBA

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

0グッド

1クリップ

投稿2023/01/25 07:55

編集2023/01/25 07:57

前提

当方VBA初心者です。お力添えいただけませんでしょうか。

EXCELのシートとシートを比較し、相違があれば赤字にするというVBAがあるのですが、特定の名前が含まれているシートすべてに処理を行いたいと考えています。
どのような処理を足したらよいか、どのように対応したらよいかわからず、こちらに相談させていただきました。

前提

・C2セルに比較したいExcelファイルが格納されているフォルダのファイルパスが記載されています

・C3セルには、比較するために利用するCSVの格納されているフォルダのファイルパスが記載されています。

・B9:B60には、C2のセルに書かれているExcelファイル名が記載されています
(これは別のマクロで記載をおこなっています。)

行いたいことは、このB列に記載されているExcelを開くと、シートが複数入っており、『チェック』という名前の含まれたシートのU列のみ処理を行うという風にしたいと考えております。

しかし、シート名は『チェック』『チェック(1)』『チェック(2)』と複数あります

実現したいこと

このB列に記載されているExcelを開くと、シートが複数入っており、『チェック』という名前の含まれたシートのU列のみ処理を行うという風にしたいと考えております。

しかし、シート名は『チェック』『チェック(1)』『チェック(2)』と複数あります

該当のソースコード

Sub checkName() Apprlication.ScreenUpdating = False If MsgBox("チェックをおこないますか?", vbYesNo) Then Exit Sub End If Dim TargetBook As Workbook Dim CsvBook As Workbook Dim Path, CSVFileP As String Dim TargetSheetNames() As String 'C2セルに、中身を確認したいファイルのファイルパスを記載しています 'C3セルに、C2セルの中身をチェックするためのCSVファイルが入っています Path = Range("C2").Value CSVFileP = Range("C3").Value Dim buf As String 'ファイルリスト(VBAの入っている当EXCELファイル)のB9:B60には、C2のファイルパスの中に入っているファイルのファイル名が記載されています 'ファイルリストの最終行を取得 Dim FLLastRowNo FLLastRowNo = Cells(Rows.Count, 2).End(xlUp).Row Dim FileList FileList = Range("B9:C" & FLLastRowNo).Value For i = LBound(FileList, 1) To UBound(FileList, 1) Dim newFileName As String newFileName = FileList(i, 1) 'ここでは省略しますが以下の処理が記載されています '①CSVFilePを開く処理→②比較元になるA列の値を取得→③CSVファイルを閉じる 'ファイルリスト(VBAの入っている当EXCELファイル)のB9:B60が記載されており、それを開く処理だと思います↓ If Dir(Path & newFileName) <> "" Then Workbooks.Open Path & newFileName Set TargetBook = Workbooks(newFileName) Else MsgBox "ファイルがありません" & Filename, vbExclamation Exit Sub End If For Each objWorksheet In TargetBook.Worksheets If objWorksheet.Name - strseetName Then blnFileExists = True Exit For End If Next '↓↑このあたりに、シート名に関する処理を入れたいです TargetSheetNames = getsheetName(TargetBook) 'ファイルリスト(VBAの入っている当EXCELファイル)のB9:B60が記載されており、それを開いた後、最終行を取得 Dim newLastRowNo newLastRowNo = TargetBook.Sheets(TargetSheetName).Cells(Rows.Count, 4).End(xlUp).Row 'U列を確認したいので、U列を取得 Dim CheckIchranList As Variant CheckIchranList = Range("U6:U" & newLastRowNo).Value '省略しますが、U列を一行ずつチェックし、比較。CSVFilePのA列の値と比較し、相違があれば赤字にする処理が記載されています Nexti MsgBox "チェックが完了しました" Application.ScreenUpdating = True End Sub

試したこと

下記コードを見かけたので、入れれば処理ができるかと思ったのですが、どのように組み込んだらよいかわからず……

sub getSubSheetName() const Find_str ="チェック" Dim sh As Object For Each sh In Sheets If sh.Name Like Find_str & "*" Then sh.Select MsgBox sh.Name End If Next sh End sub

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

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

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

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

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

guest

回答1

0

各行の意図が読めませんでしたが、

VBA

1 2 '↓↑このあたりに、シート名に関する処理を入れたいです 3 4 TargetSheetNames = getsheetName(TargetBook) ←??? 5 6 7 8 'ファイルリスト(VBAの入っている当EXCELファイル)のB9:B60が記載されており、それを開いた後、最終行を取得 9 Dim newLastRowNo 10 newLastRowNo = TargetBook.Sheets(TargetSheetName).Cells(Rows.Count, 4).End(xlUp).Row 11 12 13 14 'U列を確認したいので、U列を取得 15 Dim CheckIchranList As Variant 16 CheckIchranList = Range("U6:U" & newLastRowNo).Value 'Tagetのactivesheetという解釈でいいのでしょうか 17 18 19 '省略しますが、U列を一行ずつチェックし、比較。CSVFilePのA列の値と比較し、相違があれば赤字にする処理が記載されています 20 21

この部分が1シート分の処理であるならばそのまま挟めばいいのではないでしょうか?

VBA

1'・・・ 2 const Find_str ="チェック" 3 Dim sh As Object 4 For Each sh In TargetBook.Worksheets 5 If sh.Name Like Find_str & "*" Then 6 7'意図が全くわからないのでいったんコメ 8 ' TargetSheetNames = getsheetName(TargetBook) 9 10 11 12 'ファイルリスト(VBAの入っている当EXCELファイル)のB9:B60が記載されており、それを開いた後、最終行を取得 13 Dim newLastRowNo 14 newLastRowNo = sh.Cells(Rows.Count, 4).End(xlUp).Row 15 16 17 18 'U列を確認したいので、U列を取得 19 Dim CheckIchranList As Variant 20 CheckIchranList = sh.Range("U6:U" & newLastRowNo).Value    21 22 23 '省略しますが、U列を一行ずつチェックし、比較。CSVFilePのA列の値と比較し、相違があれば赤字にする処理が記載されています 24 25 End If 26 Next sh 27 28 Next i 29

これで対象ブックのチェックフォルダだけぶん回すって処理になると思いますが

投稿2023/01/31 02:51

pig_vba

総合スコア807

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問