• ベストアンサー

ブック間でデータの移植をしたい(Excel2000)

関数なら少しわかるけど,マクロはさっぱりなので質問します。 ブックが2つあります。 BOOK1はそれぞれシート名に個人名が入っていて, 1行目には科目名,A列には日付が入っています。 入力されているデータはその科目の点数が数値で入っています。 BOOK2は,ファイル名が日付(例:030115.xls)で1シートで構成されており, ある日の試験の成績がA列に個人名,B列以降に科目毎の点数が入っています。 (シート名はsheet1のまま) 次から次へと提出されるBOOK2のデータを BOOK1の個別シートに集めていきたいのですが... 関数でできればそれに越したことはありませんが, マクロででもできれば嬉しいです。 急ぎなので勉強をしている時間がなく,助けて下さい! わからないことがあればなるべく早く補足します。

noname#61366
noname#61366

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

  • ベストアンサー
  • nishi6
  • ベストアンサー率67% (869/1280)
回答No.3

参考にコードを書いて見ました。 試験の成績のBookのSheet1は 個人名  英語  数学  国語  理科 山田太郎 90  91  92  93 木村花子 51  52  53  54 佐藤一郎 76  77  78  79  : のようになっているとします。科目数が『4』の例です。 個人単位のBookの初期状態はSheet1のみとします。 試験の成績Bookを読むたびに個人名のシートが無ければこの個人名のシートを自動的に追加していきます。 マクロを動かし、集計するファイル名を選択します。 Sheet名:山田太郎  日付   英語  数学  国語  理科  2003/1/15 90  91  92  93  2003/1/25 **  **  **  ** のように集計していきます。 個人単位のBookのSheet1のコードウインドウに貼り付けます。ご参考に。(当方、Excel97です) ↓ Sub Test()   Const KamokuSuu = 4 '試験の科目数 ***ここは例***   Dim myWB As Workbook '個人シートで編成されたBook     Set myWB = ThisWorkbook   Dim wbName As String '試験の成績のBook名   Dim tstWB As Workbook '試験の成績Book   Dim tstSht As Worksheet '試験の成績BookのSheet1   Dim strDay As String 'シート名から求めた日付(文字列)   Dim Hizuke As Date 'シート名から求めた日付   '開くBookを選択する   wbName = Application.GetOpenFilename()   If wbName <> "False" Then     Workbooks.Open FileName:=wbName     Set tstWB = ActiveWorkbook     Set tstSht = tstWB.Worksheets("Sheet1")   Else     Exit Sub   End If   '日付を求める   strDay = Left(tstWB.Name, 6)   Hizuke = DateSerial("20" & Left(strDay, 2), Mid(strDay, 3, 2), Right(strDay, 2))   '個人単位に処理する   Dim rw As Integer '行カウンタ   Dim Shimei As String '氏名   Dim ws As Worksheet '個人シートで編成されたBookのワークシート   Dim fndFlg As Boolean '個人名で検索したシートの有無   Dim wrtRow As Integer '書き込む行   Dim c As Integer '列カウンタ   myWB.Activate   For rw = 2 To tstSht.Range("A65536").End(xlUp).Row     Shimei = tstSht.Cells(rw, 1)     'その氏名のシートがあるか調べる     fndFlg = False     For Each ws In myWB.Worksheets       If ws.Name = Shimei Then         fndFlg = True       End If     Next     'その個人名のシートがなければ追加する     If fndFlg = False Then       Worksheets.Add after:=Worksheets(Worksheets.Count)       ActiveSheet.Name = Shimei       ' ***ここは例***       ActiveSheet.Range("A1:E1") = Array("日付", "英語", "数学", "国語", "理科")     Else       Worksheets(Shimei).Activate     End If     '個人の得点を書き込む     With ActiveSheet       wrtRow = .Range("A65536").End(xlUp).Row + 1       .Cells(wrtRow, 1) = Hizuke       For c = 1 To KamokuSuu         .Cells(wrtRow, c + 1) = tstSht.Cells(rw, c + 1)       Next     End With   Next   '試験の成績Bookを閉じる   tstWB.Close End Sub

noname#61366
質問者

お礼

ありがとうございました! できました。 あぁ,ちゃんとマクロが書けるようになりたいです。 本当にありがとうございました。

その他の回答 (2)

  • sirouto
  • ベストアンサー率41% (28/67)
回答No.2

