Excelでのシート別条件比較の方法と日付指定項目のコピー方法

このQ&Aのポイント
  • Excelで異なるシート間での項目の比較とデータのコピーを行う方法について教えてください。
  • また、日付指定項目を設けて、該当日のデータをマクロボタンで転送する方法についても教えてください。
  • VBAを使った日付の比較に構文エラーが出て困っています。どのように修正すれば良いでしょうか。
回答を見る
  • ベストアンサー

excelでのシート別条件比較

別シートでの項目の比較を行い等しければデータをコピーしたいのですがうまくいきません。教えて下さい。 現状 シート1・1日の各項目のデータ入力及び集計 シート2・31日分のデータ(シート1で入力・集計した)及び累計  シート1でのデータをシート2へコピーしています。 シート1に日付指定項目を設けて、シート2の該当日にマクロボタン で転送できるようにしたいのですが、出来ないので困っています。 シート1からシート2へコピーするマクロは作ったのですが それにVBAで日付どうしの比較を付けたいのですが構文エラー が出ます。 If Range("B1").Value & "日" = Sheets("シート2").Select Range("J2").Value Then マクロ記録のコピー処理 End If VBAど素人です。宜しくお願い致します。

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

  • ベストアンサー
  • GGL
  • ベストアンサー率45% (23/51)
回答No.3

なんとなーくわかってきました。状況が。 なにをしたいのかは今のところ掴めませんが。。。汗 If Range("B1").Value & "日" = Sheets("シート2").Select Range("J2").Value Then(←↑もちろん一行で書いていますよね?) 構文エラーってでているのは確かに「単純な文法違い」ですね。 今見て、わかりました。。。 Rangeは自分は非常に扱いにくく、Cellsを使います。(ここでは説明しませんが) Sheets("シート2").Select Range("J2").Value これでは値は持ってこれません Sheets("シート2").Range("J2").Value とやってみてください。 使っているPCにエクセルがないので確認できないのですが、 とりあえず、「値が持ってこれているか?」から確認したほうがよろしいかと。

boojapan
質問者

お礼

構文エラーは消え、思いのIf文は成立しているようです。 説明不足で伝えたいことが伝わらず歯痒い気持ちですが前に向いて一歩進むことができました。有難うございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問の意味が(内容が)良くつかめない。 一部実例でも挙げて説明してもらえませんか。VBA以前の問題です。 >別シートでの項目の比較を行い なぜ別シート? この質問で出てくるのはシート1・シート2・シート3(仮称)ですか・。 データのシート・行・列が判らないとVBAはコードは他人には作れません。

boojapan
質問者

補足

「シート1」で1日の各項目ごとにデータを入力し集計。 「シート2」には1ヶ月分(31日分)の各項目の毎日のデータ(シート1で集計した)と縦横合計。 それぞれ入っています。 「シート1」で集計したデータを、「シート2」の同じ各項目に コピーしたいのです。シート2」の各セルにIF文を入れたのですが 循環参照エラーが出るので使えません。 SHEET1************************************** "B1"     データ1 データ2…項目別合計 6 日分 項目1   入力      項目1計  ・             ・  ・   入力        ・ 項目20          項目20計 SHEET2******************************** 項目別 "F2" "AJ2"     累計 1日・・・31日 項目1  31   1 ・・・ 1     ↓  ↓   ↓    ↓ 項目20 31   1 ・・・ 1  日計 620 20・・・ 20 SHEET1の日付("B1")とSHEET2の日付("F2"~"AJ2")が一致した列に データをコピーしたいのです。 説明が足らなくて申し訳ありません。

  • GGL
  • ベストアンサー率45% (23/51)
回答No.1

構文エラー内容はなんでしょ? その文法から察するに、 If文の判定部分に難があるように思えます。 具体的には「型違い」かと思っていますが。。。

boojapan
質問者

補足

早速の回答有難うございます。 構文エラーとだけ出るのですが・・・型違いとは何でしょうか。 If文をどのようにすれば良いのでしょう? 因みに「B1がシート1」・「J2がシート2」の日付項目です。 シート2コピー先で関数If文を各項目に入れると縦横でSUM関数を使っているので循環参照エラーとなり、よく分からないVBAを使おうとしています。

