• ベストアンサー

VBAを使ってセルを検索後別シートのデータを自動入力したいです。

見ていただきありがとうございます。 エクセルの2000VBAを使って次のようなことを考えています。 シート2に以下のようなデータがあります。 2006/7/20 コード 数量  100  200   200  400 データの数は日によって違います。 シート1には以下の表があります。横軸にはコード縦軸には日付が入っており各対応するセルに数量が入っています。       100  200  300  400 ....←コード 2006/7/1  20  40  100  800 2006/7/2  50  60  200  500   .   .   . 2007/6/30  このような場合、シート2にコマンドボタンを設けて押したときシート2の日付とコード番号によりシート1の表の検索を行って対応するセルにシート2のデータを転記したいのです。シート2のデータは本日分のデータが入った時点でシート1への転記を行います。(1日一回です) また、シート1の表は2007/6/30(これ以降は必要ないので)までの日付がすでに入力されており明日以降のデータの入るセルは空白になっております。 よろしくお願いします。

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

  • ベストアンサー
  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.5

>sheet1のコードがが2行目に記入されている場合は  For idxR = LastR To 3 Step -1 を  For idxR = LastR To 2 Step -1 にします。 でもそうすると検索する日付はどこに行くのですか?  trgR = Application.Match(.Cells(1, 1), Worksheets("Sheet1").Range("A:A"), 0) のCells(1,1)でA1の内容を参照しますので、この部分も変更しないとダメですね。日付が入っているセルに変更して下さい。Cells(行番号、列番号)です。

nakkya
質問者

お礼

詳しくご親切に教えていただいて有難うございました。 おかげさまで助かりました。 丸投げになってしまい申し訳ありませんでした。

その他の回答 (4)

  • NCU
  • ベストアンサー率10% (32/318)
回答No.4

> シート1の表は2007/6/30(これ以降は必要ないので)までの日付がすでに入力されており明日以降のデータの入るセルは空白になっております。 それならデータテーブルが早いのでは? 転記しなくてもリアルタイムで反映しますが。 丸投げ勘違いさんには理解できないかもしれませんが。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.3

#01です >Sheet2のコードが赤色に反転して とのことですが、もし全てのコードが赤色に着色されたなら、Sheet2のA1セルに入力した日付と、Sheet1のA列に入力した日付の形式(タイプ)が異なっている可能性があります。形式を合わせてください。 例)Sheet1は2006/7/1と手入力し、Sheet2は =NOW()で入力し書式を yyyy/m/ddとしている それを検証するためマクロを一部変えました。もし日付の検索でエラーとなる場合はコードではなく日付が着色されるはずです。(Sheet1の日付がどのように入力されたかがわかればマクロでも対応できるのですが、それがわからないので確認までしかできません) Sub Macro1() Dim LastR, idxR As Long, trgR, trgC With Worksheets("Sheet2") LastR = .Range("A65536").End(xlUp).Row trgR = Application.Match(.Cells(1, 1), Worksheets("Sheet1").Range("A:A"), 0) If IsNumeric(trgR) Then For idxR = LastR To 3 Step -1 trgC = Application.Match(.Cells(idxR, 1), Worksheets("Sheet1").Range("1:1"), 0) If IsNumeric(trgR) And IsNumeric(trgC) Then Worksheets("Sheet1").Cells(trgR, trgC) = .Cells(idxR, 2) Else .Cells(idxR, 1).Interior.ColorIndex = 3 End If Next idxR Else .Cells(1, 1).Interior.ColorIndex = 3 End If End With End Sub >それとSheet1の1行目はB列からにしましたがよかったでしょうか?  はい。コードはB列からが正しいです。

nakkya
質問者

補足

有難うございました。同じシートにて今回の新しいマクロを入れたところうまくいきました。日付等一切変えてないのですがどこがいけないのか私には分かりません。でもうまくいきました。 後、もうひとつ教えていただきたいのですが、sheet1のコードがが2行目に記入されている場合はマクロのどこを変更すればよいのでしょうか?すいませんがお願いします。 当方整理されたマクロはかえって分からなくなってしまい、ちんぷんかんぷんです。

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

VBA ではないです。 例) 日付    コード  数量 2006/7/20  A100  200 2006/7/20  A200  400 2006/7/20  A300  10 2006/7/20  B100  5 2006/7/21  E100  300 2006/7/22  A100  50 2006/7/22  A300  15 2006/7/22  B200  150 2006/7/22  B300  500 こんな感じでデータは日々蓄積し、マトリクス(下図)がほしければ ピボットテーブルで...ってのはダメですか?        A100  A200  A300 .... E100 2006/ 7/20   200   400   10 .... 2006/ 7/21                300 ・ ・ [データ]メニューにあるピボットテーブルをクリックして、ウィザード を起動し、3/3 のページで[レイアウト]ボタンを押し下記のように項目 をドロップするだけです。 列の枠: 日付 行の枠: コード データ: 数量

nakkya
質問者

お礼

