シート作成のマクロについて
どなたかご教授ください。
テンプレートとリストがあります。
sheet(リスト)のデータ項目をsheet(テンプレート)をコピーし、シート作成するということが目的でした。←ここまでは、下記のマクロで出来ました。
私が作ったマクロだと項目が増えて、また同じマクロを実行するとエラー(同じシート名があるため)となってしまいます。
そこで、やりたい事は、元あるデータはそのままで、追加した分だけ、テンプレートをコピーしてシートを作成したいです。色々調べても、元あるデータは削除が多いため、調べても答えが見つかりませんでした。
どなたか教えて頂ければ、幸いです。よろしくお願いします。
Sub シート作成()
Dim ナム As Range
Dim z As Integer
z = Worksheets("リスト").Cells(Rows.Count, "A").End(xlUp).Row
For i = 4 To z
For Each ナム In Worksheets("リスト").Cells(i, "A")
Worksheets("テンプレート").Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = ナム.Value
ActiveSheet.Range("A1") = ナム.Value
Next
Next i
End Sub
※以下、追記
sheet リスト↓
項目
1
2
2.5←新たに追加
3
4
5
新しく項目が加わっても、sheetが項目順になれば、良いなと思っております。
No.3ベストアンサー
- 回答日時:
こんにちは
すでにシート名リストがA列にあると言う事でしょうか
リストの途中に新しい名前を追加してシートを作成する場合で
一例サンプルを示します。私の持ち合わせ改造ですのでよくある方法かと、、(間違った解釈かも知れません)
関数式の処理の場合、式は示される事が多いのですが、VBA処理の場合、コードが示される事が少ないです
VBA実行のリスクを理解した上で自己責任で検証してください。
’シートリストが作成されている事が条件になります。
Sub シート作成()
Dim ナム As Range
Dim z As Range
Dim chk As String
With Worksheets("リスト")
Set z = .Range("A4", .Cells(Rows.Count, "A").End(xlUp))
End With
chk = word_chk(z)
If chk <> "" Then
MsgBox (chk)
Else
For Each ナム In z
If Not same_name_chk(ナム.Text) Then
Worksheets("テンプレート").Copy After:=Worksheets(ナム.Offset(-1).Text)
ActiveSheet.Name = ナム.Value
ActiveSheet.Range("A1") = ナム.Value
End If
Next
End If
End Sub
'同名チェック
Function same_name_chk(chkName As String)
Dim ws As Worksheet, flag As Boolean
For Each ws In Worksheets
If ws.Name = chkName Then flag = True
Next ws
same_name_chk = flag
End Function
'NG文字
Function word_chk(Rng As Range)
Dim r As Range, k As Variant
If WorksheetFunction.CountBlank(Rng) > 0 Then
word_chk = "範囲内に空白があります": Exit Function
End If
For Each r In Rng
For Each k In Array(":", "\", "/", "?", "*", "[", "]")
If InStr(r.Value, k) > 0 Then
word_chk = r.Address(0, 0) & "に使用出来ない文字があります": Exit Function
End If
Next k
If Len(r.Text) > 31 Then
word_chk = r.Address(0, 0) & "は文字が多すぎます": Exit Function
End If
Next r
word_chk = ""
End Function
私は独学で覚える時、出来ているものを検証、分解して覚えました
基礎から積み上げるのが正しいと思いますが、プログラマーになるつもりがないのなら、どちらでもいいのかな、、と思います。学習方法は、お任せしますので鵜呑みにせず理解して試してください。これを怠けると自身で作成する事は出来ないので。。
No.2
- 回答日時:
こんにちは
>また同じマクロを実行するとエラー(同じシート名があるため)となってしまいます。
シートを作成する前に、既に同名のシートが存在するかどうかをチェックして、存在したら何もせずに次へ進むようにすれば宜しいでしょう。
◇シートの存在をチェックする方法の例
・既存のシート名をチェックする方法
https://www.tipsfound.com/vba/10009
・シートにアクセスし、エラー発生の有無で判断する方法
https://mk-55.hatenablog.com/entry/2017/05/24/00 …
>sheetが項目順になれば、良いなと思っております。
全部のシートを作成し終わったところで、シートの並び替えを行えばよいと考えられます。
◇シートの並び替え処理の例
・既に並べ替え後のリストができている状態なので、後半のみを参考にすれば宜しいかと。
https://vbabeginner.net/sort-sheets-any-order/
なお、ご質問には直接関係ありませんけれど・・・
ご提示のコードでは
For Each ナム In Worksheets("リスト").Cells(i, "A")
'~~~ 処理 ~~~
Next
として、ループさせる構文になっていますけれど、必よな処理は一回だけなのでループ構文にする必要がありません。
そのままでも、一回しかループしないので問題にはなりませんけれど、コードを無用に複雑にしているだけと言えます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 2つのシートの任意のセルの番号が一致したら、一致した行をコピーする VBA 2 2023/06/19 20:48
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) VBAが止まります。 1 2022/09/02 14:51
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
別のシートから値を取得するとき
-
【ExcelVBA】全シートのセルの...
-
Excel マクロについての相談
-
Excelマクロのエラーを解決した...
-
ユーザーフォームに入力したデ...
-
実行時エラー'1004': WorkSheet...
-
excelのマクロで該当処理できな...
-
【Excel VBA】Worksheets().Act...
-
同じ作業を複数のシートに実行...
-
XL:BeforeDoubleClickが動かない
-
VBAで、シート間の転記するコー...
-
ブック名、シート名を他のモジ...
-
シートが保護されている状態で...
-
エクセルのマクロについて教え...
-
ExcelのVBAのマクロで他のシー...
-
実行時エラー1004「Select メソ...
-
VBA 最終行まで数式をコピーする
-
【ExcelVBA】動的にボタン、ボ...
-
【VBA】指定した検索条件に一致...
-
VBA 検索して一致したセル...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
別のシートから値を取得するとき
-
ユーザーフォームに入力したデ...
-
【ExcelVBA】全シートのセルの...
-
同じ作業を複数のシートに実行...
-
Excelマクロのエラーを解決した...
-
excelのマクロで該当処理できな...
-
XL:BeforeDoubleClickが動かない
-
ExcelVBA シート名を複数セルか...
-
実行時エラー'1004': WorkSheet...
-
VBA 存在しないシートを選...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
ブック名、シート名を他のモジ...
-
【Excel VBA】Worksheets().Act...
-
ExcelのVBAのマクロで他のシー...
-
エクセルのシート名変更で重複...
-
特定の文字を含むシートだけマ...
-
シートが保護されている状態で...
-
Excel マクロについての相談
-
VBA 検索して一致したセル...
おすすめ情報