Excel2000でVBAを使用して特定のデータを転記する方法を教えてください

このQ&Aのポイント
  • Excel2000で特定のデータを自動で転記するためのVBAコードの記述方法を教えてください。
  • mainシートと各時間帯のシートには、年月日とデータが2列構成であり、mainシートのカレンダーをクリックすることで、各時間帯のシートに自動でデータを転記したいです。
  • ご教示いただけるとありがたいです。できれば具体的なコードの例も教えていただけると助かります。
回答を見る
  • ベストアンサー

excel2000でお助けください

関数では、何とかできるのですが、ファイルがとても重くなってしまうので、VBAの記述で対処するコードの記述を教えていただきたいです。 まず添付写真を参照願います。 mainシートに、A列-年月日、B列-時間、C列-データと3列構成の表があります。 一日24行のデータがあり、毎日ずっとデータが更新して下行に増えていきます。 そして、隣のシートに[00時]、さらにその隣に[01時]、[02時]・・・・とシートが[23時]まで計24枚のシートが続いています。 これらのシートは、A列-年月日、B列-データの2列構成です。 ここで、mainのシートのコマンドボタンを押すとカレンダーが表れ、その日をクリックすると mainシートのそれぞれの年月日と時間に対応するデータを、それぞれの時間に対応するシートに自動で転記させたいです。 たとえば、写真のように、mainシートの2013/8/22の00時のデータが541なので、00時シートの2013/8/22の行のデータの値を、自動で541と表示させたいのです。 mainシートにどういったコードを記述すれば、こういったことが出来るか、教えていただけないでしょうか? 自分では、どうもコードがイメージできず、せめてヒントだけでも教えていただけると助かります。

  • puyopa
  • お礼率87% (459/525)

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

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

Option Explicit Sub Sampling() Dim xName As String Dim xNum As Long On Error Resume Next Application.DisplayAlerts = False Application.ScreenUpdating = False With Worksheets("main").Range("A1") For xNum = 0 To 23 xName = Format(xNum, "00") & "時" Debug.Print xName Worksheets(xName).Delete Worksheets.Add After:=Worksheets(Worksheets.Count) Debug.Print ActiveSheet.Name Worksheets(Worksheets.Count).Name = xName Worksheets("main").AutoFilterMode = False .AutoFilter Field:=2, Criteria1:=xName .Range("A:A,C:C").SpecialCells(xlCellTypeVisible).Cells.Copy Worksheets(xName).Range("A1") Next ' Worksheets("main").AutoFilterMode = False .AutoFilter End With Application.DisplayAlerts = True Application.ScreenUpdating = True End Sub

その他の回答 (3)

  • kmetu
  • ベストアンサー率41% (562/1346)
回答No.3

VBAを使わずに mainシートの一番左に一行挿入して A2に =IF(B2="","",TEXT(B2,"yyyy/mm/dd")&C2) と入力して下へ必要なだけコピーしてください。 00時のシートのB2に =IF(ISNA(VLOOKUP(TEXT(A2,"yyyy/mm/dd")&RIGHT(CELL("filename",A2),LEN(CELL("filename",A2))-FIND("]",CELL("filename",A2))),Sheet1!A:D,4,FALSE)),"",VLOOKUP(TEXT(A2,"yyyy/mm/dd")&RIGHT(CELL("filename",A2),LEN(CELL("filename",A2))-FIND("]",CELL("filename",A2))),Sheet1!A:D,4,FALSE)) と入力して下へ必要なだけコピーしてください。 あとは01時以降のシートで同じ操作をしてください。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.2

ピボットテーブルではだめなんですか? シート別に分けたあと、どう使うのか気になります。

  • tsubuyuki
  • ベストアンサー率45% (699/1545)
回答No.1