関連するQ&A

  • Excelで入力用シートのデータを集計用シートに保存するには

    Excelでできるかわからないのですが教えてください。 一つのシートに日付と記入項目10項目(数値)を入力する シートを作成しその作成したシートの日付を基準に 別に作った集計用シートにデータを写し保存することは できるでしょうか? 入力シートは入力しては消して次の日にまた新たなデータを入力してと 入力するためだけの専用シートにしたいです。 また集計シートは各日にち毎のデータを集計するシートにしたいと 思っています。 いろいろ調べたのですが良くわからないので アドバイスいただけませんでしょうか。 よろしくお願いいたします。

  • 別ブック間のすべてのシートのある列を比較

    こんにちは、 エクセルvba超初心者で修行中のものです。 別ブック間のすべてのシートのある列を比較し、同じ値に色を付けるというマクロを 作りたいのですが、 下記のようにシートを限定する→With Workbooks("マクロ1.xls").Sheets("Sheet1") とうまくいくのですが、それぞれのブックのすべてのシートに対して比較をしたいので With Workbooks("マクロ1.xls").worksheets と書くと コンパイルエラー、メソッドまたはデータメンバーが見つかりません と出てきてSet search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)) このなかの左から二つ目のRangeの色が反転します。 vba に関する勉強不足は重々承知しておりますが、意味が理解できません。 どうすれば、シート全体を検索できるようになるのでしょうか? ぜひお力をお貸しください よろしくお願いいたします。 Sub search() Dim search1 As Range, search2 As Range, s As Range, ss As Range With Workbooks("マクロ1.xls").Sheets("Sheet1") Set search1 = .Range(.Range("A2"), .Range("A" & Rows.Count).End(xlUp)) End With With Workbooks("まくろ2.xls").Sheets("Sheet1") Set search2 = .Range(.Range("i2"), .Range("i" & Rows.Count).End(xlUp)) End With For Each s In search1 For Each ss In search2 If s.Value = ss.Value Then s.Interior.ColorIndex = 6 ss.Interior.ColorIndex = 6 End If Next ss Next s End Sub

  • シートが増えていく場合の統合機能について

    シート名に日付を入れて、一日のデータを入力しています。 A     B    C あいう  5   2 かき   3   1 さし   2    0 A列の項目の部分は、増えていきます。データは、毎日ありませんので、シート名の日付は、続いていない時もあります。 で、そのシートの先頭(一番左側)に、日付で入力したシートのデータを統合しています。 日にちが多くなってくると、統合するのは大変なので、マクロ、VBAなどでできないかなぁといった相談です。 1.データを入力する用の”本日”という名前を作成し、データを入力する。 2.集計用のシートの右側のシート(1日とは限らないため)から本日までのシートを統合する。 3.統合できたら、1で作成した本日のシート名を日付に変更する。 2の部分でマクロでできるのかなぁと(マクロの知識がありません)思っているのですが、考え方自体が間違っていますか?マクロの本で探し作成してみましたが、シートが増えないデータ統合はできた(本に載っていたので)のですが、シートが増えていく場合はどのようにしたらいいのか、わかりません。「集計用シートの右側のシート」をどう指定するのかもわかりません。 こうういった統合でマクロを利用するのは、可能なのでしょうか? ご教授いただければ幸いです。

  • Excelのマクロで別のシートに追加する方法

    入力するためのシート1からデータをためるためのシート2に入力するものをマクロのボタンでできるようにしたいのですがどのようにマクロのVBA打てばいいのか分からないので教えて下さい。 したいことは、データ4列でシート1の1行目は項目の行にして、 2行目にデータを入力する。 入力したデータを切り取って、シート2の2行目に張り付けて 次のデータをシート1の2行目に入力して 同じように切り取って次は3行目、4行目…というマクロ作りたいんです。 どなたかお願いします

  • エクセル2003マクロ:1日ごとに書き換えるシートの合計を1ヶ月集計の

    エクセル2003マクロ:1日ごとに書き換えるシートの合計を1ヶ月集計のシートにコピー、貼付けのようなことをすることを教えてください。 1日ごとに書き換えるシートと、1ヶ月集計するシートがあります。 1日ごとにデータをまとめて、そのデータを印刷し、そのデータの合計を1ヶ月単位で集計しているのですが、それをマクロにする方法が分かりません。 1日ごとに書き換えるシートはテンプレートになっていて、日付を書き換えて同じシートを使います。 そこで例えば、シート1(1日ごとに書き換えるシート)のA1:E1のデータを、シート2(1ヶ月単位で集計するシート)の1日なら1日の場所(例えばシート2のA1:E1)、2日なら2日の場所(例えばシート2のA2:E2)にコピー、貼付けのようなことはできるのでしょうか。 まとめてやるのではなく、1日ごとに日付の場所に。というようにしたいです。 分かりづらいかもしれませんが、よろしくお願いします。

  • エクセル(マクロ)で累計部分を更新しながらシートを

    日報作成をマクロで自動化する方法を探しています。 とりあえずできたのは、 1:「1日」シートを作り、セルA1には日付「2015年9月1日」を入力。 2:「1日」シートをコピーして「2日」シートを作成し、セルA1の日付を「2015年9月2日」に変更。 3:2の作業を「31日」シートまで繰り返す。 というところまでです。 (1つのワークブックに、「1日」~「31日」までのシートがある状態です。) これに加えて、たとえば、セルB1に当日売上を入力すると、 セルB2に月累計が出るようにしたいのです。 試してみたのは、「1日」シートのセルB2に「=B1」と入力し、 「2日」~「31日」シートのB2に =INDIRECT(TEXT(A1-1,"1日")&"!B2")+B1 と入力してみましたが、これだと月累計ではなく「1日」シートのみとの合計になってしまい、 「3日」~「31日」シートでは、数式内のシート名"1日"の部分を 手動で更新していかなければなりません。 数式内のシート名を翌日の日付に変更しながらシートをコピーする方法はありますか? または、 B2=前日シートのB2+当日シートのB1 となる数式は無いでしょうか?? ちなみに今マクロで使っているのは下記のコードです。 ——————————— Sub 日報作成() Dim firstDay As Date firstDay = InputBox("日報", "最初の日付を指定", Date) '最初のシートの日付を指定 Worksheets("1日").Range("A1") = firstDay Dim i As Integer For i = 1 To 30 Worksheets("1日").Copy after:=Worksheets(Worksheets.Count) '1日のコピーを末尾に作る Worksheets(Worksheets.Count).Name = i + 1 & "日" 'コピーしたシートの名前を変える Range("A1").Value = DateAdd("d", i, firstDay) '日付を一日ずつ足していく Next i End Sub ――――――――――― 似たようなデータを毎月大量に作るので、どうにか効率化できたらと思っています。 ちなみに、わたしはプログラミングCを少しかじったことがありますが、 マクロを使うのは初で、上記もネットで見つけたコードを少しいじった程度です、、 詳しい方がいらしたら教えてください。 よろしくお願いいたします。

  • Excel VBA 複数のブックの複数シートから

    Excel VBA 複数のブックの複数シートからデータをコピーするマクロを作成したのですが、 コピー部分が上手く作動せず、訳の解らないデータが貼り付いてしまいます。 ちゃんとファイルは読み込んでいます。 、 VBA超初心者なので、うまく動作しませんでした。 どこが悪いのか教えて頂けないでしょうか。 やりたいことは ・同一フォルダ内に複数のExcelファイルがある ・各ファイル内には複数のシートがあり、シート数はファイル毎にばらばら ・各シートの構造は全て同じ ・VBAを保存してあるExcel(貼り付け用.xls)も同じフォルダに置いて作業します ・JEまとめ.ファイルの原本シートをコピーして、シート名に日付を入れたシートに ・全シート下記のセルのコピー(値、縦横変換)を日付をいれた原本コピーのシートに B1~3セル→A~C B4~5セル→G~H B6セル→J J22~24→D~F をシートの一番最初の行は見出しなので、その後上から順に値の貼付けをしたいのです。 エクセルは2003です。 宜しくお願いいたします。 Sub 集計コピー操作() Dim 集 As Workbook, 開 As Workbook Dim 原 As Worksheet, コピー As Worksheet Dim パス As String, フォルダ As String Dim 日付 As String Dim 紙 As Integer Dim 終 As Integer Dim 数 As Long '書込み行 '日付取得 日付 = Format(Date, "yyyymmdd") '新規シート追加 'シート名チェック Set 集 = ThisWorkbook For Each 原 In 集.Worksheets If 原.Name = 日付 Then 原.Activate Exit For End If Next 原 'シート作成 If 原 Is Nothing Then 'シート名が存在しない場合は作成 Sheets("原本").Copy Before:=Sheets(1) Set 原 = ActiveSheet 原.Name = 日付 Else End If 'Application.ScreenUpdating = False '画面ちらつき防止 'ファイル名設定 Set 集 = ThisWorkbook 'このbookをまとめとする。 パス = ThisWorkbook.Path 'このbookのパスを取得 フォルダ = Dir(パス & "\*.xls") 'フォルダ内のExcelブックを検索 Do Until フォルダ = Empty '全て検索 If フォルダ <> 集.Name Then 'book名がこのbookの名前でなければ 'コピーブックの設定 Set 開 = Workbooks.Open(パス & "\" & フォルダ) '開ファイルとする。 紙 = Worksheets.Count 'シートカウント For 終 = 1 To 紙 数 = 数 + 1 'シートループ処理 For Each コピー In 開.Worksheets With WorksheetFunction 原.Cells(数, "A").Value = コピー.Range("B1").Value 原.Cells(数, "B").Value = コピー.Range("B2").Value 原.Cells(数, "C").Value = コピー.Range("B3").Value 原.Cells(数, "G").Value = コピー.Range("B4").Value 原.Cells(数, "H").Value = コピー.Range("B5").Value 原.Cells(数, "J").Value = コピー.Range("B6").Value 原.Cells(数, "D").Value = コピー.Range("J22").Value 原.Cells(数, "E").Value = コピー.Range("J23").Value 原.Cells(数, "F").Value = コピー.Range("J24").Value End With Next Next 'ブッククローズ処理 開.Close (False) '保存せずに閉じる End If フォルダ = Dir 'フォルダ内の次のbookを検索 Loop Application.ScreenUpdating = True '画面ちらつき防止を解除 MsgBox 紙 & "件のファイルをコピーしました。" End Sub

  • エクセルでマクロを使って新規シートを作成する方法を教えてください!(条件あります)

    初めて質問するのですが、エクセルで原紙シートのマクロまで全てをコピーして新規のシートを作成させるにはどうしたらいいですか? 新規のシートの特定のセルに入力した時に新規シートが作成されるようにできますか? 原紙は Private Sub Worksheet_Change(ByVal Target As Range) On Error Resume Next If Target.Address = "$A$1" Then ActiveSheet.Name = Target.Value End If End Sub のマクロが現在できあがってます。これを残しつつできますか?よろしくお願いします!

  • エクセルVBAで、シートをコピーした際、コピーされた新しいシートのほう

    エクセルVBAで、シートをコピーした際、コピーされた新しいシートのほうを指定する言葉を知りたい。 コマンドボタンにて、(1)内訳用シートをコピーで増やす。(2)新しいシートの番号を連番になるよう1増やす。(3)新しいシートのほうは入力しやすいよう、入力欄を消去する。シート名も1.2.3...とふえていくようにしたい。 新しくコピーされたほうのシートを指定したい場合はどのようなVBA用語になりますか? いまは、元のシート指定方法しかわからないため、元シートの前にコピー作成し、元シートのNoを1増やし、データ消去で対応していますが、これだと、シート名に表示される内訳(1)(2)・・という番号になるので、できれば、コピーしたほうのシートを指定して、Noを1増やし、データ消去できれば解決するとおもうので。。いま、使ってるVBAはこんな式です。 ちなみにK6はシートNo、("B10:H30")("J10:K30")は入力欄です。 Private Sub CommandButton1_Click() ActiveSheet.Copy Before:=ActiveSheet Range("K6").Value = Range("K6").Value + 1 Range("B10:H30").ClearContents Range("J10:K30").ClearContents ActiveSheet.Select ActiveSheet.Name = Range("K6").Value End Sub

  • エクセル 関数 複数条件

    データーの集計を 関数かマクロでしたいのですが例えばこのようなデーターが ある場合は自動集計出来ますか? 日付は入力して、その期間だけ集計したいです。 A     B    C   D   E 2009/2/1 2009/2/28 ←日付は自分で入力 項目   A社   B社  C社  D社 鉛筆 紙 赤鉛筆 : : データーはSHeet1にあり 日付を入力すると自動計算されるようにしたいです。 ちなみに データーのSheetには A      B   C   2000/2/14  C社  鉛筆 2000/2/12  B社  赤 2000/2/11  C社  鉛筆 この場合 A     B    C   D   E 2009/2/1 2009/2/28 ←日付は自分で入力 項目   A社   B社  C社  D社 鉛筆        2←と自動計算させたい!! 紙 すいません!関数かマクロを 教えていただきませんか?

専門家に質問してみよう