• ベストアンサー

複数シートの一部をシート一枚にまとめるには?

住所録があります。 一枚のシートに住所、名前、電話番号が横にならんで3つのセルに記載されているのですが毎月100シートほど出来上がっておりこれを一枚のシートに手入力で転記しております。 あまりにも非効率的なのでVBA等で一括処理をしたいのですがどうすればよいでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 既に回答は出ているようですが、こんな風にしたらどうでしょうか。 iHEAD オプションのタイトルというのは、  住所  名前  電話番号 こうなっていることです。 すでに集計用のシートが決まっているなら、このようにします。 ただし、集計用のシートは、右端に追いやられます。 先頭に、(') をいれ、コメントブロックします。   'Set DataSh = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count)) コードのコメントブロックを外します。  ''集計用のシートがすでに決まっているなら、上の行に、「'」を付けて、ここに登録する   Set DataSh = .Worksheets(シート名)   If DataSh.Index <> .Worksheets.Count Then     DataSh.Move After:=.Worksheets(.Worksheets.Count)   End If 行が満杯になったら、新しいシートが右隣に、加えられます。 標準モジュール '----------------------------------------------- Sub TransferData()   Dim DataSh As Worksheet   Dim i As Integer   Dim j As Long   Dim n As Long   Dim k As Integer   Const iHEAD As Integer = 1 '(0はタイトルなし、1はタイトルあり)   If iHEAD > 1 And iHEAD < 0 Then MsgBox "iHEAD エラー!", , "定義エラー": Exit Sub   Const mErrNum As Integer = 513      With ActiveWorkbook     '--------------------     Set DataSh = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count))          ''集計用のシートがすでに決まっているなら、上の行に、「'」を付けて、ここに登録する     'Set DataSh = .Worksheets("Sheet1")     'If DataSh.Index <> .Worksheets.Count Then     ' DataSh.Move After:=.Worksheets(.Worksheets.Count)     'End If          If iHEAD > 0 Then       .Worksheets(1).Range("A1:C1").Copy DataSh.Range("A1")     End If     '--------------------     k = 1 'データ集計シート          On Error GoTo ErrHandler     For i = 1 To .Worksheets.Count - k       Application.ScreenUpdating = False       With .Worksheets(i)         j = DataSh.Cells(Rows.Count, 1).End(xlUp).Offset(1).Row         If iHEAD = 0 And j = 2 Then j = 1         n = .Cells(Rows.Count, 1).End(xlUp).Row         If (j + n) < Rows.Count Then           .Range(.Range("A1").Offset(iHEAD), .Cells(Rows.Count, 1).End(xlUp).Offset(, 2)).Copy _           DataSh.Cells(j, 1)         Else           Err.Raise 513         End If       End With       Application.ScreenUpdating = True     Next ErrHandler:     If Err.Number = mErrNum Then       Set DataSh = .Worksheets.Add(After:=.Worksheets(.Worksheets.Count))       i = i - 1       If iHEAD > 0 Then         .Worksheets(1).Range("A1:C1").Copy DataSh.Range("A1")       End If       k = 2       Resume Next     ElseIf Err.Number > 0 Then       MsgBox Err.Number & ": " & Err.Description     End If   End With   Set DataSh = Nothing End Sub

その他の回答 (1)

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

一番左に新規でワークシートを作成して、そこへ纏めます。 ただしワークシートの行数をオーバーした際の処理は入れてません。 Sub test()  Dim ws As Worksheet  Dim r1 As Range, r2 As Range  Dim i As Integer  Worksheets.Add Before:=Worksheets(1)  Set ws = ActiveSheet  Set r1 = ws.Range("A1")  Application.ScreenUpdating = False  For i = 2 To Worksheets.Count      Set r2 = Worksheets(i).Range("A1").CurrentRegion      r2.Copy r1      Set r1 = r1.Offset(r2.Rows.Count)  Next  Application.ScreenUpdating = True  Set ws = Nothing  Set r1 = Nothing  Set r2 = Nothing End Sub ご参考になれば幸いです。

