[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vbaを用いてシートごとに自動転記する際にエラーが発生する。』(にこ)
vbaを用いてシートごとに自動転記する際にエラーが発生してしまいます。
プログラム9で
実行時エラー1004
この名前は既に使用されています。別の名前を入力してください。
といわれてしまいます。
このような場合、どうすればよろしいでしょうか。
'プログラム1|プログラム開始
Sub CreateSheets()
'プログラム2|シート設定
Dim ws1 As Worksheet, ws2 As Worksheet
Set ws1 = ThisWorkbook.Worksheets("データ")
Set ws2 = ThisWorkbook.Worksheets("原紙")
'プログラム3|最終行を取得
Dim cmax1 As Long
cmax1 = ws1.Range("A65536").End(xlUp).Row
'プログラム4|「データ」シートをコピーして重複削除
Dim ws3 As Worksheet
ws1.Copy after:=ThisWorkbook.Worksheets(Worksheets.Count)
Set ws3 = ThisWorkbook.ActiveSheet
ws3.Range("A:Y").RemoveDuplicates Columns:=Array(1), Header:=xlYes
'プログラム5|プログラム4で重複削除したシートの最終行を取得
Dim cmax2 As Long
cmax2 = ws3.Range("A65536").End(xlUp).Row
'プログラム6|コピーしたシートを並び替え
With ws3.Sort
.SortFields.Clear
.SortFields.Add Key:=ws3.Range("A1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SetRange ws2.Range("A2:Y" & cmax2)
.Header = xlNo
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'プログラム7|重複削除、並び替えしたシートの2行目から最終行まで処理
Dim i As Long
For i = 2 To cmax2
Dim sagaku As String
sagaku = ws3.Range("A" & i).Value
'プログラム8|「原紙」シートをコピー
Dim ws4 As Worksheet
ws2.Copy after:=ThisWorkbook.Worksheets(Worksheets.Count)
Set ws4 = ThisWorkbook.ActiveSheet
'プログラム9|コピーした「原紙」シートの名前を変更 ←ここでエラーが発生します。
ws4.Name = sagaku
'プログラム10|転記先の行数をn=2で初期化
Dim n As Long: n = 2
'プログラム11|「データ」シートのA列がsagakuと一致したら転記
Dim j As Long
For j = 2 To cmax1
If sagaku = ws1.Range("A" & j).Value Then
ws4.Range("A" & n & ":Y" & n).Value = ws1.Range("A" & j & ":Y" & j).Value
n = n + 1
End If
Next
'プログラム12|オブジェクト解放
Set ws4 = Nothing
Next
'プログラム13|重複削除、並び替えしたシートを削除
Application.DisplayAlerts = False
ws3.Delete
Application.DisplayAlerts = True
'プログラム14|新しいエクセルファイルとして保存
Dim newfilename As String
newfilename = Format(Date, "yyyy-mm-dd") & "_" & ThisWorkbook.Name
Application.DisplayAlerts = False
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & newfilename
Application.DisplayAlerts = True
'プログラム15|プログラム終了
End Sub
< 使用 Excel:Excel2010、使用 OS:Windows11 >
別の名前つけるしかないのでは・・・ もしくは最初にsagakuシート削除するとか。 (稲葉) 2023/03/24(金) 14:05:28
りんご 1個
みかん 5個
いちご 4個
りんご 6個 みたいなエクセルがある場合
VBAで
「りんご」シートを作って
りんご 1個
りんご 6個
「みかん」シートを作って
みかん 5個
「いちご」シートを作って
いちご 4個
といった感じにしたいです。
(にこ) 2023/03/24(金) 14:20:07
>りんご 1個 >みかん 5個 >いちご 4個 >りんご 6個 みたいなエクセルがある場合
↓のようなデータがあるシート(データシート)という意味ですか?
|[A] |[B]
[1]|品目 |個数
[2]|りんご|1個
[3]|みかん|5個
[4]|いちご|4個
[5]|りんご|6個
※原紙シートのA1セルに貼り付けます。
Sub test()
Dim ws1 As Worksheet, ws2 As Worksheet
Dim i As Long, col As New Collection
Set ws1 = Worksheets("データ")
Set ws2 = Worksheets("原紙")
On Error Resume Next
For i = 2 To ws1.Cells(Rows.Count, "A").End(xlUp).Row
col.Add ws1.Cells(i, "A"), ws1.Cells(i, "A")
Next
On Error GoTo 0
For i = 1 To col.Count
ws2.Copy After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = col(i)
With ws1.Range("A1")
.AutoFilter 1, col(i)
.CurrentRegion.Copy Range("A1")
.AutoFilter
End With
Next
End Sub
(フォーキー) 2023/03/24(金) 14:41:12
Dim ws4 As Worksheet
'すでにsagaku名のシートがある場合ws4に代入
On Error Resume Next
Set ws4 = ThisWorkbook.Worksheets(sagaku)
On Error GoTo 0
'無い場合は
If ws4 Is Nothing Then
'プログラム8|「原紙」シートをコピー
ws2.Copy after:=ThisWorkbook.Worksheets(Worksheets.Count)
Set ws4 = ThisWorkbook.ActiveSheet
'プログラム9|コピーした「原紙」シートの名前を変更 ←ここでエラーが発生します。
ws4.Name = sagaku
Else
ws4.Activate
End If
このすぐ後のnの値など他にも修正する点はありますが、とりあえず。
(火災報知器) 2023/03/24(金) 14:54:32
まだ試してませんが、上記のコードでやってみます。
ありがとうございます。
(にこ) 2023/03/24(金) 15:37:15
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.