アプリ版:「スタンプのみでお礼する」機能のリリースについて

1つのエクセルファイルに 開いている1つbookの名称・数値を 自動で書き込みは、できるのですが、
 複数のbookを自動で 書き込む VBAの作成方法を教えてください。

 具体的には、USBメモリー内に 数値を入れたいxlsファイルがあります。”G”¥編集¥Sheet2)  1~100までのbookが開いています。(マクロが 組まれていて勝手に、bookが 開きます。)
(何個かのbookは欠けています。)

 ”book1” ”シート1”の(B2=男)→"編集" ”シート2”の(C10)
 "book1"の(E10:O10)→"編集"の(E10:O10)(数値)に書き込み。
 ”編集”(A10)にbook1と入力。 
 繰り返して
 ”book2” (B2)→”編集” (C12)(1行開けたい)
 ”book2" (E10:O10)→(E12:O12),(A12)にbook2と入力。
      
 普通のbookには、(B2=男)、(E10:O10)に 数値が 同じ範囲に入っています。
 たまに違うbookに、(B2=女)、(E9:O9)に 数値が 入っています。
 
 まず、連続でBook1~100までの一行開けて繰り返し書き込む方法が わかりません。
 まだまだ、VBA 勉強中ですが いろんな本やネットで 調べましたが、うまくいきません。
 何卒よろしくお願いします。

質問者からの補足コメント

  • 判りずらくてすいません。
    ① 今開いているブックの名前の一覧表を作りたい。
    →そうです。
    ② 開いているブックのB2セルの値によって何かをしたい。← 特にこの何かが良く判りません
    →B2セルの値によって 一覧表に 入れたい bookの値のセルの場所が 変わっています。

    No.1の回答に寄せられた補足コメントです。 補足日時:2017/03/03 19:44
  • A列にブック名
    そのブックの B2セルが「男」ならば B ~ L列に E10:O10 のデータを書き込む
    B2セルが「女」ならば B ~ L列に E9:O9 のデータを書き込む
    これを開いているブック総てについて行う。
    答え.(そうです)


    「連続でBook1~100までの一行開けて繰り返し書き込む方法」な記述も有るので1行おきに作るのでしょうか?
    答え.そうです。空いた行に 後で コメントなど文を 書き込むことがあります。


    「”シート1”」や「”シート2”」という言葉も出てきますが、この辺も良く判りません
     答え.すいません判りずらかったですね、自分で作った一覧表のSheet1には 違う一覧表が
     あるため、Sheet2(シート2)と書いてしまいました。

    No.2の回答に寄せられた補足コメントです。 補足日時:2017/03/03 20:43
  • つらい・・・

    「→”編集”」はセルの値を「編集」に変えるという事ですか?
    答え.本当に判りづらくてすいません。
     Workbooks(book1).Worksheets("Sheet1").Cell(E10:O10)=
     Workbooks(編集).WorkSheets("Sheet2").Cell(E10:O10)



    ところで100個近くのファイルが開いているだけで非常に邪魔だし、やたら重くなりそうですが問題ないのでしょうか?
     答え.この100個近くのファイルが、得意先からメールで送くられてくるデータで 開くと
      ホルダー内のデータがすべて開く様になっていていつも大変な思いをしています。
      ですので1つ1つ入力して 1つ1つ閉じています。これが、とても大変なのです。
      データ改ざんも禁止です。

      補足日時:2017/03/03 20:45
  • そうですね。いちいち閉じるのが、大変です。

    No.4の回答に寄せられた補足コメントです。 補足日時:2017/03/03 22:17
  • そうです、1枚目のシートです。
    今 補足を入れようと思ったのですが、すいません。数値が 入らないな?と思い投稿しようと思いmした。しかし、GooUserラックさん ここまでしていただきありがとうございます。
    明日でも 全然大丈夫ですよ。無理しないでください。

    No.6の回答に寄せられた補足コメントです。 補足日時:2017/03/03 22:53
  • 全然問題ないです。GooUserさんのVBAを研究・検討し もっとより良いものを
    完成させたいと思います。ありがとう、ございます。NO。9も拝見しました。

    No.8の回答に寄せられた補足コメントです。 補足日時:2017/03/03 23:15

A 回答 (9件)

読解力が足らないのか?いっている事がゴチャゴチャしていて判りません。


「複数のbookを自動で書き込む」とは次のようなことですか?
① 今開いているブックの名前の一覧表を作りたい。
② 開いているブックのB2セルの値によって何かをしたい。← 特にこの何かが良く判りません
この回答への補足あり
    • good
    • 1

たとえばこんなことでしょうか?


