Excel2003入力データの別シートへのコピー方法

このQ&Aのポイント
  • エクセル2003でのデータ入力後、別シートにリストとして保存する方法を教えてください。
  • エクセル2003を使用していて、データ入力後に別のシートにリストとして保存する方法がわかりません。
  • 家のエクセル2010では問題なくデータが増えていくのに、会社の2003では2行空いてしまいます。マクロの修正方法をお教えください。
回答を見る
  • ベストアンサー

excel2003入力したデータを別シートにコピー

会社でエクセル2003を使っています。 ド素人で、専門用語が全く分からないのでお許しください。 ひな形に入力したデータを その都度、別シートにリストとして保存したいのです。 ネットで調べたところマクロを使うようで Sub 正方形長方形4_Click() Call macro01 Call macro02 End Sub Sub macro01() Dim ws1 As Worksheet, ws2 As Worksheet Dim x As Long, y As Long Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") x = ws2.Cells(Rows.Count, "b").End(xlUp).Row + 1 y = ws1.Cells(Rows.Count, "b").End(xlUp).Row ws1.Cells(21, "b").Resize(y, 9).Copy ws2.Cells(x, "B").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub Sub macro02() Worksheets("Sheet1").PrintOut End Sub いろいろ知らべみてこのようなマクロを作りました。 家のエクセル2010では順番に入力行のその下にデータリストが増えていくのですが 会社の2003だと2行空いてしまうのです。 上記にマクロは家で作って会社ではそのマクロを入力する形です。 マクロの意味が全く分からず、どこを修正すればいいのかもわかりません。 お力をお貸しください。 よろしくお願いいたします。

  • s1023
  • お礼率77% (49/63)

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

>sheet1のコピー元は数式が入っていてその答えをコピーしたいのです。 >その数式には0であればブランクを表示すると入れています。 >数式が原因なのでしょうか? 数式で「""」を、値貼り付けすると見掛けは空白ですが実際は文字数0の「文字列」扱いになります。 >そのブランクを回避することはできないのですか? その列を選択して「データ」「区切り位置」で「完了」すると、空白文字列が本当の空白になります。 >上記の >2行空くということは「x」の値が2大きいことを意味しています。 >「X」の値を設定することはできるのでしょうか? コピー元の数式の数が限定されているなら x = ws2.Cells(Rows.Count, "b").End(xlUp).Row - 1 のように変更すれば2行上のセルが基準になります。

その他の回答 (1)

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

>会社の2003だと2行空いてしまうのです。 2行空くということは「x」の値が2大きいことを意味しています。 Sheet2のB列の十分下にある空白セル(例えばB1000)を選択してCtrl+↑キーでどのセルが選択されるか調べてみてください(このセルの1つ下のセルにコピー貼り付けされます)。 上記のショートカット操作で、もしB列の最下行が選択されない場合は、B列に数式などが入っていないか調べてみてください。

s1023
質問者

お礼

丁寧にご説明いただきありがとうございます。 明日、会社でチャレンジしてみます。 本当にありがとうございました。

s1023
質問者

補足

>上記のショートカット操作で、もしB列の最下行が選択されない場合は、B列に数式などが入っていないか調べてみてください sheet1のコピー元は数式が入っていてその答えをコピーしたいのです。 その数式には0であればブランクを表示すると入れています。 数式が原因なのでしょうか? そのブランクを回避することはできないのですか? また、別の質問です。 上記の >2行空くということは「x」の値が2大きいことを意味しています。 「X」の値を設定することはできるのでしょうか?

