• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Excel VBA コードを教えて下さい!)

Excel VBAコードで<データ入力ブック>に入力されたデータを別のブックに転記し保存する方法

このQ&Aのポイント
  • Excel VBAコードを使用して、<データ入力ブック>に入力されたデータを参照し、別のブックに転記して保存する方法を教えてください。
  • <データ入力ブック>に入力されたデータから、サブディレクトリにある別のブックの特定のセルにデータを転記して保存するVBAコードを教えてください。
  • Excel VBAコードを使って、<データ入力ブック>に入力されたデータを参照し、別のブックの特定のセルにデータを転記して保存する方法を教えてください。バージョンはExcel2007で、文書は2003との互換モードです。

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

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.1

以下の方法では如何でしょか? Sub Test1() Workbooks.Open Filename:=Thisworkbook.Path & Range("A1").Value & ".xls" Activeworkbook.Sheets("Sheet2").Range("A2").value = Thisworkbook.ActiveSheet.Range("A2").Value ActiveWorkbook.Save ActiveWorkbook.Close End Sub コードの意味は 同じフォルダーにある このファイルのこのシートのA1セルのファイル名のブックを開く 開いたブックのSheet2というシートのA2セルに このブックのこのシートのA2の値を入れる 開いたブックを保存して 閉じる と云った感じです。

noname#140971
質問者

お礼

お礼が遅くなりました。 データ入力部だけで500行程になりました。 そこで更新部のコードが今夜になりました。 更新部をテストするまでお礼を保留してました。 さて、テストではほぼ1秒で更新・保存できています。 これで、1週間の作業が3分で済みます。 皆様の回答のお陰です。 本当にありがとうございました。

その他の回答 (2)

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

この質問は、丸投げなので、ヒントだけ。 Sub test02() ActiveWorkbook.Sheets("Sheet2").Range("a2").Copy Workbooks("AAA.xls").Worksheets("Sheet1").Range("A20") End Sub たった1行でコア部分は実現できる。 ただしブックAAAは実行時には開いておく必要がある。 そしてコピーが終わったらブックAAAはClose。 上記の中で Sheet2 a2 AAA Sheet1 A20 の部分のうち、毎回のブックに対応し変わる部分は、現在のSheet2のセルに、(始める前に)文字列の値として、各行の各列のセルに入力して保持しておく。 その文字列を上記の1行の各部分に置き換えて(=代入して)、(くり返し)実行すればよい。 くり返し回数は上記ではSheet2のA列のデータ行数である。 Sheet2の全行くり返しは、dを最終行の行番号として、 For i=2 to d 処理 Next i でできる。 その各行の各列はCells(i,"A") や Cells(i,"B")・・のようにして取れる。 最終行は、Googleで「エクセルVBA 最終行」で照会すればわかる。 ブックを開くコードはGoogle照会せよ。 「エクセルVBA ブックを開く」 200もあるブックの開閉は時間がかかると思う。200のブックを扱うのは無理があるだろう。全体の処理の設計を(出来れば)やりなおすべきものと思う。

noname#140971
質問者

お礼

お礼が遅くなりました。 データ入力部だけで500行程になりました。 そこで更新部のコードが今夜になりました。 更新部をテストするまでお礼を保留してました。 さて、テストではほぼ1秒で更新・保存できています。 これで、1週間の作業が3分で済みます。 皆様の回答のお陰です。 本当にありがとうございました。

  • end-u
  • ベストアンサー率79% (496/625)
回答No.2

例えば 「サブフォルダ名」「ブック名」「シート名」「セルアドレス」「転記文字」 画像のような表に対象ブックの情報を記入して、 これらの情報を元にマクロ処理するという事でしょうか。 転記先のシート名やセルアドレスは事前にわかっているという事ですか? その場合、ブック名、シート名、セルアドレスを入力する手間などを考えると、 そんなに改善されないような気がしますし、 シートの状態など確認しながら入力しなくても良いものなんでしょうか。 いずれにしても、一度、1Bookの処理を[マクロの記録]してみてください。 記録された直値の部分を変数に置き換えて、 その変数にセルに入力した文字を代入する事になります。 それから不明点を質問されたほうが効率が良いと思います。 例として、タテ方向の入力表の場合のLoop処理のサンプル。 Sub try()   Dim ws As Worksheet   Dim mx As Long   Dim i As Long   Set ws = ActiveSheet   mx = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row   For i = 2 To mx     MsgBox ThisWorkbook.Path & ws.Cells(i, 1).Value & "\" & ws.Cells(i, 2).Value & ".xls"     MsgBox ws.Cells(i, 3).Value & "|" & ws.Cells(i, 4).Value & "|" & ws.Cells(i, 5).Value   Next   Set ws = Nothing End Sub

noname#140971
質問者

お礼

お礼が遅くなりました。 データ入力部だけで500行程になりました。 そこで更新部のコードが今夜になりました。 更新部をテストするまでお礼を保留してました。 さて、テストではほぼ1秒で更新・保存できています。 これで、1週間の作業が3分で済みます。 皆様の回答のお陰です。 本当にありがとうございました。

関連するQ&A