A列にブック名
そのブックの B2セルが「男」ならば B ~ L列に E10:O10 のデータを書き込む
B2セルが「女」ならば B ~ L列に E9:O9 のデータを書き込む
これを開いているブック総てについて行う。

「連続でBook1~100までの一行開けて繰り返し書き込む方法」な記述も有るので1行おきに作るのでしょうか?
「”シート1”」や「”シート2”」という言葉も出てきますが、この辺も良く判りません
「→”編集”」はセルの値を「編集」に変えるという事ですか?

ところで100個近くのファイルが開いているだけで非常に邪魔だし、やたら重くなりそうですが問題ないのでしょうか?
一般的には、あるフォルダーにあるブックを1つ開いては処理し一度閉じて次を…になると思うのですが?
この回答への補足あり
    • good
    • 0

とりあえず判っている開いているブックの一覧表の作り方だけ


---------------------------------------------------------------------------
Sub 一覧表作成()
Dim 行 As Long
Columns("A:A").ClearContents
For 行 = 1 To Workbooks.Count
Cells(行, 1).Value = Workbooks(行).Name
Next
End Sub
---------------------------------------------------------------------------
※ A列に開いているブックの一覧を作成します。(このままだと自分の名前も載ってしまいますけどね)
    • good
    • 0

開いているファイルは処理したら閉じたほうが良いですよね?

この回答への補足あり
    • good
    • 0

こんなのはいかがでしょうか?


-------------------------------------------------------------------------
Sub 一覧表作成()
Dim 行 As Long
Dim 号 As Long
行 = 1
Columns("A:L").Delete
For 号 = 1 To Workbooks.Count
If ThisWorkbook.Name <> Workbooks(号).Name Then
Cells(行, 1).Value = Workbooks(号).Name
Workbooks(号).Sheets(1).Range("E1:O1").Copy _
ActiveSheet.Range(Cells(行, 2), Cells(行, 12))
行 = 行 + 2
End If
Next
行 = 1
Do While Cells(行, 1).Value <> ""
Windows(Cells(行, 1).Value).Close
行 = 行 + 2
Loop
MsgBox ("終了しました")
End Sub
-------------------------------------------------------------------------
※ ブック名などを書き込むシートをアクティブにしてから実行して下さい。
※ 大きなお世話かもしれませんが処理後のファイルは閉じています。不要ならば下図の黄色い部分を削除して下さい。
※ 閉じるときに確認のメッセージが出るようでしたら連絡下さい。
「1つのエクセルファイルに開いている複数の」の回答画像5
    • good
    • 1
この回答へのお礼

ありがとうございます。早速 試してみます。

お礼日時:2017/03/03 22:19

すみません「男」「女」の処理を忘れてました。

少々お待ち下さい。

念の為の確認です。コピー元のUSBに入っているブックのデータは1枚目のシートにあるんですよね?
この回答への補足あり
    • good
    • 0

大変申し訳ございませんでした。

テスト環境だったので行も間違っていました。本当に申し訳ございませんでした。
-------------------------------------------------------------------------
Sub 一覧表作成()
Dim 行 As Long
Dim 号 As Long
行 = 1
Columns("A:L").Delete
For 号 = 1 To Workbooks.Count
If ThisWorkbook.Name <> Workbooks(号).Name Then
Cells(行, 1).Value = Workbooks(号).Name
If Workbooks(号).Sheets(1).Range("B2").Value = "男" Then
Workbooks(号).Sheets(1).Range("E10:O10").Copy _
ActiveSheet.Range(Cells(行, 2), Cells(行, 12))
Else
Workbooks(号).Sheets(1).Range("E9:O9").Copy _
ActiveSheet.Range(Cells(行, 2), Cells(行, 12))
End If
行 = 行 + 2
End If
Next
行 = 1
Do While Cells(行, 1).Value <> ""
Windows(Cells(行, 1).Value).Close
行 = 行 + 2
Loop
MsgBox ("終了しました")
End Sub
-------------------------------------------------------------------------
    • good
    • 0

No.7 の補足です。



2個の同じようなループ1つにまとめないの?と疑問があるかもしれませんが、開いているブック名はエクセルが管理しているブックの通し番号を使って調べているのですが、1つでもブックを削除したとたんに振り直されたら変なことになりそうだったので、全てをシートに書き込んでからブック名で削除しています。
この回答への補足あり
    • good
    • 0

No.8 の修正です。

たびたびすみません。

「ブックを削除したとたんに」は「ブックを閉じたとたんに」の間違いです。
「ブック名で削除しています。」は「ブック名で閉じています。」の間違いです。
本当に申し訳ございません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!