エクセルのマクロで別のシートにデータを転記する方法

このQ&Aのポイント
  • エクセルのマクロを使って、別のシートに入力データを転記する方法について質問があります。
  • 現在の状況は、Sheet1に入力されたデータをSheet2に転記するマクロを使用していますが、同じ日付で続けて入力すると正しく転記されません。
  • マクロの問題を解決するための方法を教えていただきたいです。週明けまでに解決したいので、よろしくお願いします。
回答を見る
  • ベストアンサー

エクセルの入力データーを別のシートの日付と氏名の交差点に記録していくマクロ

現在別のカテゴリーで教えていただいたマクロなのですが、 Sheet1に入力されたデータをSheet2に転記するマクロに苦しんでおります。週明けには解決したいのでこのカテゴリーにも質問することにしました。 現在の状況は以下の通りです。 Sheet1    A   B   C   D   1 日付 氏名 成績 区分 2 9/23 佐藤 95  優 ここでマクロを実行すると Sheet2    A   B   C   D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21         80 5 9/21    95 6 9/21            95 7 9/22                 95 となって欲しいのですが、同じ日付で続けて入力すると Sheet2    A   B   C   D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21    95   80  95 5 9/21     6 9/21             7 9/22                 95 となってしまいます。 マクロは Sub Macro001() 'まず日付を転記します  Range("A2").Select  Selection.Copy  Sheets("sheet2").Select  Range("A65536").Select  Selection.End(xlUp).Select  ActiveCell.Offset(1, 0).Select  Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _  False, Transpose:=False  Sheets("sheet1").Select  Application.CutCopyMode = False  Range("C3").Select '続いて転記します  Dim x As Long  Dim y As Integer  x = Application.Match(Sheets("sheet1").Range("a2"), Sheets("sheet2").Columns(1), 0)  y = Application.Match(Sheets("sheet1").Range("b2"), Sheets("sheet2").Rows(2), 0)  Sheets("sheet2").Cells(x, y) = Sheets("sheet1").Range("C2") End Sub です。 どうかよろしくお願いいたします。

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

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

http://okwave.jp/qa4344600.html 補足入っていたんですね。 Sub test() Dim r As Range Dim col As Long With Worksheets("Sheet2") Set r = .Range("A" & Rows.Count).End(xlUp).Offset(1) If r.Row < 3 Then Set r = .Range("A3") col = Application.Match(Worksheets("Sheet1").Range("B2").Value, _ .Range(.Range("B2"), .Cells(2, Columns.Count).End(xlToLeft)), 0) Worksheets("Sheet1").Range("A2").Copy r r.Offset(, col).Value = Worksheets("Sheet1").Range("C2").Value End With Set r = Nothing End Sub ご参考になれば。(名前がない時のエラー処理はしてませんけど)

その他の回答 (1)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.2

n-junさんには勉強させて戴いています、先日は有難う御座いました。 質問者さん、失礼いたしました 本題です 処理的には、そんなに難しいことではないと思います もっと簡単に考えてみては 最初は手作業を、そのままの順序でマクロ化したほうが、覚えやすいと思いますよ 手順としては 1 Sheet1の各データを覚える 2 Sheet2で日付列の最初の空白行を見つけ、何行目かを覚える 3 空白行に日付を入力 4 氏名を元に列を探し、何列目かを覚える 5 覚えた行列を元に、成績を入力 こんな感じではないでしょうか これを参考にマクロを作成してみます ’------------------------------------------------ Sub test() Dim 行 As Long Dim 列 As Long Dim 日付 As String Dim 氏名 As String Dim 成績 As Integer '1 Sheet1の各データを覚える '各データを変数に代入します Sheets("sheet1").Select 日付 = Range("A2").Value 氏名 = Range("B2").Value 成績 = Range("C2").Value '2 Sheet2で日付列の最初の空白行を見つけ、何行目かを覚える Sheets("sheet2").Select '開始行を3行目に設定しています 行 = 3 '日付列の空白行を探します Do ~ Loop Do 'セルが空白("")かどうか調べます If ~ End If If Cells(行, 1).Value = "" Then 'セルが空白の場合の処理 '3 空白行に日付を入力 Cells(行, 1).Value = 日付 '繰り返し処理を終了します Exit Do End If 'セルが空白でない場合の処理、次行へ 行 = 行 + 1 Loop '4 氏名を元に列を探し、何列目かを覚える '開始列を2列目に設定しています 列 = 2 '氏名を元に列を探します Do ~ Loop Do '氏名が同じかどうか調べます If ~ End If '同じであれば、繰り返し処理を終了します If Cells(2, 列).Value = 氏名 Then Exit Do '違っていれば、列を1つ右へ 列 = 列 + 1 Loop '5 覚えた行列を元に、成績を入力 Cells(行, 列).Value = 成績 End Sub ’--------------------------------------- 自分で理解できない処理(コマンド)は使用すべきではないと思います 後々、メンテナンスが出来ないからです 変数も日本語はお薦めできないのですが、なれないうちはありかなと思います

