Excel VBA 質問スレッド №2053 (解決済)
Excelの複数sheetの一括加工
投稿者 : 焼きそば 投稿日時 : 2024/11/28(Thu) 12:02:17 OS : 未指定 EXCEL : 未指定
Excelのマクロ初心者です。
質問させていただきますので、どなたかご教授して頂ければ、幸いです。
以下のようなマクロを現在作成中です。
・指定したExcelのsheet一括して加工する。
ただし、Excelのsheet数はExcelによって異なる。Excelによっては、2~9sheetある。
・なにを加工したか、分かりやすくするため、加工前のsheetは残す。
☆困っていること。
それぞれのsheetで置換・非表示等の処理を行っているのですが、F8ではちゃんと動くものの、
実行を押すと正常に動かなくなってしまう。
どなたか助けて頂けると幸いです。
Excelのマクロ初心者です。
質問させていただきますので、どなたかご教授して頂ければ、幸いです。
以下のようなマクロを現在作成中です。
・指定したExcelのsheet一括して加工する。
ただし、Excelのsheet数はExcelによって異なる。Excelによっては、2~9sheetある。
・なにを加工したか、分かりやすくするため、加工前のsheetは残す。
☆困っていること。
それぞれのsheetで置換・非表示等の処理を行っているのですが、F8ではちゃんと動くものの、
実行を押すと正常に動かなくなってしまう。
Sub Macro1() Dim NameFileOpen As String Dim NameFileOpenOnlyFilename As String Dim ws As Worksheet '指定したExcelファイルを開く MsgBox "加工するExcelファイルを指定して下さい。" NameFileOpen = Application.GetOpenFilename(FileFilter:="Microsoft EXCELブック,*.xlsx") If NameFileOpen <> "False" Then Workbooks.Open FileName:=NameFileOpen End If NameFileOpenOnlyFilename = Dir(NameFileOpen) '開いたブックでの処理 'Excelのsheetを選択してコピー Workbooks(NameFileOpenOnlyFilename).Activate Workbooks(NameFileOpenOnlyFilename).Sheets().Copy Before:=Sheets(1) 'コピーしたsheetの判定 For i = 1 To Sheets.Count 'シート名に、「(2)」を含む場合 If InStr(Sheets(i).Name, "(2)") > 0 Then 'ここの処理で毎回正常に動かなくなってしまいます。F8では動くのに…… For s = 1 To 100 If Sheets(i).Cells(s, 2) = "青森" Then '青森があったら Sheets(i).Cells(s, 2) = Replace(Cells(s, 2), "青森", "青森県")'青森県に置換 Sheets(i).Cells(s, 2).Offset(0, 2).ClearContents'青森の隣の隣のセルをクリア End If If Sheets(i).Cells(s, 2) = "埼玉" Then Sheets(i).Cells(s, 2) = Replace(Cells(s, 2), "埼玉", "埼玉県") Sheets(i).Cells(s, 2).Offset(0, 2).ClearContents End If If Sheets(i).Cells(s, 1) = "北海道" Then Cells(s, 1).EntireRow.Hidden = True End If Next s End If Next i End Sub
どなたか助けて頂けると幸いです。
スポンサーリンク
[返信 1] Re : Excelの複数sheetの一括加工
投稿者 : さんこう 投稿日時 : 2024/11/28(Thu) 14:23:25
>実行を押すと正常に動かなくなってしまう。
「正常に動かなく」のような、雑な表現では問題点を把握できません。
具体的に、「○○となるはずなのに、△△となってしまう」のように、現象を把握しましょう。
※シート指定が中途半端なことが影響しているようにも思いますが、
「F8ではちゃんと動く」ことにはならないですね。
>実行を押すと正常に動かなくなってしまう。
「正常に動かなく」のような、雑な表現では問題点を把握できません。
具体的に、「○○となるはずなのに、△△となってしまう」のように、現象を把握しましょう。
※シート指定が中途半端なことが影響しているようにも思いますが、
「F8ではちゃんと動く」ことにはならないですね。
[返信 2] Re : Excelの複数sheetの一括加工
投稿者 : 焼きそば 投稿日時 : 2024/11/28(Thu) 15:12:34
さんこう様
具体的な不具合は以下の通りです。
・本当はsheet2の列で非表示されるべきなのに、sheet1の列で非表示になってしまう。
If Sheets(i).Cells(s, 1) = "北海道" Then
Cells(s, 1).EntireRow.Hidden = True
End If
→sheet1では北海道の列は非表示になりますが、sheet2では非表示にならず、
sheet1の30列が非表示になる。(sheet2の30列に北海道がある)
・本当は隣の隣のセルをクリアしたのだが、一緒に青森県もクリアになってしまう。
If Sheets(i).Cells(s, 2) = "青森" Then '青森があったら
Sheets(i).Cells(s, 2) = Replace(Cells(s, 2), "青森", "青森県")'青森県に置換
Sheets(i).Cells(s, 2).Offset(0, 2).ClearContents'青森の隣の隣のセルをクリア
End If
→sheet2以降に現れる現象です。sheet1には隣の隣のセルだけクリアされます。
こういった現象が起きてしまっています……
さんこう様
具体的な不具合は以下の通りです。
・本当はsheet2の列で非表示されるべきなのに、sheet1の列で非表示になってしまう。
If Sheets(i).Cells(s, 1) = "北海道" Then
Cells(s, 1).EntireRow.Hidden = True
End If
→sheet1では北海道の列は非表示になりますが、sheet2では非表示にならず、
sheet1の30列が非表示になる。(sheet2の30列に北海道がある)
・本当は隣の隣のセルをクリアしたのだが、一緒に青森県もクリアになってしまう。
If Sheets(i).Cells(s, 2) = "青森" Then '青森があったら
Sheets(i).Cells(s, 2) = Replace(Cells(s, 2), "青森", "青森県")'青森県に置換
Sheets(i).Cells(s, 2).Offset(0, 2).ClearContents'青森の隣の隣のセルをクリア
End If
→sheet2以降に現れる現象です。sheet1には隣の隣のセルだけクリアされます。
こういった現象が起きてしまっています……
[返信 3] Re : Excelの複数sheetの一括加工
投稿者 : さんこう 投稿日時 : 2024/11/28(Thu) 15:44:47
説明ありがとうございます。
やはり、シート指定が中途半端なことが原因と思われます。
>・本当はsheet2の列で非表示されるべきなのに、sheet1の列で非表示になってしまう。
>Cells(s, 1).EntireRow.Hidden = True
非表示にしたい行の指定に、シート指定がないので、アクティブシートが非表示になってしまっているのでしょう。
>・本当は隣の隣のセルをクリアしたのだが、一緒に青森県もクリアになってしまう。
>Sheets(i).Cells(s, 2) = Replace(Cells(s, 2), "青森", "青森県")'青森県に置換
「青森県もクリアになってしまう」のではなく、別のシート(アクティブシート)のデータが書き込まれているのでしょう。
説明ありがとうございます。
やはり、シート指定が中途半端なことが原因と思われます。
>・本当はsheet2の列で非表示されるべきなのに、sheet1の列で非表示になってしまう。
>Cells(s, 1).EntireRow.Hidden = True
非表示にしたい行の指定に、シート指定がないので、アクティブシートが非表示になってしまっているのでしょう。
>・本当は隣の隣のセルをクリアしたのだが、一緒に青森県もクリアになってしまう。
>Sheets(i).Cells(s, 2) = Replace(Cells(s, 2), "青森", "青森県")'青森県に置換
「青森県もクリアになってしまう」のではなく、別のシート(アクティブシート)のデータが書き込まれているのでしょう。
[返信 4] Re : Excelの複数sheetの一括加工
投稿者 : 焼きそば 投稿日時 : 2024/11/28(Thu) 17:20:26
さんこう様
助言ありがとうございました。
アクティブシートを指定したところ、無事に動作が確認できました。
さんこう様
助言ありがとうございました。
アクティブシートを指定したところ、無事に動作が確認できました。
当掲示板について
- Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
- 記事内ではHTMLのタグは使用できません。
- 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
- Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
- Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
( 処理日時 : 2024-12-07 22:53:51 )