みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel VBA コードを教えて下さい!

お世話になっています。
今回は、次の事を実現するコードを教えて頂きたいと思います。

<データ入力ブック>

A1=Book1 <----- 転記先のブック名(Excel文書名)
A2="AAA"

この<データ入力ブック>に入力されたデータを手掛かりにしてサブディレクトリにあるBook1のSheet2!A2に"AAA"を転記し保存。

※2004年頃を最後にAccessのVBAにも触れていません。Excelは、一度も操作したこともなく同VBAは初めてです。
※バージョンは、Excel2007。文書は、2003等との互換モード。

厚かましいお願いとは承知していますが、教えてもらえるととっても助かります。

非常に複雑な円の配置が自動化されたので私の仕事は明日で終わります。
月曜日からは、200文書へのデータ入力。
一々、200もある文書を検索して開いて当該のセルを探して入力していたのでは手間。
そこで、<データ入力ブック>に10項目程度の入力欄を設けて入力。
<データ入力ブック>でデータの入力・訂正も管理し、そして一括更新。
そういう仕組みを日曜日の夜の3、4時間で完成したいと思っています。
そういう事情ですので、教えてもらえるととっても助かります。

投稿日時 - 2011-03-04 20:25:02

QNo.6568218

困ってます

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

以下の方法では如何でしょか?
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の値を入れる
開いたブックを保存して
閉じる
と云った感じです。

投稿日時 - 2011-03-04 21:33:32

お礼

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

投稿日時 - 2011-03-08 22:26:11

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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のブックを扱うのは無理があるだろう。全体の処理の設計を(出来れば)やりなおすべきものと思う。

投稿日時 - 2011-03-04 23:19:19

お礼

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

投稿日時 - 2011-03-08 22:26:28

ANo.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

投稿日時 - 2011-03-04 21:49:11

お礼

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

投稿日時 - 2011-03-08 22:26:20

あなたにオススメの質問