例えば、ワークシート関数で頑張るなら =INDEX(main!$C$1:$C$100,SUMPRODUCT((main!$A$1:$A$100='00時'!A2)*(main!$B$1:$B$100="00時")*ROW($A$1:$A$100))) こんな感じでしょうか(mainが100行以内の場合)。 その他、手動でこなそうと思ったら恐らくフィルタを使うことになるでしょう。 mainシート“以外”のシート名で「時間」にフィルタをかけ、 抽出されたものをコピー、該当シートに貼り付け・・繰り返し。 という手順でしょう。 Sub sample() Dim sh As Long With Sheets("main").Range("A1")     For sh = 2 To Sheets.Count         Sheets(sh).Cells.Delete         .AutoFilter Field:=2, Criteria1:=Sheets(sh).Name         .Range("A:A,C:C").SpecialCells(xlCellTypeConstants, 23).Copy         Sheets(sh).Range("A1").PasteSpecial Paste:=xlPasteAll     Next     .AutoFilter End With End Sub 大体、こんな感じになろうかと。 ただし、データ量によってはもしかしたらメモリ不足が出るかもしれません。 参考までにどうぞ。

関連するQ&A

  • excel2000マクロ記述

    シート名JISEKIの中のF列には2行目から4桁のコードが入っています。 X列の2行目から数値データが入っています。 条件としてF列のコードがA310又はA505で、X列の数値がマイナスの場合は、 R列からW列の数値データを非表示にしたい。 これをマクロ化したいのですが、記述の仕方を教えてください。

  • 【Excel】一致するデータの検索

    Excel2003を使用しています。 Sheet1のB列の値がSheet2のA列に入力されている値と一致したら、Sheet1のC列とD列の値をSheet2のC列とD列に表示させたく、VLOOKUP関数を使用したところ、Sheet1のB列とSheet2のA列のデータの並び方(順序)が同じではないためか、VLOOKUP関数ではできませんでした。 こういう場合、マクロで処理することは可能でしょうか?可能であれば、どのようにコードを記述すればいいでしょうか? Sheet1のデータは4行目から、Sheet2のデータは6行目から入力されています。 よろしくお願いします。

  • エクセル:マクロの起動条件

    お世話になります。 以下の条件でのマクロを起動する方法、及びそのマクロを教えてください。 《条件》 ブックを開いた時、あるシートのC列でデータが入っている最下行の行番号とA列のデータが入って最下行の行番号の差が100以下だった場合、マクロを実行する。 (なおC列の行番号の方が必ず大きいです) ちなみに実行したいマクロは1~6の手順です。 1.ブックを開いたとき 2.「入力用」という名前のシートのC列でデータが入っている最下行の行番号とA列のデータが入っている最下行の行番号の差が100以下だった場合 3.「入力用」というシートにかかっているシートの保護をはずし 4.データが入っているC列の最下行のA~Z列を選択して、50行分 下にコピーする。  (例えば、C列の最下行が350行の場合、A350~Z350まで を選択したあと400行まで下にコピーする。) 5.再度シートの保護をかけ 6.A列でデータが入っている最下行の1つ下のセルを選択する ちなみに、2の条件に当てはまらないときはマクロを実行しません。 またC列の最下行よりA列の最下行が大きい数字になることはないはずですが、もし同じかA列の方が大きい場合、「エラー:C列よりA列が大きくなっています」と画面に表示させたい。 なお、行番号の差:100、選択するA~Z行、50行分下にコピー は変わる可能性があるので、修正する場合どの部分を修正すればよいかも教えてください。 よろしくお願いします。

  • EXCEL2000VBAの記述について

    e列~j列の5行目に 下記の項目が入っています。   e列 f列 g列 h列 i列 j列 5行目 4月 5月 6月 7月 8月 9月 別シートのE列の5行目に入っているデータと、上記の列(e列~j列)の5行目に入っているデータが 同じの場合は、別シートのE列の6行目から38行目に入っているデータをコピーして、上記の 同じ項目の場所の6行目から38行目にデータを貼り付けたい場合 VBAで記述の仕方を教えてください。

  • EXCEL2007 集計方法を教えて下さい。

    EXCEL2007 集計方法を教えて下さい。 sheet1は、商品の出荷データが入っています。 A列・・得意先コード、B列・・品番、C列・・出荷数 sheet2で集計します。 A2以降に商品コードが入力してあります。 A1に得意先コードを入力すれば、sheet1のA列を参照し、該当得意先の商品出荷数をsheet2のC列に集計したいのです。 (sheet1のデータは羅列です。 例えば、山本屋のりんご購入履歴が1行目や10行目21行目と入力されているイメージです。

  • excel2000マクロ抽出方法

    2つのファイルがあります。ブック名A.XLS シート名 WORK              ブック名b.XLS シート名 SORT              ブック名A.XLS シート名 WORKに下記のデータが入っています。 AD 1300G A227550 000PA505(C列2行目) 200112(F列)200201(G列)200202(H列)200203(I列)200204(J列)200205(K列)→1行目固定データ AD 1300G A227550 000PA533(C列3行目)   ブック名b.XLS シート名 SORTに下記のデータが入っています。 AD 1300G A227550 000PA505(A列2行目)200112(E列)200201(F列)200202(G列)200203(H列)200204(I列)200205(J列) →1行目E列~J列のデータは都度変わっている AD 1300G A227550 000PA533(A列3行目)    データ抽出条件  ブック名A.XLS シート名 WORKの F列~K列の1行目の列データとブック名b.XLS シート名 SORTの  E列~J列の1行目の列データが同じで、ブック名A.XLS シート名 WORKのC列の2行目以降のコードと  ブック名b.XLS シート名 SORTのA列の2行目以降のコードが同じだったら  ブック名b.XLS シート名 WORKの E列~J列の同じ行にデータを入れる。違うときは、  ブック名b.XLS シート名 WORKのデータはそのままにする。 上記の条件を満たしたマクロの記述の仕方を教えてください。 以上よろしくお願いします。

  • エクセル 入力した年月日によって、行を入れ替えることって可能ですか?

    A列1行目:2008、B列1行目:11、C列1行目:20といったように、 セルが分かれて年月日が入力されているデータがあります。 このデータに後から下の行に入力していく年月日が、例えば、 A列2行目:2008、B列2行目:10、C列2行目:20の時、 この2行目の年月日の方が、1行目の年月日よりも先の日付となりますが、 この時、1行目と2行目を自動で入れ替えてくれるような仕組み?を 組むことは可能でしょうか? お知恵を貸して下さい。よろしくお願いいたします。

  • Excel関数、またはVBA

    どなたか教えてください。 写真のようにデータが既に存在します。 (E列:L列)の値を、(H列)がゼロ値でも空セルでもない場合のみ、(P列)がゼロ値でも空セルでもない下行に「値のみ」移動させたいです。 (H列がゼロ値か空セルの場合は移動さない) E列からL列の値は1行目から始まり、約60行ごとにランダムで存在します。 例えば写真でいうと(H1)が1以上なので、(E1:L1)の値がP1からP5がゼロか空セルのためP6に移動となります。 どうぞよろしくお願いします。

  • EXCEL2000:上書きするVBAのコードを教えてください。

    EXCEL2000のマクロを使用して以下のようなことをやりたいと考えています。 VBAに記載するコードを教えていただけますでしょうか。 ●シート構成 1.データシート A列:各データを識別するコード(3桁で000、001等) B列:氏名 C列:年齢 D列:性別 2.入力シート A列:各データを識別するコード(3桁で000、001等) B列:氏名 C列:年齢 ●やりたいこと 1.「入力シート」に識別コードをふり、データを入力しています。 2.そのデータとは別に、「データシート」にもデータを入力しています。 3.「データシート」に存在するデータに関しては、入力シート上のA列:識別コードと同じデータのB列:氏名とC列:年齢を、「入力シート」上のそれぞれの列に上書きします。 4.「データシート」に存在しないデータに関しては、「入力シート」上に存在するデータをそのまま残します。 マクロを作動させると、上記一連の作業が完了するようにできればと考えています。 まとめますと、「データシート」上にデータが存在すればそれを「入力シート」上に表示し、存在しなければ「入力シート」のデータをそのまま表示するというような仕組みにできればと考えています。 ご回答よろしくお願い致します。

  • EXCEL2000:データの抽出

    EXCEL2000で、同ファイル内のデータ抽出に関して質問があります。 あるシート(シート1)に契約一覧を作成しています。 各契約の担当者を入力した際(A列)に、その担当者コードを自動的にとなりのセル(B列)に入力できるようにしたいと考えています。 対応する担当者コードは、別シート(シート2)に担当者一覧テーブルを作成しました。 おそらく関数をB列に設定して、A列の数値をデータに反映させて返すという形になると思うのですが、どの関数を使えばよいのでしょうか? ヘルプで確認した限りだと、DGET関数というのが適切なような気がするのですが、各引数に何を入力すべきなのかがいまいちつかめません。 ご返答よろしくお願い致します。

専門家に質問してみよう