有難うございました。 当方、マクロにて行いたいのでzap35さんのほうで行いたいと思います。 またよろしくお願いします。

  • zap35
  • ベストアンサー率44% (1383/3079)
回答No.1

Sheet2という名前のシートが     A列    B列 1行目 2006/7/5 2行目 コード   数量 3行目  100    200 Sheet1という名前のシートが     A列   B列   C列   D列 … 1行目 100    200   300   400 2行目 2006/7/1  20   40    100 3行目 2006/7/2  50   60    200  のセル配置の時、 Sub Macro1() Dim LastR, idxR As Long, trgR, trgC  With Worksheets("Sheet2")   LastR = .Range("A65536").End(xlUp).Row   trgR = Application.Match(.Cells(1, 1), Worksheets("Sheet1").Range("A:A"), 0)   For idxR = LastR To 3 Step -1    trgC = Application.Match(.Cells(idxR, 1), Worksheets("Sheet1").Range("1:1"), 0)    If IsNumeric(trgR) And IsNumeric(trgC) Then     Worksheets("Sheet1").Cells(trgR, trgC) = .Cells(idxR, 2)    Else     .Cells(idxR, 1).Interior.ColorIndex = 3    End If   Next idxR  End With End Sub なおコードが合致しないときはSheet2のセルの色を変えています。

nakkya
質問者

補足

早々に回答を頂きありがとうございます。 例にならってsheet1とSheet2を作成してSheet2にコマンドボタンを作成して実行してみたところ、Sheet2のコードが赤色に反転してsheet1に転記できませんでした。どこがいけないのでしょうか? それとSheet1の1行目はB列からにしましたがよかったでしょうか?     A列   B列   C列   D列 … 1行目 100⇒⇒⇒100   200    300   400 2行目 2006/7/1  20   40    100 3行目 2006/7/2  50   60    200  よろしくお願いします。

