同じブックのシート間でセルの値を転記するヒントが欲しいです。

このQ&Aのポイント
  • excel2002で牛の繁殖・肥育データの管理をしています。同じブックのシート間でセルの値を転記する方法を教えてください。
  • 繁殖牛データ、種付け台帳のひな形、肥育牛データという3つのシートがあります。種付け台帳のひな形シートに繁殖牛の番号を入力し、分娩や双子の情報が入力された場合、他のシートに必要な値をコピーしたいです。
  • VBAを使用してコードを作成しましたが、うまく動作しません。シートをコピーした際にコードも複製されるかどうかも不明です。具体的な間違いを見つける方法がわかりません。アドバイスをお願いします。
回答を見る
  • ベストアンサー

同じブックのシート間でセルの値を転記するヒントが欲しいです。

excel2002で牛の繁殖・肥育データの管理をしています。 1つのブックに"繁殖牛データ""肥育牛データ""種付け台帳のひな形"というシートがあり、"種付け台帳のひな形"シートは、コピーして繁殖牛の頭数分に増える予定です(コピーしたシートの名前はそれぞれ母牛の5桁の数字に変更します)。 "繁殖牛データ"    A    B   C   D  E 5 個体番号 生年月日 父 祖父 曾祖父 6 7 ・ ・ 1004 "種付け台帳" G2に繁殖牛の番号を入力   B   D  E  F ・・ CA   CB  CC CD CE CF CG 6 日付 種類 性別 種の名前 個体番号 性別 生年月日 母 父 祖父 7 1/2 人工   精液1 8 10/2 分娩 ♂  01234 =$F8 =$E8 =$B8 =$G$2 =$F7 9 双子 ♂  56789 =$F9 =$E9 =$B8 =$G$2 =$F7 10 12/2 人工 精液2 11 9/20 分娩 ♀ 02345 =$F1 =$E11 =$B11 =$G$2 =$F10 ・ ・ 100 "肥育牛データ"   A B   C    D E F G 3 個体番号 性別 生年月日 母 父 祖父 曾祖父 4 ・ ・ 母牛の頭数分ある"種付け用"では人工授精と分娩の記録がなされ、D列が"分娩"もしくは"双子"の時だけCAからCGに必要な値を入れる式を入れています。 "肥育牛データ"シートに生まれた子牛のデータを入れたいのですが、 vlookupでは複数シートからの検索が出来ない事がわかり、VBAの勉強を始めました。 コードは書いてみたものの、エラーどころか何も動きを見せてくれなくて困っています。間違いだらけだろうとは思うのですが、参考書を見ただけでは具体的な間違いを見つけられないのでアドバイスお願いします。 下記コードは、シートをコピーした際にコードも一緒に複製されるだろうと思って"種付け台帳のひな形"というシートの部分に書いています。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 4 Then Exit Sub If Target.Value <> "分娩" Or Target.Value <> "双子(2)" Then Exit Sub Dim gyou As Variant, katann As Variant gyou = Target.Row katann = Worksheets("データ").Range.End(xlDown) Worksheets("データ").Cells(katann, "A").Value = ActiveSheet.Cells(gyou, "CA").Value Worksheets("データ").Cells(katann, "B").Value = ActiveSheet.Cells(gyou, "CB").Value Worksheets("データ").Cells(katann, "C").Value = ActiveSheet.Cells(gyou, "CC").Value Worksheets("データ").Cells(katann, "D").Value = ActiveSheet.Cells(gyou, "CD").Value Worksheets("データ").Cells(katann, "E").Value = ActiveSheet.Cells(gyou, "CE").Value Worksheets("データ").Cells(katann, "F").Value = ActiveSheet.Cells(gyou, "CF").Value Worksheets("データ").Cells(katann, "G").Value = ActiveSheet.Cells(gyou, "CG").Value End Sub

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

  • ベストアンサー
回答No.1