関連するQ&A

  • エクセル2003 別シートの項目を集計したいVBA

    仕事でエクセル2003を使っています。 超初心者なので、うまく説明ができませんがお許しください。 Sheet1に、印刷シートとして「名前」「フリガナ」「住所」「電話番号」「性別」などのデータを入力しています。 これを1回ずつデータを入力して印刷をしています。 印刷をするときに、入力したデータをリストにするためにSheet2へコピーするというマクロを作りました。 ↓こんな風に作ってみました。 Sub 正方形長方形2_Click() Call macro01 Call macro02 End Sub Sub macro01() Dim ws1 As Worksheet, ws2 As Worksheet Dim x As Long, y As Long Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet3") x = ws2.Cells(Rows.Count, "b").End(xlUp).Row + 1 y = ws1.Cells(Rows.Count, "b").End(xlUp).Row ws1.Cells(21, "g").Resize(y, 9).Copy ws2.Cells(x, "b").PasteSpecial Paste:=xlPasteValues Application.CutCopyMode = False End Sub Sub macro02() Worksheets("Sheet1").PrintOut End Sub ここから本題なのですが… ふと、リストの件数をSheet1に出せないものか?と思ったのです。 マクロを実行することで、Sheet2にデータが増えてその増えたデータの項目の合計件数をSheet1に反映させて印刷する。 「別シートの項目を集計する」で検索してみたのですが、私には難しすぎて理解できずいろんな方の回答をもアレンジできません。 なにとぞ、ご教授いただきますようお願いします。

  • エクセルで入力シートから別シートに転記・蓄積について

    エクセルVBAで入力シートのA1:D5(5行)の範囲を別シート(DBシート)の転記・蓄積させる方法を教えてください。また、入力データがA1:A5(1行)のときもあれば、A1:D5(5行)の場合ですが・・・ Sub test01() Dim ws1 As Worksheet, ws2 As Worksheet Dim x As Long, y As Long Set ws1 = Sheets("入力") Set ws2 = Sheets("DB") x = ws2.Cells(Rows.Count, "A").End(xlUp).Row + 1 y = ws1.Cells(Rows.Count, "A").End(xlUp).Row ws1.Cells(1, "A").Resize(y, 4).Copy ws2.Cells(x, "A") End Sub の場合、数式等、入力値すべてが転記となってしまいます。 値だけ転記する方法はありませんか? 宜しくお願いいたします。

  • マクロを使って・・・

    シート1に入力したデータをシート2にコピーするいうマクロを作りました。 シート2にコピーはできるのですが 例えば、そのデータを消して再度新しいデータを入れていきたいと思い エクセル左上のシート全体を選択して「Delete」を押すと 会社のエクセル(2003?)は中断モードがどーのこーのとエラー画面が出て マクロが黄色になって、前に進めません。 やり方が決まっているのでしょうか? コピーした行全体を選択して右クリック「削除」とすると エラー画面が出ません。 やり方など決まっているのでしょうか? ↓がんばって作ったマクロです Sub 正方形長方形4_Click() Call macro01 Call macro02 End Sub Sub macro01() Dim ws1 As Worksheet, ws2 As Worksheet Dim x As Long, y As Long Set ws1 = Sheets("Sheet1") Set ws2 = Sheets("Sheet2") x = ws2.Cells(Rows.Count, "b").End(xlUp).Row + 1 y = ws1.Cells(Rows.Count, "b").End(xlUp).Row ws1.Cells(21, "b").Resize(y, 9).Copy ws2.Cells(x, "B").PasteSpecial Paste:=xlPasteValues  ←この行が黄色になります Application.CutCopyMode = False End Sub Sub macro02() Worksheets("Sheet1").PrintOut End Sub

  • Excel 2007 マクロ 別シートの情報を反映する方法

    Excel 2007 マクロ 別シートの情報を反映する方法 Sheet1とSheet2があります。 Sheet1のD列とSheet2のM列で同じ値があれば、 Sheet1のE列の値をSheet2のN列に反映するマクロを 作成しました。 下記が正しいと思っていたのですが、エラーメッセージは出ずに 値が反映されません。 マクロに問題点があればご指摘ください。 よろしくお願いいたします。 Sub Rist() Dim i, j As Long Dim ws1, ws2 As Worksheet Set ws1 = Worksheets("Sheet1") Set ws2 = Worksheets("Sheet2") For i = 2 To ws1.Cells(Rows.Count, "D").End(xlUp).Row For j = 2 To ws2.Cells(Rows.Count, "M").End(xlUp).Row If ws2.Cells(j, "M") = ws1.Cells(i, "D") Then ws2.Cells(j, "N") = ws1.Cells(i, "E") End If Next j Next i End Sub

  • VBA sheet2データーから平均取得 sheet1へコピー

    sheet2指定セルデーターから平均 sheet1指定セルに取得したいのですがうまくいきません。 例 sheet1       sheet2 列A  列B 列C  列A  列B 列C 1  2 指定  1  2  3 1  2  3   1  2  3 1  2  3   1  2  3 sheet2・列C1~3の平均を、sheet1・指定セルに取得したいのですが Sub test() Dim r As Long, u As Long, ws1 As Object, ws2 As Object, y As Long r = 10 u = 1 Set ws1 = Sheets(1) Set ws2 = Sheets(2) y = ws1.Range("A" & Rows.Count).End(xlUp).Row Dim myAve As Long myAve = Application.WorksheetFunction.Average(ws2.Range(Cells(3, u), Cells(7, u))) ws1.Cells(r, 7).Value = "myAve" r = r + 1 u = u + 1 End Sub 変数y r u を使いfor~nextでデーターを一括取得するつもりなのですが この段階でうまくいきません。

  • 決まったシートだけコピーして一つのシートにまとめる

    お世話になります。 http://okwave.jp/qa/q8216220.html で質問させていただいたVBAをこねくり回してみたのですが、「インデックスが有効範囲にありません」というエラーがでて進まなくなってしまいました。 Sub 特定のシートだけコピーと貼り付け() Dim k As Long, endRow As Long, wS As Worksheet Dim P As Variant P = Array("全", , "A", "B", "C", "D", "E", "F", "G", "H", "I") '↑コピーしたいシート名一覧 Set wS = Worksheets("まとめ") endRow = wS.cells(Rows.Count, "B").End(xlUp).Row If endRow > 4 Then Range(wS.cells(5, "B"), wS.cells(endRow, "M")).ClearContents End If For k = LBound(P) To UBound(P) ☆If Worksheets(k).Name <> "まとめ" Then 'ワークシート名が"まとめ"のとき endRow = Worksheets(P).cells(Rows.Count, "B").End(xlUp).Row 'P=Arrayで指定しているシートのセルで If endRow > 4 Then '4行目より下を Range(Worksheets(P).cells(5, "B"), Worksheets(P).cells(endRow, "M")).Copy _ wS.cells(Rows.Count, "B").End(xlUp).Offset(1) 'B5からM列の任意のデータが入っているセルまでコピーして"まとめ"シートに貼り付け End If '繰り返す End If '繰り返す Next k '次のシートへ End Sub 自分で分かるようにコメントを付けています。 ☆のついているところで、「インデックスが有効範囲にありません」と出ます。 指定したシートに"まとめ"を追加してみてもやはり同じでした。 調べたところ、「インデックスが~」というのはVBA中の範囲にないものを指定しているからだ、ということなのですが・・・。 お知恵を貸して下さい。よろしくお願いします。

  • 再質問 EXCEL データをコピーして別シートの最初の空白行に貼り付け

    再質問 EXCEL データをコピーして別シートの最初の空白行に貼り付けたい QNo.6023986でEXCEL データをコピーして別シートの最初の空白行に貼り付けたいと書き込んだものです。 質問内容は以下の通りです。 Sheet1はA列からR列までを使ったシートで、1行目は各項目があり、2行目からは当月のデータが入力されています。 Sheet2はSheet1の1行目と同じようにA列からR列までが項目になっていて、期中のデータを付け足していきたいと思っています。 マクロの記録でやってみたのですが、前月の最後の行(貼り付ける最初の空白行)の認識の仕方が分からず、Sheet2への貼付がうまくいきません。 どのような方法でやったらいいのか教えて下さい。 ----------------------------------------------------------------------------------- 回答で以下のマクロを教えていただき、テストではうまくいったのですが、 ひとつのブック内でsheet1をsheet2に、sheet3をsheet4に、sheet5をsheet6にと行いたいので、 以下のコードのシート名をそれぞれ書き換えてやってみました。 ところが、1を2にはできたのですが、3を4でやってみたところ、 なんどやっても『400』というエラーが出てしまいます。 シート名の他にも書き換えが必要なのか教えてください。 よろしくお願いします。 Sub Macro1() GYOU1 = Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row GYOU2 = Sheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row + 1 Sheets("Sheet1").Select Range(Cells(2, 1), Cells(GYOU1, 18)).Copy Sheets("Sheet2").Select Range("A" & GYOU2).Select ActiveSheet.Paste Application.CutCopyMode = False End Sub

  • データの入力規制

    以前教えていただきました。データの入力規制ですが、変更があったため、再度 教えていただけますでしょうか? sheet2のB列にデータの入力規制のセルを設け、そこに頭文字をいれると、sheet1のリストの中から その頭文字とマッチしたリストを表示させるものを作りたいと考えています。 前回はsheet2のA列に候補のリストがありましたが、今回はsheet1のB列にリストがあります。 また、前回はsheet1のA列にリスト設定していましたが、今回はsheet2のB列に変更したいとおもってます。 また、前回はsheet1のC列にマッチした候補が表示していましたが、 sheet1のAK列までデータが入っており、使えなくなっております。 前回教えていただいたコードが Sub リスト() 'この行から Dim i As Long, cnt As Long, wS1 As Worksheet, wS2 As Worksheet Set wS1 = Worksheets("Sheet1") '←Sheet1は実際のSheet名に! Set wS2 = Worksheets("Sheet2") '←Sheet2も実際のSheet名に! i = wS2.Cells(Rows.Count, "C").End(xlUp).Row Application.ScreenUpdating = False If i > 1 Then Range(wS2.Cells(2, "C"), wS2.Cells(i, "C")).ClearContents End If cnt = 1 If Selection.Column = 1 And Selection.Count = 1 Then For i = 2 To wS2.Cells(Rows.Count, "A").End(xlUp).Row If wS2.Cells(i, "A") Like Selection & "*" Then cnt = cnt + 1 wS2.Cells(cnt, "C") = wS2.Cells(i, "A") End If Next i Application.ScreenUpdating = True End If End Sub 'この行まで になります。 追伸、今朝、お答えいただいた方、申し訳ございません。 画像を他のページから貼ってしまったため、削除されてしまいました。 ですので、再度質問させていただきます。

  • 既存のマクロを他のエクセルファイルで使用したい

    下記のマクロを使おうと思うと、 このマクロがついたファイルを開いて 他のエクセルファイルを開くのですが使えません。 使おうとするとマクロのついたファイルに戻ってしまいます。 Sub test01() Dim ws As Worksheet For Each ws In Worksheets If ws.Name = "統合シート" Then Else ws.Activate d = ws.Range("A65535").End(xlUp).Row ws.Range(Cells(1, "A"), Cells(d, "C")).Copy Sheets("統合シート").Activate Sheets("統合シート").Range("A65535").End(xlUp).Offset(1, 0).Select ActiveSheet.Paste End If Next End Sub どこを変えればよいのでしょうか。 教えてください。 よろしくお願いします。

  • VBA 検索するSheetの位置の変更

    現在、グループの数だけユーザー名の合計数をSheet2に抽出するという 事をやっているのですが....... コードの方は下記になります Sub Sample3() Dim i As Long, j As Long, k As Long, lastRow As Long, lastCol As Long Dim wS2 As Worksheet, wS3 As Worksheet Set wS2 = Worksheets("Sheet1") Set wS3 = Worksheets("Sheet2") Application.ScreenUpdating = False If wS2.Range("Y1") = "" Then wS2.Range("Y1") = "ダミー" End If With Worksheets("Sheet1") If .Range("A4") = "" Then .Range("A4") = "ダミー" End If lastRow = .Cells(Rows.Count, "B").End(xlUp).Row Range(.Cells(5, "B"), .Cells(lastRow, "B")).AdvancedFilter Action:=xlFilterCopy, copytorange:=wS3.Range("A1"), unique:=True '★ For i = 2 To wS3.Cells(Rows.Count, "A").End(xlUp).Row wS2.Cells(7, (i - 2) * 8 + 3) = wS3.Cells(i, "A") .Range("A4").AutoFilter field:=2, Criteria1:=wS3.Cells(i, "A") Range(.Cells(5, "AA"), .Cells(lastRow, "AA")).SpecialCells(xlCellTypeVisible).Copy wS2.Cells(7, (i - 2) * 8 + 2) For k = wS2.Cells(Rows.Count, (i - 2) * 8 + 2).End(xlUp).Row To 7 Step -1 wS2.Cells(k, (i - 2) * 8 + 3) = WorksheetFunction.CountIfs(.Range("AA:AA"), wS2.Cells(k, (i - 2) * 8 + 2), .Range("B:B"), _ wS2.Cells(7, (i - 2) * 8 + 3)) If WorksheetFunction.CountIf(wS2.Columns((i - 2) * 8 + 2), wS2.Cells(k, (i - 2) * 8 + 2)) > 1 Then wS2.Cells(k, (i - 2) * 8 + 2).Resize(, 2).Delete shift:=xlUp End If Next k Next i wS2.Range("B1").CurrentRegion.Borders.LineStyle = xlContinuous wS2.Cells.Replace what:="ダミー", replacement:="", lookat:=xlWhole .Cells.Replace what:="ダミー", replacement:="", lookat:=xlWhole wS3.Cells.Clear .AutoFilterMode = False End With Application.ScreenUpdating = True End Sub このコードで検索をかけるSheet1のセルBの文字をセルCに移動して検索かけたいという事なのですが、下記の用なコードでBをCに変更してみた結果エラーが発生してしまいます。 lastRow = .Cells(Rows.Count, "C").End(xlUp).Row Range(.Cells(5, "C"), .Cells(lastRow, "C")).AdvancedFilter Action:=xlFilterCopy, copytorange:=wS3.Range("A1"), unique:=True '★ For i = 2 To wS3.Cells(Rows.Count, "A").End(xlUp).Row wS2.Cells(7, (i - 2) * 8 + 3) = wS3.Cells(i, "A") .Range("A4").AutoFilter field:=2, Criteria1:=wS3.Cells(i, "A") Range(.Cells(5, "AA"), .Cells(lastRow, "AA")).SpecialCells(xlCellTypeVisible).Copy wS2.Cells(7, (i - 2) * 8 + 2) For k = wS2.Cells(Rows.Count, (i - 2) * 8 + 2).End(xlUp).Row To 7 Step -1 wS2.Cells(k, (i - 2) * 8 + 3) = WorksheetFunction.CountIfs(.Range("AA:AA"), wS2.Cells(k, (i - 2) * 8 + 2), .Range("C:C"), _ どなたかご教授の方お願い致します。

専門家に質問してみよう