関連するQ&A

  • エクセル2007です。セルの塗りつぶしを自動に実行するVBAについて、

    エクセル2007です。セルの塗りつぶしを自動に実行するVBAについて教えてください。システム日付でVBAを使用したいのですが横軸に日付(2010/1/1~2015/12/31)、縦軸に時間(0~24まで)があるシートです。日付と時間がマッチしたところのセルを緑色に塗りつぶしたいと思います(スケジュール表を作成中です)。VBA初心者ですが、記述等教えていただきたいと思います。よろしくお願いします。

  • VBA:日付を配列に入れ別セルに転記するとデータ型が変わる

    データを別シートに転記するVBAコードを書いていて気付きました。 日付データをバリアント型の配列に入れて、再度書き出すと 21/2/2005 のように表示され、さらに日付ではなく、文字列になってしまいました。 具体的には下記のような内容です。Sheet1 の A1:A10 に 2005/2/21 のような日付が入力されています。 1. セル範囲のデータをバリアント型の配列に格納 2. 1.を別のセルへ一括転記を行う Sub TestMacro()   Dim Buf As Variant   With Sheets("Sheet1").Range("A1:A10")     Buf = .Value     '・・・(1)     .Offset(0, 3) = Buf  '・・・(2)   End With End Sub ウォッチ式で変数を確認すると(1)および(2)の時点では #05/02/21# Variant/Date型 と正しく日付として扱われているようです。しかし、転記されたセルを見てみると、「文字列で 21/2/2005 」となっているのです。 2005/2/21 が返されるものと思うのですが、なぜ、このような現象が起こるのでしょうか?何かとんでもない勘違いをしているのでしょうか? テスト環境は Win98SE + EXCEL2002 です。よろしくお願いします。

  • 別シートに空白セルを詰めデータを自動コピー

    excel2013で、【sheet1】の列にあ~わ行まであり、行にそれぞれ氏名を入れています。 グループ1とグループ2にページを上下に分けていて、それぞれ合計50名です。 行は各20行まで用意していますが、行によっては空白セルもあります。 この【sheet1】のデータを【sheet2】の1~100番まで番号を振った隣のB列に空白セルを詰めながら氏名データを並べたいのですが、マクロで出来るでしょうか? ちなみに空白セルを詰めるマクロは下記コードで確認しています。 Sub Macro() Selection.SpecialCells(xlCellTypeBlanks).Select Selection.Delete Shift:=xlUp End Sub シート間のデータ移動の方法も分かるのですが、2つをどう繋ぎ合わせればいいか分かりません。 簡単ですが、sheet1の参考画像も添付していますので、アドバイス宜しくお願いします。

  • VBA 別シートの最終行に追記

    ExcelのSheet1で作成した表の一部項目を、Sheet2に一覧表としてまとめたいのです。 例えばSheet1にアンケート項目のような入力されていて、毎日使いまわします。 セルA1: 訪問日→固定     セルB1: (日付)→更新 セルA3: お客様指名→固定  セルB3: (氏名)→更新 使いまわすので、1度入力されたものは、Sheet2に一覧表として転記しておきたいのです。Sheet2の一覧表の最終行をみつけて追記していきたいです。 書いてみたのは以下の通り。 Private Sub 登録ボタン_Click() Dim SH1 As Worksheet, SH2 As Worksheet Dim GYO As Long Set SH1 = ThisWorkbook.Worksheets("回答内容") Set SH2 = ThisWorkbook.Worksheets("情報シート") ' Sheet2の最終行を取得 GYO = SH2.Range("$A$65536").End(xlUp).Row ' 最終行の次行を取得 If SH2.Cells(GYO, 1).Value <> "" Then GYO = GYO + 1  ' 現在の収容位置の下に転記 SH2.Cells(GYO, 1).Resize(1, 20).Value = SH1.Range("$c$2:$D$10").Value With SH1 .Range("A3").Copy Destination:=SH2.Range("A2") .Range("B3").Copy Destination:=SH2.Range("B2") End With End Sub 項目は飛び飛びのセルに入力されていて、それらをまとめて一覧表の1行にまとめたいと思っています。 ここでは例としてSheet1[A3][B3]セルをSheet2へ転記していますが、項目はもっといっぱいあります。 記載したコードで実行すると、1回目は転記されますが、2回目以降が追記されていきません。 ' 現在の収容位置の下に転記 のところに問題があると思っています。 全くの初心者が、コードを書くのには無理があると思いますが、どなたか教えていただけないでしょうか。宜しくお願いします。

  • エクセルの表でリンクさせて列行を入れ替える方法

    教えてください。 横軸に日付が1日から31日まで入っていて縦軸に項目が何十個もあります。これを別のシートに縦軸に日付が1日から31日まであるセルにリンクさせ完全に縦横逆になる表を作るにはどのようにしたら簡単にできるか教えてください。

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

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

  • Excel2010VBAのセルの入力が遅い

    Excel2010のVBAなんですが、処理時間が非常に遅いです。プログラムの中でも遅い部分はセルに入力する部分です。多分24時間ぐらいプログラムを走らせておきましたがそれでも終わっていませんでした。 シートは6個あり、それぞれ関数の計算がされており、シート1からシート3までの計算されたものがシート4に出力され、そのシート4からプログラムで計算してシート5に出力されるコードです。 シート5に出力するデータは、「年」、「月」、「日にち」、「時刻」、「データ1」、「データ2」、「データ3」、「データ4」の8つの項目です。これは全ての行に入力するわけではなく、入力しなくてもいい空白の部分もあります。空白でもいいセルには入力の処理はしないようになっています。 処理時間が遅いというのは、データ量が非常に多いということもあるのですが最初に参照するデータは50万件以上(実際はこれよりはるかにあるのですが区切っています。)あります。 全てのコードはここには記載しませんが、特に遅いセルの入力の部分は、次の通りです。 For~ With Workbooks("ブック名.xlsm").Worksheets("シート5") .Cells(b, 1) = Year(日付) .Cells(b, 2) = Month(日付) .Cells(b, 3) = Day(日付) .Cells(b, 4) = TimeValue(日付) .Cells(b, 5) = Application.Round(データ1, 3) .Cells(b, 6) = Application.Round(データ2, 3) .Cells(b, 7) = Application.Round(データ3, 3) .Cells(b, 8) = Application.Round(データ4, 3) End With Next この部分の処理を早くするにはどうしたらいいでしょうか? 回答よろしくお願いします。

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

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

  • 別シートのデータを指定したセルに読み込みたい

    Excell for Mac 2011 を使用しています。 画像のイメージのように、シート1のデータをシート2の指定したセルに読み込みたいのですが可能でしょうか? また、シート1のデータは商品が増える度にセルの位置が変わります。 (Aの次にA-1という品番が追加される、そうするとB以降のセルの位置がずれるという感じです) なので【シート1の「D2」をシート2の「D12」に読み込む】のではなく 【シート1のA列が「A」(品番)且つ       B列が「M」(サイズ)且つ       C列が「BLUE」(カラー)の       D列 (在庫数量)を  シート2の「D12」に読み込む】 という細かい指定をしたいのですが、可能でしょうか・・・? ご教示宜しくお願い致します。

  • 商品コード別集計表を作りたいのですけどアドバイスお願いします

    商品コード別集計表を作りたいのですけどアドバイスお願いします すでにできているシートを改良して集計表を作りたいのですけどアドバイスお願いします 【何がしたい】データー原本は下記のように日別にランダムにデータを入力しています これを横軸に日付、縦軸に商品コードそして表にはその日毎の売り上げ総数個数を表示します 〈データ原本〉 404482324 50 404461254 100 404452664 50 404452664 230 404452324 110 ............. 404462428 150 先頭9桁の数字は前5桁が日付で残りが商品コードです 次のセルはその日に売り上げた個数です 《結果(新しいシート)》 商品コード 9/1 9/2.....9/24 9/25..9/27 9/30 1254........................100 2324...................110........50 2428........................150 2664...................280........50 アドバイスお願いします。すでにできているシートには何日にこの商品が売れたの一覧表でした

専門家に質問してみよう