まず >If Target.Value <> "分娩" Or Target.Value <> "双子(2)" Then Exit Sub ORの使い方がおかしいです。これでは分娩・双子(2)ともにはじかれます。 分娩以外には双子(2)も該当、双子(2)以外には分娩も該当するので 分娩または双子(2)の場合は処理を抜けると取れるので何も起こりません。 この場合ORじゃなくてANDを使いましょう。 あと、今回の場合デバッグ機能を使えばどこが原因かはすぐわかるはずです。 やり方は参考書に載っていると思いますよ。ネットにもありますし。 あと、今のままだと末尾のデータが1件消えて新しいのが1件上書きされるって形になる様な気が。 違うかな~?あんまり自信ないです><。

kobuta2008
質問者

お礼

回答ありがとうございます。 >ORの使い方がおかしいです。これでは分娩・双子(2)ともにはじかれます。 この指摘でようやく自分の間違いに気付きました。 ANDに直して試したところ、今度はしっかり? 実行時エラー'450':引数の数が一致していません。または不正なプロパティを指定しています。 が表示され、デバッグ機能も使えました! >katann = Worksheets("データ").Range.End(xlDown) せっかく表示されたエラーの意味を理解できないので、今参考書をめくっているところです。

kobuta2008
質問者

補足

エラーが出た部分で、基準になるセルを指定していない事に気付き、さらに終端セルの1行下の行番号を取得できるよう修正したつもりです。 katann = Worksheets("データ").Range("A3").End(xlDown).Offset(1).Row しかし、修正したつもりの上記コードで「実行時エラー1004:アプリケーション定義またはオブジェクト定義のエラーです。」となってしまいました。 アプリケーションは使っていないのでオブジェクト定義がおかしいということだと思うのですが、Worksheets("データ")の部分の書き方がおかしいのでしょうか?

その他の回答 (1)

回答No.2

考えられる原因としたら 1.Worksheets("データ")のデータというシートがそもそも存在しない   ※わざとデータって名前にしてると思って突っ込まなかったんですけど   これはworksheets("肥育牛データ")じゃなくてWorksheets("データ")で問題ないんですよね? 2.A3以降にデータ入っていない場合Xldownを使うと最後まで行ってしまうにも関わらず(※1)   Offsetを使ってありえないセルを選択してる   ※これが原因なら   katann = Worksheets("データ").cells(rows.count,"A").End(xlup).Offset(1).Row   でいくかもしれません。 他にも何か原因あるかもしれませね。間違ってたらごめんなさい。 ※1エクセルのバージョンによって違うんですが エクセルには限界の行、列が存在します。 今回使ってるXldownはシート上でセルを選択しCtrlキーを押したまま キーボードの↓を押したのと同じ効果になります。A65536など

kobuta2008
質問者

お礼

出来ました♪ありがとうございます! いろいろ触ってるうちに"データ"というシートを作っていました。すみません。 失敗の原因は2番で、"データ"シートはA3:G3に項目が書かれているだけでした。 上の解決方法を見る前に、A2に特別必要ない文字を入れたことでいったん解決したのですが、tarinko_06さんに教えてもらった方が見やすくて助かります。 本当にありがとうございました。

