[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロのシートコピー&シート名の指定+α』(たぬき)
おはようございます。
いつもお世話になっております。
今回 シートのコピー&シート名の指定のマクロを
ネットから調べて稼働してみたいのはいいのですが
どっちも短所と長所があり
両方からいいのを使いたいのですが
探しても探しても見つかりませんでした。
そもそも知識不足のためどういじればいいのか…
分からず指導を仰ぎたく何卒よろしくお願いいたします。
1つ目はシート列4から足していく面でいいが
シート名がかぶるとエラーになる。
2つ目はシート名かぶらないコードになっているが
シート列が一番右になる。
希望はシート列4から足して行きつつ
シート名がかぶらないコードになります…
1つ目
Sub Macro1()
Sheets("フォーマット").Select Sheets("フォーマット").Copy Before:=Sheets(4) 'シートコピーし、シート列番号〜シート作成 ActiveSheet.Name = Format(Date, "yymmdd")
End Sub
2つ目
Sub macro2()
Dim sh_name As String Dim n As Long
sh_name = Format(Date, "yymmdd") ActiveSheet.Copy After:=ActiveSheet
On Error Resume Next
ActiveSheet.Name = sh_name
n = 1 Do Until Err.Number = 0 Err.Clear n = n + 1 ActiveSheet.Name = sh_name & "(" & n & ")" Loop End Sub
< 使用 Excel:Excel2010、使用 OS:Windows7 >
まずは、
どのシートをコピーして、どのシートの前にしたい(あるいは後)かを日本語で(シート名か左からの位置、もしくは右からの位置)表現してみましょう^^
(まっつわん) 2017/10/17(火) 10:30
macro2の >ActiveSheet.Copy After:=ActiveSheet これをMacro1同様、 Sheets("フォーマット").Copy Before:=Sheets(4) とすればイケるのでは?
あと、本題とは直接関係ないですが、 なるべく On Error Resume Next に頼らない方法を採用すべきだと思います。
せっかくループで重複確認するのだから、 たとえば
Sub Macro3() Dim sh_name As String, Sh As Worksheet, n As Long Sheets("フォーマット").Select Sheets("フォーマット").Copy Before:=Sheets(4) 'シートコピーし、シート列番号〜シート作成 sh_name = Format(Date, "yymmdd") n = 1 For Each Sh In Worksheets If Sh.Name Like sh_name & "*" Then n = n + 1 Next If n > 1 Then sh_name = sh_name & "(" & n & ")" ActiveSheet.Name = sh_name End Sub
みたいな感じで。
(白茶) 2017/10/17(火) 10:31
>シート列4から足していく あ。 右方向に増やしていくのかな?
スミマセン これはまっつわんさんの仰る通りですね (白茶) 2017/10/17(火) 10:37
コードありがとうございました。
いけました。
もっと勉強します・・・
On Error Resume Next に頼らない方法を採用すべき その理由も調べてみます><
まっつわん様
そうでした、
シート4から足していくと
追加分は4って決まっているので
古いシートはどんどん右にいって最新は4で確認できる面を考えていました
すみません、説明分が足りなかったようで><
(たぬき) 2017/10/17(火) 12:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.