• ベストアンサー

エクセル マクロ 検索 シート作成

Excellマクロで検索とシート作成等を行いたいのですが、全くの素人のためご教授願えればと思います。 具体例として、範囲A-Z列まで約2000行のデータが存在します。 (1)Z列のセルの値に着目し、セルの値と同じ名前のシートが存在するか確認する。 (2)セルの値と同じ名前のシートが存在しない場合、セルの値と同じ名前のシートを作成する。(既に存在する場合は作成しない) (3)範囲A-Z列の行データをセルの値と同じ名前のシートに追加する 以上の(1)(2)(3)の作業を1-2000行で繰り返すようにしたいです。 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • n-jun
  • ベストアンサー率33% (959/2873)
回答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 一例です。 ご参考になれば。

niwaniwa12
質問者

お礼

回答ありがとうございます。 本マクロを試して見た結果、思い通りの処理が行えました。 ありがとうございました。 また、助言・回答等でご協力いただいた皆様に 感謝いたします。ありがとうございました。

その他の回答 (4)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答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

niwaniwa12
質問者

お礼

返事が遅くなり、すいませんでした。 本マクロはD列のセルの値をシート名にしていた箇所を Z列のセルの値をシート名にするよう、変更したと見受けられます。 本マクロを実行したところ、以下のエラーが発生しました。 実行時エラー”1004” アプリケーション定義またはオブジェクト定義のエラー エラー箇所 : Sheets.Add.Name = Range("Z" & i).Value 以前、回答していただいたマクロと同様のエラーが 発生してしまいました。 このエラーは以前のマクロと同様なエラーであると 考えられますが、具体的な解決方法が思い浮かびません。 せっかく回答していただけたのに、申し訳ありません

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.3

2000行のデータをZ列の値を基にその値名のシート、または新規シートを作成し その値名をシート名として、該当するシートに振り分けてデータを積み重ねるのかな? 問題は2000行の値が重複しているのか?いないのか?かも。

niwaniwa12
質問者

お礼

返事が遅くなり、すいませんでした。 >2000行のデータをZ列の値を基にその値名のシート、または新規シートを作成し、その値名をシート名として、該当するシートに振り分けてデータを積み重ねるのかな? → 行データが入っているシートと同一ブック内に Z列の値を基に、新規シート作成と該当するシートに振り分けてデータを積み重ねていく処理がしたいと思っております。 >問題は2000行の値が重複しているのか?いないのか?かも。 → Z列の値において、重複しているものもあります。 Z列の値の種類として、20個程度あります。

  • kmetu
  • ベストアンサー率41% (562/1346)
回答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 でいかがでしょう

niwaniwa12
質問者

お礼

回答が遅くなり、すいませんでした。 本マクロを実行してみたところ、以下のエラーが発生しました。 実行時エラー”1004” アプリケーション定義またはオブジェクト定義のエラー エラー箇所 : Sheets.Add.Name = Range("D" & i).Value マクロ実行後では、セルの値を名前にしたシートが 1つだけ作成されていましたが、シート内に行データは 入力されていませんでした。 推測として、D列のセルの値が名前であるシートを 複数回作成しているから、エラーが発生するんではないかと 思っていますが、実際はどうなんでしょうか?

  • a987654
  • ベストアンサー率26% (112/415)
回答No.1

常識的に考えての質問にした方が良いかと思います。 この質問では最大2000シートの表ができることに なりますが、それが可能か否かを考えて最大数の制限を すべきと思います。 参考までにエクセル仕様についてはこちら http://www.relief.jp/itnote/archives/000579.php

niwaniwa12
質問者

お礼

貴重な助言ありがとうございます。 現在考えられるシート作成数はおよそ20くらいだと思いますので 上限を30に設定したほうがよさそうです。