別の方法も補足しておきます・・・ まず、BOOK2の表を作った後に、B00K1の個人へ転記する部分の表をコピーします(空白でも構いません)このときにBOOK1へ貼り付ける時に右クリックの形式を選択して貼り付けで、リンク貼り付けを選びます。 貼り付けられた表にのセル内容には =[Book2]Sheet1!B3 などとなっていると思います。この数式を参考にして、個人データのBOOK1の表を作っておいてください。 “!”の後の数字を変更するだけですから、簡単に出来ると思います。これでデータ入力時は、楽になると思いますが、入力前のbook1作成には、少し手間が増えるかもしれません。

noname#61366
質問者

お礼

試験を必ず全員が受けるわけではないし, 学籍番号などで管理しているわけではないので 通常のコピー&ペーストと変わりないように思ってしまいました。 book2のファイルが届いたら自動的に,氏名を検索して, その氏名のシートの再下段に日付を入れつつ, 試験の点数をコピーしたいので... 回答,ありがとうございました。

  • sirouto
  • ベストアンサー率41% (28/67)
回答No.1

これは、Accessの方がやりやすそうですが・・・どうしてもEXCElならば、テンプレートウイザードを利用してはどうでしょうか? 伝票などのBOOKに入力された数字をそのまま自動的にデータベースのBOOKなどへ転記するときに使います。伝票側を個人のBook1にして、転記される日付ごとの試験結果の方をbook2にするのです。 一度試してみてください。  データの項目にテンプレートウイザードで(無ければ、EXCELのCD-ROMから「データ追跡機能付きテンプレートウイザード」アドインを追加組み込みしなければなりません)

noname#61366
質問者

お礼

早々のお返事,ありがとうございました。 そのものの機能があったのですね。 実はすでにいくつかデータがあるので,相談してみます。 この方が簡単そうなので,データの移動は厭わないかも知れません。 ありがとうございました。