関連するQ&A

  • ExcelVBAの転記(1つのひな形へ複数シート)

    お世話になります。ExcelVBAを少し学んだ程度の者です。 1つのExcelファイルに複数存在する個別のシートから、1つのひな形シートへ転記する方法に頭を悩ませております。イメージとしては名簿管理のようなものとご理解してください。 複数存在するシート(約200シート)には、項目名に対するデータ(例えば、名前や住所などが定められたセルに入力されています)が揃っておりますが、書式の変更によりひな形のシートへ転記する必要があります。 200ほどのシートには、M10セルには名前が、B15セルには住所、C16セルには電話番号が……という具合に入力されています。これらのデータをひな形シートでは、N5セルに名前、C13セルに住所、D14セルには電話番号などを転記する必要があります(セル番地は適当です)。 ひな形シートは1枚で、マクロを実行する際にひな形シートをコピーして(Xとします)、200ほどの個別のシート(A、B、C……)を転記しようと思っております。A、B、C……に入力された複数の値は項目別にCells(i,j).Valueを、XへCells(x,y).Valueへ転記すれば良いと考えておりましたが、上手くいきません。ひな形をコピーしたXのシートへ上手く転記ができず、Aを転記したシートばかりが量産され、B、C以降のシートへ制御が移っていないようです。恐らく、Workwsheetオブジェクトのカウンタ変数に問題があると思われます。 VBAのコードとしては下記のように記述しております。 Sub SheetCopy() Application.ScreenUpdating = False Dim cnt As Long 'シート数カウント変数 Dim i As Long 'シート用のカウンタ変数 Dim wb As Workbook 'コピー元 Dim ws1 As Worksheet 'コピー元 Dim ws2 As Worksheet 'コピー先 '1がコピー元で2がコピー先 cnt = Worksheets.Count 'シート数をカウント i = 2 Set wb = Workbooks("転記用.xlsm") Set ws1 = wb.Worksheets(i) Set ws2 = wb.Worksheets("ひな形") For i = 1 To cnt ws2.Copy after:=Worksheets(i) Set ws2 = wb.Worksheets(i) ws2.Cells(2, 2).Value = ws1.Cells(2, 13).Value '名前 ws2.Cells(3, 2).Value = ws1.Cells(6, 10).Value '住所 以下、同様の転記処理を記述しています。 Next i End Sub 上記のコードを、パッと見たところ、コピーはしているものの、転記先がコピー元になっているのも原因だと思います(コピー先へ転記する方法が現時点でわかりかねます……ここがネックだと考えております)。 ご知見のある方々から、アドバイスをいただけると幸いです。 どうぞ、よろしくお願い申し上げます。

  • マクロで「別シートを検索・元シートへ転記」したいのですが・・・

    昨夜から20時間くらい悩んでおります・・・。どなたかよろしくお願いします。 (概要) エクセルで 「オーダー受付」と「顧客データ」の2つのシートがあります。 ●「オーダー受付」のセルには、K3電話番号 K4お名前 K5住所1 K6住所2 と縦に表示用セルを設けています。 ●「顧客データ」のセルには、A1 A2 A3 A4 と横に上記データを記録してあり、すでに1万行を超えています。 (やりたい事) ●お客様から電話があったときに「オーダー受付」シートの K3に電話番号をいれマクロを実行すると、「顧客データ」から残りの項目である 名前・住所1・住所2 が転記されるようにしたいです。 ●もし新規のお客様で、検索結果なしの場合は引き続きお名前・住所1・住所2 とお尋ねし、後からコピペでデータ一覧へ足しています。この辺の操作は検索・転記が解決してから挑戦しようと思っています。 是非、ご回答ください。

  • VBAとデータの転記について

    今エクセル2003で、以下の上段画像のようなエクセルデータを作成しました。 上段(シート1)が、各商品に対する評価表なのですが、 そこに評価のあった件数が入力されています。 今、シート1の商品名から評価の不可までを、 VBAでシート2に以下のように転記をしたいのです。 先月はたまたま26件だったのですが、 毎月の商品の件数が、決まっていないので、連番記載とセルごとの処理 ループの使い方がよくわかりません。 評価欄は1件でも件数があれば、○印を転記して、空白はそのままで 転記したいのです。 データが多くなるにつれ手作業が大変になってきました。 VBAがまったくわからず、申し訳ありませんが よろしくお願いします。

  • Excel シート検索 VBA

    現在、機器管理としてExcelで管理を行っているのですが、使用履歴等の情報が多い為、機器1台に対して1つのシートを使用しています。 ただ、機器が多くなってきており、現時点でも20シートを使用している状態で、今後も増えていく予定ですので、VBAで対象のシートを探すプログラムを作成して、効率を上げたいと思っております。 ただ、VBAの知識がない為、こちらに質問させて頂きました。 イメージとしては、機器の製造番号を入力して、ボタンを押すと、各シートの製造番号が記載されている指定のセルを検索して、その製造番号のシートにジャンプするプログラムを作りたいと思っています。 VBAに詳しい方、ご教授をお願いいたします。

  • エクセルで複数のシートのデータをまとめるには

    エクセルで、book内にsheetが同じフォーム(検査成績書のように)で複数存在している 状態で、データが書かれているものを、同じbook内に新にsheetを作成して、 一覧表のようにして転記したいのですが、簡単にする方法はないでしょうか? 1個1個セルに転記するように番地を入力するのはわかるのですが、すごい手間が かかるので、もっと簡単に転記する方法はないでしょうか?

  • 〔EXCEL VBA〕で「第1のシート」のデータを「第2のシート」に転

    〔EXCEL VBA〕で「第1のシート」のデータを「第2のシート」に転記する方法 EXCEL2003でデータが480行/65列ある第1のシート(データベース的)があります。 第1のシートの列にデータが入力されている場合のみ、第2シートの指定されたセルに検索した列の 表題と検索したデータを結合して転記したいのですが良い方法が分りません。 その際、各行毎に検索し空白列は第2のシ-トに転記せず左詰めにして転記したいのですが・・・・ 初心者に合せたご教示をお願いします。 また、Excel VBAの短期マスター法が御座いましたら合せて教示願います。 以上、宜しくお願い致します。

  • 複数sheet(可変)を別bookにコピーする

    Excel VBAでの質問です。 わかる方ご回答いただけると幸いです。 例えば、 現在"9月"というExcelファイルを開いて作業しています。 sheetは"1"~”20”という、作りが同じsheetが20個あります。 <やりたいこと> ・各sheetのA1~D80のセルの値をすべてdeleteする  (ただしsheetによってはA1セルの値を次月の同じsheetのK1セルにコピーする。  コピー後はA1セルの値はdeleteしてよい。) ・”10月”という名前のbookで新規で保存する(毎月名前は変わります) 現在、毎月月末にsheet"1"~"20"までのセルの値をすべて消して 次月に残す値をコピーペーストして”10月”というファイル名をつけて 保存するということを手作業しています。 上記をボタンひとつでやってくれるようなマクロがほしいのですが。 可能でしょうか?

  • VBAに詳しい方に質問です。

    VBAに詳しい方に質問です。 私はVBA初心者です、お力添えのほどよろしくお願いいたします。 エクセルで入力し、それを一覧表に転記し、最終的に出力フォームにデータを呼び出し印刷するプログラムを作成しています。 1つの項目のデータを表に転記したり、呼び出すVBAはなんとか作成できました。 しかし、複数のセルのデータを表に転記するVBAが作ることができません。 ☆シート1 入力フォームがあり、 氏名・電話番号・住所等の項目を100人ほど表で入力します。 それらをシート2へ転記します。    1     2      3    4…   1  日付    名前    年齢   電話番号 2 2010/07/01 石川花子   12才  090-×× 3 4  ↓以下100名ほど入力 5  ※列も行も数値で表すように設定してあります。 ・ ・ ・ ☆シート2 これまでに入力したデータをすべて一覧表にします。 シート1のデータはこれまでに入力されたデータの下に転記されます。    1     2     3   4… 1 日付    名前    年齢  電話番号 902010/06/28 山田太郎  33才 090-×× 912010/07/01 石川花子   12才  090-××   92  ↑このように日付欄に空白を見つけ、そこからデータを転記する。 93 ・ ・ ・ 私が考えたVBAは、 sub 転記マクロ() set 入力 = worksheet("シート1") set 一覧 = worksheet("シート2") 日付1=入力.cells(2,1) 名前1=入力.cells(2,2) 年齢1=入力.cells(2,3) 電話1=入力.cells(2,4) 日付2=入力.cells(3,1) 名前2=入力.cells(3,2) 年齢2=入力.cells(3,3) 電話2=入力.cells(3,4) '以下○○100まで ※一覧.(縦,2)に縦+1をしていき""の場所を探す。 (すみません、データを会社に置いてきたので表記の仕方を忘れてしまいました^^;) 一覧.(縦,1)=日付1 一覧.(縦,2)=名前1 一覧.(縦,3)=年齢1 一覧.(縦,4)=電話1 一覧.(縦+1,1)=日付2 一覧.(縦+1,2)=名前2 一覧.(縦+1,3)=年齢2 一覧.(縦+1,4)=電話2 '以下+100まで end sub 何も見ずに思い出しながら書いたので、もしかしたらどこか間違っているかもしれませんが、 このような感じで書いていきました。 さすがにこのようなことを100回繰り返すのは大変なので、for next関数でなんとかならないか試行錯誤したのですがなかなか解明できず困っています。 詳しい方、どうか教えてください。

  • 複数のシートから該当セルをアクティブにするマクロ

    インプットボックスなどに郵便番号、もしくは電話番号を入力し、 それに該当する部分がアクティブになるようなマクロを組みたいと思います。 会社名、住所、電話番号などを記載したデータが、 いくつかのシートに分かれて管理されています。 会社が10件ほど記載されているシートもあれば、 40件ほど記載されているシートもあります。 探すのが大変なので、 郵便番号や電話番号などを入力すれば、 該当のシート、該当の会社の場所に飛ぶようなマクロを作成したいのですが・・・ 詳しい方がいらっしゃれば、教えてください。 よろしくお願いします。

  • シート作成について

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

専門家に質問してみよう