関連するQ&A

  • シート作成について

    Excellマクロで検索とシート作成等を行いたいのですが、全くの素人のためご教授願えればと思います。 (1)"入力"シートのC5から値のある行(C列)まで同じシートがあるか確認する (2)同じ名前のシートが無ければ、"原紙"シートに"入力"シートのG列からX列までを転記しシートをコピーする(既にある場合は作成なし、転記のみ) ※転記する列は、入力シートG=原紙シートC など指定される (3)コピーしたシート名をセルの値(C列)と同じ名前に変更 (4)C5から値のある最終行まで(1)~(3)を繰り返す 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

  • EXCELマクロ 検索

    Excelマクロで 検索とその結果のコピーを行いたいのですが、全くの素人のためご教授願えればと思います。 Excel2002で 2つの表から共通する部分をKEYに付随するデータ抜き出したいと思っています。関数VLOOKUPを使えば簡単な作業かと思いますがVBAではそのVLOOKUPやFIND、それにLOOPなどの使い方が今ひとつ理解 できません。 具体例として 表1には A-Z列まで約1000行のデータが存在します。 表2は表1と同じシート上の直ぐ隣列AA-AK列まで表1より必ず多い行数のデータが存在します。また表1のA列にあるデータは すべて必ず表2のAA列に含まれます。 行いたい作業は、VLOOKUPのような検索で、表1A列と表2AA列に共通したデータがあった場合、表2の該当セルを基準としてALからBJ列セルに表1の該当行のデータB-Z列をすべてコピー貼り付けすることです。 A・AA列とも同列内では重複も空白もなくソートされています。 これら以外の列には同じValueのデータや空白が存在します。またデータ件数(行数)も表1・2とも一定ではなく都度変動します。 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

  • 【再】エクセル2013 マクロをご教示ください

    Sheet1で選択しているセルの行をSheet2に転写したいです。 Sheet1とSheet2の4行目に見出し。 Shet1にはA~U列までデータがあります。(途中空白セルの場合もあり) Sheet1の5行目以降の、あるセルを選択してマクロを実行すると Sheet1のC~S列までをSheet2のA~Q列へコピペしたいです。 Sheet1は H列に必ずデータがあるので それらを最終行の判断基準とします。 Sheet1での選択セルは複数の場合もあります。 ただし、同じ行のセルを複数選択しても Sheet2への貼り付けは1行とします。 マクロを実行する度に、Sheet1での選択セルの該当行が Sheet2へ追加されるようにしたいです。 (Sheet2へコピペされたデータは残します) また、Sheet2への貼り付け内容が同じだった場合は 注意喚起のため メッセージで 「重複データが存在します」を表示したいです。 重複の判断基準はSheet2の B、D、F列とします。 宜しくお願い致します。

  • EXCELでの検索マクロを作りたいのですが

    マクロの初心者です。氏名の検索マクロを作成したいのですが分かりません。 A列:名前 B列:郵便番号 C列:住所 と 名前等のデータを(ランダムに)入力したシート1を作成し、 シート2にシート1の「A列:名前」から性(たとえば青木)で検索して検索ボタン(マクロボタン)を押して該当データを表示させるようにしたいのですが。

  • EXCELマクロ 検索 VLOOKUP

    Excelマクロで 検索とその結果のコピーを行いたいのですが、全くの素人のためご教授願えればと思います。 Excel2002で 2つの表から共通する部分をKEYに付随するデータ抜き出したいと思っています。関数VLOOKUPを使えば簡単な作業かと思いますがVBAではそのVLOOKUPやFIND、それにLOOPなどの使い方が今ひとつ理解 できません。 具体例として 表1には A-Z列まで約1000行のデータが存在します。 表2は表1と同じシート上の直ぐ隣列AA-AK列まで表1より必ず多い行数のデータが存在します。また表1のA列にあるデータは すべて必ず表2のAA列に含まれます。 行いたい作業は、VLOOKUPのような検索で、表1A列と表2AA列に共通したデータがあった場合、表2の該当セルを基準としてALからBJ列セルに表1の該当行のデータB-Z列をすべてコピー貼り付けすることです。 A・AA列とも同列内では重複も空白もなくソートされています。 これら以外の列には同じValueのデータや空白が存在します。またデータ件数(行数)も表1・2とも一定ではなく都度変動します。 解りやすくご説明いただけると幸いです。宜しくお願いいたします。

  • EXCEL で検索、更新したい

    EXCEL でわからない箇所があり質問します。 前提条件 Sheet1 A列:名前 B列:年月 C列:値 データは、名前と年月で一意になるデータシートがあり マスターデータとして全データが登録されている Sheet2 A列:名前 B列:年月 C列:値 ある条件でとあるデータベースから抽出した名前と年月の一覧がある この段階で値のセルには何も入っていない やりたい事 (1)この状態でマクロを実行し、A列、B列を条件に該当する行から    C列を抽出しSheet2 にセット (2)Sheet2のC列の値を変更後、マクロの実行で    A列、B列の条件を元該当する行から、Sheet1の C列に値を更新 (3)もし、Sheet2のA列、B列の条件に該当しない行がある場合、    Sheet1に行追加しC列を格納 という事をしたいと考えています。 Sheet1 の全ての行をマクロでループさせて A列、B列をif分で比較し行を取得し、Sheet2 に張る場合、 遅くなるのであまりやりたくないと思っています Find 関数も考えたのですが、ヘルプを見る限り、条件が1つしか指定でき ないように思えるのですが、複数列の条件を指定できる Find 関数 あるいは、類似の関数とあかがあるのなら教えてください 最悪は、EXCEL ADO で、自分自身をSQLで抽出、Update、Insert を行う 事も考えていますが、 EXCELのセル内の式で、INDEX関数やDGET関数で簡単に抽出できるのに (ただ、値を変更するので式はかけないけど・・・) わざわざ、ADOでプログラムを組むのもどうなんだろうと疑問に思ってます。

  • マクロの記録で作成したマクロがデータが代わると誤動作する。

    マクロの記録で作成したマクロがデータが代わると誤動作する。 エクセルファイルにてA列からJ列までデータがあります。 行数は2,000行です。データは全て半角です。 A列の値が 1=入庫 2=出庫 3=戻入 と全て置換 B列の値が 1=社内品 2=社外品 3=受入 と全て置換。 でこのB列が3で受入に置換えたら その隣のA列の値を 受入に置き換えたい。 さらに A列の値が置換え後の入庫と戻入場合はその行のJ列の値を切り取り、K列に貼付をし A列の値が置換え後の出庫の場合はその行のJ列の値を切り取り、L列に貼付をしたいです。 マクロの記録で行いましたが、 いったんデータを全て消して別データを貼り付けしたらA列B列の置換えは正常ですが B列が3の場合にA列を再置換えと、J列の値を切り取り、K列、L列への貼付が 誤動作します。 (別データは雛形は同じです。入力規則も同じですがデータは変わります。  例:セルA1のデータは1、 新しいデータはセルA1は2 等) マクロの記録中では、並べ替えでソートし上記条件でセルを選択しコピペをしました。 並べ替えは2回です。 マクロ文を見ると、セル名がずらずら並んで、セル番号が指定されてます。 (マクロ記録中に選択したセル番号が全部記録されてます。) 文を見ると、上記条件で置換えやコピペでなく このセルはこう置換え、このセルはこうコピペのように読めます。 これでは、データが代わったら、別の動きになるのかな?と思いました。 こういう場合はマクロではどうやって記録すればいいでしょうか?

  • エクセルのマクロの作成について

    エクセルのマクロの作成について教えてください!! 一つのセルの中に3行の文字があるとして・・・・ そのセルの2行目と3行目を隣のセルにうつしたいです。 例えば・・ E列の1行目のセルに あいうえお かきくけこ さしすせそ と文字が入っていて、 それを F列の1行目のセルに かきくけこ さしすせそ のみ移動させたいです。 1行~300行ほどあって、さらにデータは増え続けます、手作業での移行が困難になってきました。 そもそも一つのセルの中身の文字の一部を違うところに移動させるマクロは組めるのでしょうか。 当方初心者です。お手柔らかにお願いします。

  • エクセル 複数シートのデータを1シートにまとめるマクロ

    エクセルの複数シートにデータがあります。同じ条件の人のデータだけをひとつのシートにまとめたいのですが、マクロを教えていただけますでしょうか。それとも、マクロ以外に良い方法がありますか? エクセル初心者なので、あたりまえのことも知らないかもしれません。。。  【データ】 ●シート1からシート20まで、同じ配列でデータがあります。 ●1行目は見出しです。2行目から1人づつのデータです。(多くても65行までと思っています。) ●A列に到達度、B列に出欠をいれました。 ●C列からM列が氏名、課題、その他のデータです。 ●リストはシート21にあります。  【こんな作業でしょうか?】 ●シート1から20で A列が「C」または「D」ならば その行のA列からM列をコピーして シート21のA列からM列に形式を値にして張り付ける ●シート1から20で B列が「欠」ならば その行のA列からM列をコピーしてシート21のA列からM列に形式を値にして張り付ける (っというのが私の乏しい知識で考えた方法なのですが、これでは不具合がでますか? もちろん、この方法じゃなくもっといいのがあれば、それをやってみたいです。)

  • ■ エクセルのマクロで出来ますか?

    エクセルマクロの初心者です。 現在、業務で以下の様な表を作成し、請求書の発行を行っています。 「sheet1」A列のNo.を「sheet2」のA列(例えばセルA1)に入力すると VLOOKUP関数で必要項目が請求書の雛形に表示される仕組です。 複数行を抽出する場合は、複数のNo.(例: 1,3,10)を手入力(例: A1,A2,A3・・・)しております。 ----- <sheet1>    A列  B列   C列   D列  ・・・ 1行 No.  項目1  項目2  項目3 ・・・ 2行  1   値1   値2   値3  ・・・ 3行  2   値4   値5   値6  ・・・ 4行  3   値7   値8   値9  ・・・ <sheet2> 請求書の雛形 セルA1~A10に請求書を発行したい<sheet1>A列のNo.を入力。 ----- これを、A列の左に行を挿入、各行にチェックボックスを配置し、 チェックボックスをオンにした行のB列(行挿入前はA列)の値(No.)を 「sheet2」のA列(例えばA1/複数の場合はA1,A2,A3・・・10行程度)に コピーを行う仕組を作ることを検討しています。 複数のNo.をチェック(1,3,10)した場合は、 「sheet2」のA1,A2,A3の様に、上から順になれば理想的です。 説明が悪く、意図が伝わり難いこととは思いますが、 これらの作業を行うマクロ(他の方法も可)を組むことは可能でしょうか。 ご教授いただければ幸いです。 よろしくお願いいたします。