関連するQ&A

  • 「Excel」で、異なるブックのデータを一つにまとめたい。

    「エクセル2000」を使用しています。 異なるブックのデータを、うまく一つにまとめる 方法があるかどうか、お教え頂きたいのですが…。 「Book1.xls」には A列に名前 B列に部署名 が、それぞれ入っています。 「Book2.xls」には A列に名前、 B列に内線番号 が入っているとします。 そこで、「Book1」のそれぞれの名前の行に 「Book2」の「内線番号」を表示させたいのですが… そんな事は可能でしょうか? 「Book1」と「Book2」の「名前」のデータは、 ほぼ同じものが入っているのですが 並び順は異なっています。 (「並べ替え」を行ったとしても、 「Book2」の方が遥かにデータ量が多いので、 どうしても行は一致しません) 「同じデータを探して貼り付ける」 という作業が必要になると思うので、 やはり難しいでしょうか…。 ご助言願います。

  • 【Excel-VBA】アクティブセルが参照しているブックを開くには?

    いろいろ検索したのですが、見つからないので質問させていただきます。 対象のセルが他ブックのセルを参照しているとき、そのブックが開かれていない場合、正しい値にはなりません。 (例:A1に =[Book2.xls]Sheet1!$A$3 が入力されている) そこで、そのセルが参照しているブックをVBAで自動的に開く方法を考えています。 つまり、例で言えば、Book2.xlsを開きたいのです。 文字列関数を使ってひとつひとつの文字を取得し、ファイル名を得て開く方法しかないのでしょうか? 何かいい方法があれば教えてください。 よろしくお願いします。

  • EXCEL2010 他ブック セル参照

    Book1のA1セルに、Book2のA1セルを参照するため、 ='D:\TEMP\[Book2.xls]Sheet1'!$A$1 を入力しています。 Book2のSheet1には、マクロを組んでいて、その結果を$A$1から$C$50の範囲に表示させています。 Book1のA1からC50までには、Book2のA1セルからC50までには、同様の式を入力しています。 ご教授願いたい内容は、Book2のマクロ実行後に、Book1に='D:\TEMP\[Book2.xls]Sheet1'!$A$1 を入力した場合は、その結果が表示されるのですが、その後にBook2を更新しマクロ実行すると、Book1の式が='D:\TEMP\[Book2.xls]Sheet1'!'!#REF!とエラーになってします。 Book2を開いて、整列表示の場合でも(='[Book2.xls]Sheet1'!$A$1)結果は、同じです。 何か大事なことを忘れている?または、マクロ実行結果を参照するのは元々無理なのか?悩んでいます。 一応ネット検索したのですが、該当する対処方法が見つけられず、困っています。 解決方法をご教授いただきたく、お願いいたします。

  • excel vba

    テーブル情報に基づきシートをコピーするVBAマクロを記述したい。 ExcelのBook111のSheet1に次のような データが入っています。 (1、2)セルにn=3という数字が入っているものとします。 その数値に合わせて、この場合は3なので Sub Sample01() Workbooks("Book3.xls").Worksheets("booksheet3").Copy After:=Workbooks("Book111.xls").Sheet(1) End Sub のようなつまり、booksheet3なるシートをBook111(固定なBOOK)にコピーしようとしています。 このようなことをVBAで書くにはどうすればいいのでしょうか。 ただしBook名とシート名はあくまでデータの値にもとづいたデータをもってくることになります。 要するに間接参照したデータに基づき処理するのをどのように記述するかという質問です。 A列 B列 1 回数 n=3 2     3     4 Book1.xls book1sheet ←n=1 5 Book2.xls book2sheet ←n=2 6 Book3.xls book3sheet ←n=3 7 Book4.xls book4sheet 8 Book5.xls book5sheet 9 Book6.xls book6sheet ←n=6 10 Abc,xls Defsheet ←n=7

  • Excel 微妙に違う2つのシートのデータをリンクさせる

    ある程度 同じデータのブック1とブック2があり、 ブック1は祭日などデータが無い日も日付があり、行が確保されていますが、 ブック2は祭日などデータが無い日は行が抜いてあります。 A列:日付、B列:曜日 C列:データ1、D列:リンクを入れる 04.11.22 月 56  =[ブック2.xls]シート1!H2 04.11.23 火  04.11.24 水 50  =[ブック2.xls]シート1!H3 04.11.25 木 52  =[ブック2.xls]シート1!H4 04.11.26 金 49  =[ブック2.xls]シート1!H5 04.11.29 月      04.11.30 火 A~C列はブック1、2とも同じデータです。(現在ブック1は1400行、ブック2は1300行くらい) D列にブック2のH列のデータを表記したいのですが、ドラッグなどでは行がずれてしまいます。 関数かマクロなど、何か良い方法を教えて下さい。 下記のことにも対応できれば更に便利なのですが・・。 ブック2のH列は時々J列とか他の列(表範囲内)に移動します。 そしてたまにはブック2のシート1もブック1に移動したりブック2に戻したりもします。

  • 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のデータはそのままにする。 上記の条件を満たしたマクロの記述の仕方を教えてください。 以上よろしくお願いします。

  • エクセルマクロ:別のブックから該当するデータをコピー

    Book1のSheet1、A列に日付、B列に対応するデータがあります。 Book2のSheet1A1セルに入力された日付と一致するBook1Sheet1B列の値を、Book2のB1セルに値貼り付けしたいのですが、どのように記述すればよろしいでしょうか。 宜しくお願いいたします。

  • Excel2003で、C:\tempにある全てのブックのアクティブシー

    Excel2003で、C:\tempにある全てのブックのアクティブシート名をファイル名(拡張子)に設定するマクロをご教示下さい。 例えば、Book1.xls にSheet1、Sheet2、Sheet3とある場合(ブックを開いたと きアクティブなのはSheet1)、Sheet1は「Book1」にリネームされるイメージ です。 C:\tempには、Bool1.xls、Bool2.xls、Bool3.xls、Bool4.xlsとあるので、そ れら全てに同じ処理がなされるイメージです(実際には数百ブックがあります)。 どうぞ、よろしくお願い致します。

  • 他ブックからのデータ検索・コピー(VBA)

    【Book2】(Sheet2)L1に「12-1」を入力 ↓ 【Book1】(Sheet1)で「12-1」をM列、T列、AA列から検索→M4に「12-1」があった ↓ 【Book1】(Sheet1)N4:S4のデータを【Book2】(Sheet2)M1:R1にコピー 各ブックは同一ファイルに保存 検索する文字列の重複はなし 現在は関数≪VLOOKUP≫を使い上記を行っています。 マクロを使った方がスムーズに処理できるのでしょうか。 マクロを使う場合はどのような方法が良いのでしょうか。 データ数は1000行程度、各行の25個のセルに≪VLOOKUP≫関数が入っています。

  • Excel2003 BookからBookへ転記

      A      B       C       D 1 コード   日付   枚数   金額 2 1502     7/1     8    25500 フォルダ内でBook1 Sheet1に毎日の売り上げを入力します、コードが50超あります。コード別にBook2~Book51を作成(Book2は1502)として転記させることは可能でしょうか? Book1 Sheet2に転記することは出来ますが、BookからBookは私の力量ではむずかしいです、Book2 Shee1はデータ蓄積、sheet2は納品、sheet3は請求と活用して行きたいと思います、どうぞ宜しくお願いいたします。

専門家に質問してみよう