Excellマクロで検索とシート作成等を行いたいのですが、全くの素人のためご教授願えればと思います。
具体例として、範囲A-Z列まで約2000行のデータが存在します。
(1)Z列のセルの値に着目し、セルの値と同じ名前のシートが存在するか確認する。
(2)セルの値と同じ名前のシートが存在しない場合、セルの値と同じ名前のシートを作成する。(既に存在する場合は作成しない)
(3)範囲A-Z列の行データをセルの値と同じ名前のシートに追加する
以上の(1)(2)(3)の作業を1-2000行で繰り返すようにしたいです。
解りやすくご説明いただけると幸いです。宜しくお願いいたします。
No.1
- 回答日時:
常識的に考えての質問にした方が良いかと思います。
この質問では最大2000シートの表ができることに
なりますが、それが可能か否かを考えて最大数の制限を
すべきと思います。
参考までにエクセル仕様についてはこちら
http://www.relief.jp/itnote/archives/000579.php
貴重な助言ありがとうございます。
現在考えられるシート作成数はおよそ20くらいだと思いますので
上限を30に設定したほうがよさそうです。
No.2
- 回答日時:
Sub test()
Dim W_count As Integer, i As Integer, j As Integer
Dim Check As Boolean
W_count = Worksheets.Count
For i = 1 To Range("D65535").End(xlUp).Row
Check = False
For j = 1 To W_count
If Worksheets(j).Name = Range("D" & i).Value Then
Check = True
Exit For
End If
Next j
If Check = False Then
Sheets.Add.Name = Range("D" & i).Value
Sheets("Sheet1").Range("a1:z1").Copy
Sheets(Range("D" & i).Value).Select
ActiveSheet.Paste
End If
Next i
End Sub
でいかがでしょう
回答が遅くなり、すいませんでした。
本マクロを実行してみたところ、以下のエラーが発生しました。
実行時エラー”1004”
アプリケーション定義またはオブジェクト定義のエラー
エラー箇所 : Sheets.Add.Name = Range("D" & i).Value
マクロ実行後では、セルの値を名前にしたシートが
1つだけ作成されていましたが、シート内に行データは
入力されていませんでした。
推測として、D列のセルの値が名前であるシートを
複数回作成しているから、エラーが発生するんではないかと
思っていますが、実際はどうなんでしょうか?
No.3
- 回答日時:
2000行のデータをZ列の値を基にその値名のシート、または新規シートを作成し
その値名をシート名として、該当するシートに振り分けてデータを積み重ねるのかな?
問題は2000行の値が重複しているのか?いないのか?かも。
返事が遅くなり、すいませんでした。
>2000行のデータをZ列の値を基にその値名のシート、または新規シートを作成し、その値名をシート名として、該当するシートに振り分けてデータを積み重ねるのかな?
→
行データが入っているシートと同一ブック内に
Z列の値を基に、新規シート作成と該当するシートに振り分けてデータを積み重ねていく処理がしたいと思っております。
>問題は2000行の値が重複しているのか?いないのか?かも。
→
Z列の値において、重複しているものもあります。
Z列の値の種類として、20個程度あります。
No.4
- 回答日時:
No2です
ちょっと訂正です。
Sub test()
Dim W_count As Integer, i As Integer, j As Integer
Dim Check As Boolean
W_count = Worksheets.Count
For i = 1 To Range("Z65536").End(xlUp).Row
Check = False
For j = 1 To W_count
If Worksheets(j).Name = CStr(Range("Z" & i).Value) Then
Check = True
Exit For
End If
Next j
If Check = False Then
Sheets.Add.Name = Range("Z" & i).Value
Sheets("Sheet1").Range("a" & i & ":z" & i).Copy
Sheets(CStr(Range("Z" & i).Value)).Select
ActiveSheet.Paste
End If
Next i
End Sub
返事が遅くなり、すいませんでした。
本マクロはD列のセルの値をシート名にしていた箇所を
Z列のセルの値をシート名にするよう、変更したと見受けられます。
本マクロを実行したところ、以下のエラーが発生しました。
実行時エラー”1004”
アプリケーション定義またはオブジェクト定義のエラー
エラー箇所 : Sheets.Add.Name = Range("Z" & i).Value
以前、回答していただいたマクロと同様のエラーが
発生してしまいました。
このエラーは以前のマクロと同様なエラーであると
考えられますが、具体的な解決方法が思い浮かびません。
せっかく回答していただけたのに、申し訳ありません
No.5ベストアンサー
- 回答日時:
#3です。
Sub try()
Dim ws_m As Worksheet
Dim ws_s As Worksheet
Dim r As Range
Dim rr As Range
Dim rs As Range
Application.ScreenUpdating = False
Set ws_m = Worksheets("Sheet1") 'データが入っているシート
With ws_m 'データシートのZ1~Zの最終行まで
Set r = .Range(.Range("Z1"), .Cells(Rows.Count, "z").End(xlUp))
End With
For Each rr In r
On Error Resume Next
Set ws_s = Worksheets(CStr(rr.Value))
On Error GoTo 0
If ws_s Is Nothing Then
Worksheets.Add After:=Worksheets(Worksheets.Count)
Set ws_s = ActiveSheet
ws_s.Name = CStr(rr.Value)
End If
If ws_s.Range("A1").Value = "" Then
Set rs = ws_s.Range("A1")
Else
Set rs = ws_s.Cells(Rows.Count, 1).End(xlUp).Offset(1)
End If
rs.Resize(, 26).Value = rr.Offset(, -25).Resize(, 26).Value
Set ws_s = Nothing
Next
Application.ScreenUpdating = True
Set ws_m = Nothing
Set ws_s = Nothing
Set r = Nothing
Set rs = Nothing
End Sub
一例です。
ご参考になれば。
回答ありがとうございます。
本マクロを試して見た結果、思い通りの処理が行えました。
ありがとうございました。
また、助言・回答等でご協力いただいた皆様に
感謝いたします。ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Excel(エクセル) エクセルのマクロについて教えてください。 2 2023/02/26 13:19
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2022/08/04 13:56
- Visual Basic(VBA) Excelのマクロコードについて教えてください。 1 2022/03/27 13:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/01/23 11:02
- Excel(エクセル) 複数セルデータを別シートの単一セルにコピーしたい。(詳細をご参照ください) 1 2022/12/14 15:08
- Excel(エクセル) エクセルのマクロについて教えてください。 1 2023/02/25 11:55
- Visual Basic(VBA) シート間で同じ値があったら指定範囲をコピーして貼り付け 1 2022/11/07 08:01
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
ピボットテーブルから抽出デー...
-
ExcelVBAで、指定したシートに...
-
エクセルで入力→日付を自動判別...
-
VBAでシート名をセルから取得し...
-
Excelの中央値の複数条件について
-
エクセルファイルを軽くする方法
-
IF, ISNUMBER, INDIRECTの組み...
-
VBA セルの値と同じ名前のシー...
-
Excel 複数のシートからグラフ...
-
【エクセルVBA】処理速度を...
-
VBAのoffsetの動き方について教...
-
エクセル シフト勤務表から、...
-
Excelの選択肢をポップアップリ...
-
【Excel】VLOOKUP関数で複数の...
-
複数のシートからデータを抽出...
-
Excel:グラフの元データをグル...
-
テキストボックス内の文字のふ...
-
Excelで数値→文字列変換で指数...
-
Excelで行ごとコピー、同じ行を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで入力シートから別シ...
-
VBA セルの値と同じ名前のシー...
-
Excel 複数のシートからグラフ...
-
ExcelVBAで、指定したシートに...
-
Excelの中央値の複数条件について
-
Excel ハイパーリンク先のセル...
-
IF, ISNUMBER, INDIRECTの組み...
-
エクセルのワークシートが重く...
-
VBAでシート名をセルから取得し...
-
エクセルで入力→日付を自動判別...
-
質問:特定文字列から空白行ま...
-
エクセル自動の年月
-
エクセル シフト勤務表から、...
-
エクセル マクロを使って日々...
-
VBAのoffsetの動き方について教...
-
エクセルVBA:表の内容を担当者...
-
Excel日付変更との参照先の連動
-
EXCEL VBA 一致しないデータの...
-
エクセルについて質問です 日付...
-
Excelの選択肢をポップアップリ...
おすすめ情報