関連するQ&A

  • 指定セルを別ブックへ貼り付ける作業

    1.現在、見積書.xlsの見積汎用シートで以下の内容で同じブックのデータベース貼付シートに貼り付けています。 Sub データベース貼付() GYOU = Worksheets("データベース").Range("A65536").End(xlUp).Row + 1 Worksheets("データベース").Cells(GYOU, 1).Value = Range("H13").Value Worksheets("データベース").Cells(GYOU, 2).Value = Range("C8").Value Worksheets("データベース").Cells(GYOU, 3).Value = Range("C6").Value Worksheets("データベース").Cells(GYOU, 4).Value = Range("C15").Value Worksheets("データベース").Cells(GYOU, 5).Value = Range("D15").Value Worksheets("データベース").Cells(GYOU, 6).Value = Range("E15").Value Worksheets("データベース").Cells(GYOU, 7).Value = Range("G30").Value Worksheets("データベース").Cells(GYOU, 8).Value = Range("H1").Value 2.これを見積書.xlsの見積汎用シートを別ブックのデータベース.xlsのデータシートに貼り付けたいと思います。 3.以下の内容で仮に自分で貼り付けてみようとしましたがうまくいきません。 Sub コピーしてすべて貼り付ける() Workbooks("見積書.xls").Worksheets("見積汎用").Range(D6).Copy _ Workbooks("データベース.xls").Worksheets("データ").Range(B4) End Sub どのように、別ブックに指定したセルを貼り付けできるでしょうか?いろいろとサイトを見ましたがどうもうまくできませんでした。 説明がわかりづらく申し訳ないですが、どなたか教えていただけないでしょうか? よろしくお願い致します。

  • 複数のシートで各シートをアクティブについて

    複数(10個ほど)のシートで各シートをアクティブにして次のようなコードを実行するとシートが次々と代わって表示されます。シートを1に固定しながら出来る方法はありませんか Worksheets(SN).Activate Sheets(SN).Cells(gyou, 24).Value = Application.WorksheetFunction.Average(Sheets(SN).Range(Cells(gyou - (ma1 - 1), 22), _ Sheets(SN).Cells(gyou, 22))) Worksheets(SN).Activate このコードを外すとエラーになります

  • 書いたコードが思惑通りに動かないです。

    アクティブシートのセル値を"データ"シートに転記するコードのつもりです。 If Cells(gyou, "CB").Value = 0 Then Exit Sub で変更したセルの行のCB列が零なら処理を終了してほしいのにそのまま処理が続く点と、 kennsakekka = Application.WorksheetFunction.Match(banngou, x, 0) を使って重複の有無を確認し、上書きや処理中止の選択をしたいのですが、重複の有無にかかわらず転記されます。 特別エラーは出ないため、原因が分からず困っています。 不具合の原因がどこにあるのか教えていただけないでしょうか。 Private Sub Worksheet_Change(ByVal Target As Range) Dim gyou, katann, banngou, kennsakekka, x gyou = Target.Row If Target.Column <> 6 Then Exit Sub 'F列以外の変更なら処理を終了 If Cells(gyou, "CB").Value = 0 Then Exit Sub '変更したセルの行のCB列が零なら処理を終了 x = Worksheets("データ").Range("$A$2:$A$65536")   'xにシート"データ"のセル範囲を入れる banngou = Target.Value katann = Worksheets("データ").Cells(Rows.Count, "A").End(xlUp).Offset(1).Row kennsakekka = Application.WorksheetFunction.Match(banngou, x, 0) If kennsakekka = "" Then '重複項目がない場合はシート"データ"の終端の1つ下の行に転記 Worksheets("データ").Cells(katann, "A").Value = ActiveSheet.Cells(gyou, "CA").Value Else Dim ans As Integer ans = MsgBox("記入済の番号です。上書きしますか?", vbYesNo + vbExclamation, "確認してください") Select Case ans Case vbYes     'はいを選択したらMatchで見つけた行に上書き Worksheets("データ").Cells(kennsakekka, "A").Value = ActiveSheet.Cells(gyou, "CA").Value Case vbNo     'いいえを選択したら処理を終わる Exit Sub End Select End If End Sub

  • 別のブックへ貯蓄転記する方法を教えてください。

    請求書をエクセルで作ることになりました。 請求書自体はできたのですが、 請求書内容を別のブックに貯蓄保存がどうしてもできません。 ブック「A」のM1~R1のみが転記対象。VLOOKUPを使ってデータをひいています。 ブック「B」のA3~F3に貯蓄&転記したいと考えています。 色々なサイトを見て、下記のコードを作ったのですが、貯蓄できません・・・ (上書保存のような状態になります) 初心者のため、何が間違っているのかわかりません。 ご教授いただければと思います。 よろしくお願いいたします。 Sub SAVE() Const Dest = "C:\Users\P\Desktop\Y\B.xlsx" Dim fromR As Long Dim fromRMax As Long Dim toR As Long Dim toRMax As Long '?????? toRMax = Workbooks("B.xlsx").Worksheets("Sheet1").Range("A65536").End(xlUp).Row fromRMax = Workbooks("A.xlsm").Worksheets("Sample").Range("A65536").End(xlUp).Row '?? For fromR = 2 To fromRMax 'Date Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 1).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 13).Value 'No. Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 2).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 14).Value 'Sub Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 3).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 15).Value '13% Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 4).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 16).Value '5% Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 5).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 17).Value 'Total Workbooks("B.xlsx").Worksheets("Sheet1").Cells(toRMax + fromR - 1, 6).Value = _ Workbooks("A.xlsm").Worksheets("Sample").Cells(fromR, 18).Value Next fromR End Sub

  • Excel VBA セルの値をシート名にしたいのです。

    こんばんは 新しくシートを挿入させて、「シート2」の値のみをコピーさせたいと考えています。 その新しく挿入させたシート名を「シート1」のせるA3とA4の文字列をあわせたものにしたいのですが、どうしたらよいのでしょうか。 途中まで考えたところでいきずまってしまいました。 どうか英知をお貸しください。 宜しくお願い致します。 A3には日付、A4には名前が入力されています。 Dim sheetName As String Worksheets("月度集計").Activate Sheets.Add After:=Sheets(Sheets.Count) ActiveSheet.Name = Worksheets("Sheet1").Cells(3, 3).Value On Error Resume Next Worksheets(1).Name = sheetName On Error GoTo 0 Range("f2").Select

  • 2つのシートの比較で更新分だけを色付けしたい

    表を管理していて、前月のある日に保存した内容と 翌月のある日に保存した内容を比較して 差分を取りたいのです。 例えば、表を更新した時に行が追加されたりして レコードはひとつ追加になっているけれど 他の内容は変わってないとします。 しかし、同じ位置の同じセルの値を比較だと 追加した行以降全てのセルに色が付いてしまいます。 これを、追加された行(レコード)だけを 色付けるようにしたいのです。 >If s1.Cells(gyou, retsu).Value <> s2.Cells(gyou, retsu).Value Then > > '同じ位置のセルの値が等しくなければ、そのセルを赤で塗りつぶす。 この部分に手を加えればいいのかと思うのですが、解りません。 どのようにすればいいのか教えていただけないでしょうか? お願いいたします。 Sub シート比較()  Dim RETSU_S, RETSU_E, GYOU_S, GYOU_E As Long RETSU_S = 1 RETSU_E = 10 GYOU_S = 2 GYOU_E = 101   Dim s1, s2 As Worksheet  Set s1 = Worksheets("Sheet1")  Set s2 = Worksheets("Sheet2") Dim retsu, gyou As Long 'この変数で列と行を指定する For gyou = GYOU_S To GYOU_E For retsu = RETSU_S To RETSU_E If s1.Cells(gyou, retsu).Value <> s2.Cells(gyou, retsu).Value Then '同じ位置のセルの値が等しくなければ、そのセルを赤で塗りつぶす。 s1.Cells(gyou, retsu).Interior.ColorIndex = 3 s2.Cells(gyou, retsu).Interior.ColorIndex = 3 End If Next Next End Sub

  • 実行時エラー'1004'で困っています。

    少し前にも同じコードの他の点についてアドバイスをいただいたのですが、新たな問題点が生じたので改めて質問させてほしいです。 具体的な問題点が分からなかったのでコードをそのまま載せました。 シート1に値を入力すると、繁殖牛データ。データ。という2個のシートから検索し、リンクをつけたいです。 繁殖牛データシートに入っている値を入力した時は ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3)) データシートに入っている値を入力した時は ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'" & データ & "'!" & Range(Cells(kennsaku, 1)) で「'Range'メソッドは失敗しました:'_Worksheet'オブジェクト」とでます。 試験的にどちらのシートにも入っていない値を入力すると、思惑通りに"見つからないのでリンクは貼りません"と帰ってきます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim kennsaku, y, z If Target.Count > 1 Then Exit Sub 'セルを二つ以上選択した場合 If Target.Value = "" Then Exit Sub 'データが空の場合 If Application.CountIf(Range("A1:Z80"), Target.Value) > 1 Then MsgBox Target.Value & "は既に入力されています", vbOKOnly + vbExclamation Target.Clear Exit Sub End If Set y = Worksheets("繁殖牛データ").Range("$C$1:$C$1003") Set z = Worksheets("データ").Range("$A$1:$A$65536") kennsaku = Application.Match(Target.Value, y, 0) If IsNumeric(kennsaku) Then ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'繁殖牛データ'!" & Range(Cells(kennsaku, 3)) Else kennsaku = Application.Match(Target.Value, z, 0) If IsError(kennsaku) Then MsgBox "見つからないのでリンクは貼りません", vbOKOnly + vbExclamation Exit Sub Else ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'" & データ & "'!" & Range(Cells(kennsaku, 1)) End If End If Range("A1:Z80").Font.Underline = False End Sub

  • ExcelVBAにて異なるシート間での値貼り付け

    Excel VBAの異なるシート間での値のコピーと貼り付けに関して質問をさせてください。 私はExcel2007を使って、Sheet1のセルの値をsheet2に貼り付けようとして以下のコード(1)を書きましたが、うまくいきません。動作確認のためsheet1内での値のコピペを行うコード(2)を作成し実行したところ、正常に動作しました。 コード(1)をコンパイルしたときに表示されるメッセージは、[実行時エラー'1004':アプリケーション定義またはオブジェクト定義のエラーです] です。 質問としては、 Q1:等号(=)を用いた値の貼り付けは、異なるシート間に対応していないのでしょうか。 Q2:コード(1)を改良する場合、どのように書き直せばよいでしょうか。 アドバイスいただけましたら幸いです。 コード(1) Worksheets("Sheet2").Range(Cells(1, 10), Cells(5, 10)).Value = Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Value コード(2) Worksheets("Sheet1").Range(Cells(1, 10), Cells(5, 10)).Value = Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 1)).Value

  • Matchで戻ってきた値をハイパーリンクのセル指定に使う方法

    ActiveSheetに入力した時、入力値と同じ値を同ブックの2つのシートから検索してハイパーリンクを設定したいです。 Matchを使ってリンクさせたいセルの行番号を取得したつもりなのですが、リンク設置の際にどのような使い方をすればいいのか分からないので教えてほしいです。 下記コードでは、入力した値が青文字になりリンクされたようになりますが、クリックすると「このワークシートの数式に、1つまたは複数の無効な参照が含まれています。有効なパス、ブック、範囲名およびセル参照が数式に含まれていることを確認してください。」とでます。 Private Sub Worksheet_Change(ByVal Target As Range) Dim kennsaku, y, z Set y = Worksheets("データ").Range("$C$4:$C$1003") Set z = Worksheets("データ2").Range("$A$2:$A$65536") kennsaku = Application.Match(Target.Value, y, 0) If IsNumeric(kennsaku) Then ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'" & データ & "'!range(cells(kennsaku,3))" Else kennsaku = Application.Match(Target.Value, z, 0) If IsError(kennsaku) Then MsgBox "見つからないのでリンクは貼りません", vbOKOnly + vbExclamation Exit Sub Else ActiveSheet.Hyperlinks.Add anchor:=Target, Address:="", SubAddress:="'" & データ2 & "'!range(cells(kennsaku,1))" End If End If End Sub

  • セルの値で別BookのSheetを開く

    EXCELのVBAで、特定のBook(元データ.xls)のA1セルに入力された文字列と同じ名前の別Book(format.xls)のSheet(元データ)を開くようにしたいのですがうまくいきません。 VBAはほぼ素人で、いろいろなページを参考につぎはぎで作りました。 どうか、宜しくお願いします。。。 Dim a As String a = Workbooks(\"元データ.xls\").Worksheets(\"Sheet1\").Cells(1, 1).Value ActiveCell.FormulaR1C1 = \"=LEFT(bookname(),FIND(\"\".\"\",bookname())-1)\" Selection.Copy Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False   >> 元データ.xlsのA1にはファイル名を取得(除く.xls)して、値貼り付けするようにしています。          Workbooks(\"format.xls\").Activate Worksheets(a).Select     ↑ココがうまく行かないようです。 が、一度失敗して2回目は上手く動きます。なぜなのかわかりません。

専門家に質問してみよう