関連するQ&A

  • エクセルの入力データーを別のシートの日付と氏名の交差点に記録していくマクロ

    エクセルのセルに入力したデーターを別のシートの名簿一覧に記録していくにはどのようなマクロを組めばよいでしょうか? 入力イメージとして、「田中 90 良」この項目は手動で入力するとします。 Sheet1 A   B  C  D  E  F  G 1 日付 氏名 成績 区分 2 9/19 田中 90  優 ここでマクロを実行すると別のシートに Sheet2 A   B  C  D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  と記録され、次に入力し、 Sheet1 A   B  C  D  E  F  G 1 日付 氏名 成績 区分 2 9/21 小林 80  良 さらにマクロを実行すると Sheet2 A   B  C  D   E   F  G 1       1組       2組  2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21        80 このように記録され、さらに Sheet1 A   B  C  D  E  F  G 1 日付 氏名 成績 区分 2 9/23 佐藤 95  優 と入力して、さらにマクロを実行すると Sheet2 A   B  C  D   E   F  G 1       1組       2組 2    田中 佐藤 小林 近藤 三浦 遠藤 3 9/19 90  4 9/21        80 5 9/23    95 という具合に、氏名と日付が交差するセルにデーターを記録していきたいのですが、 可能でしょうか? どうかお返事よろしくお願いいたします。

  • エクセルマクロ 繰り返して、別のシートへコピーしたい

    エクセルマクロ 繰り返して、別のシートへコピーしたい マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、 どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 1行目から10行目まで繰り返したくて、 1行目から2行目のセルの移動の差は10行目までかわりません。 '1行目 Sheets("Sheet1").Select Range("B14:C14").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B15:C17").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B1").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False '2行目 Sheets("Sheet1").Select Range("B18:C18").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("A2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Sheets("Sheet1").Select Range("B19:C21").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B2").Select Range("B2").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False

  • マクロでシート2~6のデータをシート1に転記したい

    マクロでシート2~6のデータをシート1に転記したいです。 シート2~6のデータを シート1に順番に転記したくてマクロの記録を利用して作成しました。 シート2~6は列は同じですが行数は異なります。 また行数は作業の都度異なります。 同じ記述が繰り返されているので もう少し記述が短くできるのではと思うのですが どうすればいいでしょうか? Sub データ更新() 'シート1の前回データをクリア Sheets("シート1").Select Range("A2:Q2").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Range("A2").Select Sheets("シート1").Select Range("A1").Select Sheets("シート2").Select Range("A1").Select 'ヘッダーも合わせて取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート3").Select Range("A2").Select 'データのみ取得 Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート4").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート5").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select Sheets("シート6").Select Range("A2").Select Range(Selection, Selection.End(xlToRight)).Select Range(Selection, Selection.End(xlDown)).Select Selection.Copy Sheets("シート1").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.End(xlDown).Select Selection.Offset(1, 0).Select End Sub

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • マクロで住所録を抽出して、別シートにコピーするのに

    マクロで住所録を抽出して、別シートに抽出したデータをバラバラに貼り付けたいです。 当方、マクロ初心者なので、分かりやすく教えてください。 シート1『入力シート』、シート2『印刷シート』、シート3に『客先住所録』とあって、今までは住所録のデータをセル1つずつをコピーしてシート1の入力シートに貼り付けて、シート1から2へは関数の=セル番号として飛ばして、シート2の印刷シートを印刷していました。 せっかく、住所録があるからなんとか簡単にならないかと言われて、初心者ながらマクロを作成しました。住所録のオートフィルタで抽出まではうまく出来たのですが、入力シートにコピー貼付が作成時に抽出した住所録は出来ますが、それ以外の住所で抽出すると出来ません。 どうすれば、いいのかご教授願います。 シート3『客先住所録』 A1 チェック A2 1 A3 B3 C3 D4 E4 F4 1又は空白 会社名 〒 住所 FAX TEL 以下70件ほど住所録入力あり。 シート1『入力シート』 G4に〒 G5に住所 K6に電話番号 Y6にFAX G7に会社名 にコピーしたいです。 自分が作成したマクロは Range("A3:F70").Select Range("A3:F48").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Range("A1:A2"), Unique:=False Range("B7").Select Selection.Copy Sheets("入力シート").Select Range("G7:AF7").Select ActiveSheet.Paste Sheets("客先住所録").Select Range("C7").Select Application.CutCopyMode = False Selection.Copy Sheets("入力シート").Select Range("I4:AH4").Select ActiveSheet.Paste Sheets("客先住所録").Select Range("D7").Select Application.CutCopyMode = False Selection.Copy Sheets("入力シート").Select Range("G5:AH5").Select ActiveSheet.Paste Sheets("客先住所録").Select Range("E7").Select Application.CutCopyMode = False Selection.Copy Sheets("入力シート").Select Range("K6:T6").Select ActiveSheet.Paste Sheets("客先住所録").Select Range("F7").Select Application.CutCopyMode = False Selection.Copy Sheets("入力シート").Select Range("Y6:AH6").Select ActiveSheet.Paste End Sub どう治せば良いのか、宜しくお願いします。 宜しくお願いします。

  • エクセルマクロ 抽出したデータを別のシートへコピーしたい

    マクロ初心者のため、やり方が全くわかりません。 どなたか教えてください。 やりたいことは、 【1】シート名「データ」をA列でオートフィルタ抽出して、別シートにコピーする。 【2】別シートにコピーしたデータに外枠罫線をつける。 【3】シート名「データ」には塗りつぶしがあるので、別シートにコピーされた塗りつぶしは「なし」する。 【4】シート名「Sheet1」の1~2行目をコピーし、別シートの1~2行目に挿入し、シート名「データ」に戻る。 コピーするシートはあらかじめ作成しています。 簡素化の方法がわからないので、 とりあえず自分で作ってみたものが下にあるものです。 繰り返す方法がわからないので、今はコピーして「あ行」の部分を書き換えています。(かなり面倒です) 最終的には、抽出されたそれぞれのシートを別々のブックにしたいとも思っています。 長々とすみませんが、どなたか教えてください。 よろしくお願いします。 以下、作成したマクロです。 Sheets("データ").Select Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="あ行", Operator:=xlAnd Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Copy Sheets("あ行").Select Range("A1").Select ActiveSheet.Paste Range("A1").Select Range(Selection, ActiveCell.SpecialCells(xlLastCell)).Select Selection.Borders(xlDiagonalDown).LineStyle = xlNone Selection.Borders(xlDiagonalUp).LineStyle = xlNone With Selection.Borders(xlEdgeBottom) .LineStyle = xlContinuous .Weight = xlMedium .ColorIndex = xlAutomatic End With Cells.Select Selection.Interior.ColorIndex = xlNone Sheets("Sheet1").Select Rows("1:2").Select Selection.Copy Sheets("あ行").Activate Rows("1:1").Select Selection.Insert Shift:=xlDown Range("A1").Select Sheets("データ").Select Range("A1").Select

  • エクセルに入力されたアンケートの回答をマクロで集計する。

    画像をアップしたので、こちらを見ていただくと分かりやすいと思いますが、同一フォルダの中に、あるアンケートに対する回答のエクセルファイル(全く同じ形式でだが、ブックの名前に規則性はない)があり、別の場所にその回答を一覧に並べるための"集計用ファイル"がります。このアンケートの回答ファイルは日々数が追加されて行くので、毎日"集計用ファイル"に回答を得た分を転記し日付の名前でもつけて保存して行きたいのです。エクセルマクロを使用して、この"Book1"~"BookXXX"の特定の部分に入力された内容を一人一列となるように"集計用ファイル"のB列から右へ右へと転記したいと考えています。 下記、内容を簡単にしたサンプルを作り、VBAを書いてはみたものの、やはり動きませんでした。(セルは例として3つのみ転記しようとしています) 関連する質問もこちらにさせて頂いたのですが、まだ独力で解決できず再度投稿させて頂きました。よろしくお願いいたします。 Sub 転記() Dim WorkPath As String Dim Target As String Dim MaxRow As Long Application.ScreenUpdating = False WorkPath = "C:\Documents and Settings\Zawa\デスクトップ\Test" Target = Dir(WorkPath & "\*.xls", vbNormal) MaxRow = 1 Do While Target <> "" Workbooks.Open WorkPath & "\" & Target Workbooks(Target).Sheets("Sum").Select Range("C7").Select Selection.Copy ThisWorkbook.Sheets("Sheet1").Select Range("B3").Select ActiveSheet.Paste Workbooks(Target).Sheets("Sum").Select Range("C10").Select Application.CutCopyMode = False Selection.Copy ThisWorkbook.Sheets("Sheet1").Select Range("B4").Select ActiveSheet.Paste Workbooks(Target).Sheets("Sum").Select Range("D10").Select Application.CutCopyMode = False Selection.Copy ThisWorkbook.Sheets("Sheet1").Select Range("B5").Select ActiveSheet.Paste Workbooks(Target).Close SaveChanges:=False Target = Dir() Loop MsgBox "転記が終了しました。" End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

  • エクセルでシート名をセル参照するマクロ

    いつもお世話になっております。 ワークシートをコピーする際、 B1セルの値を複製したシート名にするマクロを と思ってやってみましたが、 Sub Macro1() ' ' Macro1 Macro Sheets("0000").Select Application.CutCopyMode = False Sheets("0000").Copy Before:=Sheets(3) Range("B1").Select Selection.Copy Sheets("0000 (2)").Select Sheets("0000 (2)").Name = "0524" Range("B1").Select End Sub 5行目でB1セルをコピーしましたが、 シート名として命名されたのは、 "0524"という固定の値でした。 (そのときのB1セルの値です) このB1セルは日付データなのですが、 マクロを実行する日によって、 翌日だったり、3日後だったりします。 (営業日ベースなので) どのようにしたら、B1セルの値を シート名に使用できるでしょうか よろしくお願いいたします。

専門家に質問してみよう