プロが教える店舗&オフィスのセキュリティ対策術

エクセルで作られた5人分の物件表(商品名、売値、原価、確度が入力されている)があります。この5つのbookを自動的にひとつのbook(5人分のデータが入ったbook)にまとめたいのですが、どうしたらよいかわかりません。
全体の物件表には既にデータがかなりの行数入っています。
1行目から50行目までは(1)さん、(2)さん、(3)さん、(4)さん、(5)さんの確度A(受注確実)の物件が、51行目から100行目まではそれぞれの人達の確度B (ほぼ受注確実)の物件、それ以降の行には確度C,D,Eの物件が入っています。
5人それぞれの物件表と、全体の物件表のフォーマットはまったく一緒です。
まだ、マクロはほんの少ししか使えません。
どうしたらよいのかまったくわからないので、どなたかいい方法がわかる方がいたら教えてください。お願いします。
この説明がわかりづらければ補足説明しますので、ご質問ください。

A 回答 (8件)

こんばんわ。

ごめんなさい。また記述ミスです。今度は、動作確認をしたので、きちんと動作すると思います。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myWb As Workbook
Dim myWbn As String
Dim myRow1 As Long
Dim myWsn As Worksheet
Dim myAdr As String
Dim myRow2 As Long

myRow1 = Target.Row
If Range("K" & myRow1).Value = "" Then Exit Sub

For Each myWb In Workbooks
If myWb.Name = "受注管理.xls" Then
myWbn = myWb.Name: Exit For
End If
Next myWb
If myWbn <> "受注管理.xls" Then
Workbooks.Open Filename:="C:\My Documents\受注管理.xls"
End If

Set myWsn = Workbooks("受注管理.xls").Worksheets(1)
myAdr = Range("B" & myRow1).End(xlToRight).Offset(0, -1).Address
MsgBox myAdr
myRow2 = myWsn.Cells(Rows.Count, 2).End(xlUp).Row
Range("B" & myRow1 & ":" & myAdr).Copy Destination:=myWsn.Range("B" & myRow2 + 1)

End Sub
    • good
    • 0
この回答へのお礼

この度は大変ありがとうございました&お手数おかけいたしました。
無事思い通りのファイルにすることができました。
1年でこんなにVBAを使いこなせるようになるなんてすごいですね。
私も早く一人前になれるよう精進したいと思います。
もしまた何かありましたらよろしくお願い致します。

お礼日時:2002/10/31 23:13

こんばんわ。

大変申し訳ございませんでした。マクロの記述ミスです。修正マクロを作りました。前回のように操作してみて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myWb As Workbook
Dim myWbn As String
Dim myRow1 As Long
Dim myWsn As Worksheet
Dim myAdr As String
Dim myRow2 As Long

myRow1 = Target.Row
If Range("K" & myRow1).Value = "" Then Exit Sub

For Each myWb In Workbooks
If myWb.Name = "受注管理.xls" Then
myWbn = myWb.Name: Exit For
End If
Next myWb
If myWbn <> "受注管理.xls" Then
Workbooks.Open Filename:="C:\My Documents\受注管理.xls"
End If

Set myWsn = Workbooks("受注管理.xls").Worksheets(1)
myAdr = Range("B" & myRow1).End(xlToRight).Offset(0, -1).Address
MsgBox myAdr
myRow2 = myWsn.Cells(Rows.Count, 1).End(xlUp).Row
Range("B" & myRow & ":" & myAdr).Copy Destination:=myWsn.Range("B" & myRow2 + 1)

End Sub

これで、うまく動作すると思います。
それから本のことですが、本屋さんではなくラオックス等コンピューターを扱っている店舗の書籍コーナーにあると思います。私も、本屋さんでは見たことがありません。私は、ラオックスで買いました。

貴方様もお体をご自愛下さい。

この回答への補足

何度もすみません。
早速修正プログラムをコピー&ペーストしてみました。
ところが、追加した行が前の行に上書きされてしまいました。
頼りっぱなしで申し訳ありませんが、ご教授ください、
お願いします。

補足日時:2002/10/30 21:36
    • good
    • 0

こんばんわ。

データの最終列のすぐ隣(J列までデータが入力されていればK列)に文字・記号等を入力した時に、受注管理ブックのシート1のB列より右にデータを反映するようにマクロを修正してみました。前回のように下記のコードを貼り付けて確認してみて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myWb As Workbook
Dim myWbn As String
Dim myRow1 As Long
Dim myWsn As Worksheet
Dim myAdr As String
Dim myRow2 As Long

myRow1 = Target.Row
If Range("K" & myRow1).Value = "" Then Exit Sub

For Each myWb In Workbooks
If myWb.Name = "受注管理.xls" Then
myWbn = myWb.Name: Exit For
End If
Next myWb
If myWbn <> "受注管理.xls" Then
Workbooks.Open Filename:="C:\My Documents\受注管理.xls"
End If

Set myWsn = Workbooks("受注管理.xls").Worksheets(1)
myAdr = Range("B" & myRow1).End(xlToRight).Offset(0, -1).Address
MsgBox myAdr
myRow2 = myWsn.Cells(Rows.Count, 1).End(xlUp).Row
Range("B2:" & myAdr).Copy Destination:=myWsn.Range("B" & myRow2 + 1)

End Sub

後ご質問にお答えいたします。
貴方様は、どうもモジュールがプログラムを実行させるとお考えになっておられるようですが、プログラムを実行させるのはコードです。コードを書くためのシートのことをモジュールと呼び、モジュールに書かれたコードの集まりがプログラムなのです。

Set myWsn = Workbooks("受注管理.xls").Worksheets(1)
setは、変数にオブジェクトを代入する時に使う命令語
このコードは、変数myWsnに受注管理というブックのワークシート1というオブジェクトを代入するという動作をさせるためのコードです。

myRow2 = myWsn.Cells(Rows.Count, 1).End(xlUp).Row
Rows.Countはシートの最終行を取得する時に使う。
このコードは、データが入力されている最終行の行番号をmyRow2に代入するという動作をさせるためのコードです。

詳しいことをお知りになりたい時は、次の本を読んでみて下さい。VBAのことが詳しくわかりやすく書かれています。わたしもこの本で勉強してここまでコードを約1年位で書けるようになりました。
簡単プログラミングエクセル2000VBA(基礎編・関数偏・応用編)
著者:大村あつし 出版社:技術評論者

また、解らないことがありましたら、ご遠慮なくお知らせ下さい。

この回答への補足

こんばんわ。 修正プログラムを作っていただきありがとうございました。
しかし!!残念ながら、追加したい行だけでなく、1行目からのすべての行が
追加されてしまいました・・・
何が原因なのでしょうか?
ところで、早速、ご推薦されたプログラミングエクセル2000VBA(基礎編・関数偏・応用編) を買おうと思い、本屋さんに行ってみたところ、地元の本屋さんには置いていませんでした。。。。。
明日は大きな本屋さんに行ってみます。
寒くなってきたので、風邪には気をつけてください。
それでは。

補足日時:2002/10/30 19:58
    • good
    • 0

こんばんわ。

修正マクロを作ってみました。前回のように操作してみて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myWb As Workbook
Dim myWbn As String
Dim myRow1 As Long
Dim myWsn As Worksheet
Dim myRow2 As Long

myRow1 = Target.Row
If Range("J" & myRow1).Value = "" Then Exit Sub

For Each myWb In Workbooks
If myWb.Name = "受注管理.xls" Then
myWbn = myWb.Name: Exit For
End If
Next myWb
If myWbn <> "受注管理.xls" Then
Workbooks.Open Filename:="受注管理.xls"
End If

Set myWsn = Workbooks("受注管理.xls").Worksheets(1)
myRow2 = myWsn.Cells(Rows.Count, 1).End(xlUp).Row
Rows(myRow1 & ":" & myRow1).Copy Destination:=myWsn.Rows(myRow2 + 1 & ":" & myRow2 + 1)

End Sub

この回答への補足

何度も何度も本当にありがとうございます。
ご迷惑かけついでに、あと一回だけご教授下さい。
A列には続き番号が入っているので、できれば、B行からのデータを、
受注管理のファイルに反映したいのですが、どうしたらよいのでしょうか?
そして、データを反映させるかさせないかを選択性にすることはできますか?
どんな方法でもよいのですが、例えば反映させたくない行の最初にチェックを入れると受注管理のファイルにデータを反映させないというように。
後、最後から4番目と5番目の行の
Set myWsn = Workbooks("受注管理.xls").Worksheets(1)
myRow2 = myWsn.Cells(Rows.Count, 1).End(xlUp).Row
がどのようなプログラムを実行するためのモジュールなのかわかりません。
周りにVBAがわかる人がいないので、一人で悶々と悩んでおります。
ずーずーしいお願いで申し訳ありません。もし、面倒くさくないようでしたらお教えください。
お願い致します。

補足日時:2002/10/29 21:32
    • good
    • 0

こんにちは。

早速サンプルマクロを組んでみました。もしかしたら、あなた様がイメージしているのと違う動作になってしまうかもしれませんが、次のように操作し、確認してみて下さい。もし動作が違う場合は、どこが違うのか具体的に詳しくお知らせ下さい。修正マクロを作ってみたいと思います。

1.新規ブックを開き、シート1のA10~J10に項目名を入力する。
2.ブック名を受注管理としてマイドキュメントに保存終了する。(ウインドウズがXPの時は、個人のマイドキュメントではなく、全体のマイドキュメントへ保存終了する。)
3.再度新規ブックを開き、ALT+F11キーを押してVBE画面を開く
4.画面左上のVBAProject徒書いてある下のSheet1をダブルクリックし、右側の白い部分へ下のコードをコピー・ペーストする。
5.次のように操作してみる。
 ・シート1のA10~J10に項目名を入力する。
 ・シート1のA11~J11にデータを入力する。

J11のデータを入力し終えた時点で、自動的にブック(受注管理)が開かれ、このブックの・シート1のA11~J11にデータが入力されています。

Private Sub Worksheet_Change(ByVal Target As Range)

Dim myWb As Workbook
Dim myWbn As String
Dim myRow1 As Long
Dim myWsn As Worksheet
Dim myRow2 As Long

For Each myWb In Workbooks
If myWb.Name = "受注管理.xls" Then
myWbn = myWb.Name: Exit For
End If
Next myWb
If myWbn <> "受注管理.xls" Then
Workbooks.Open Filename:="受注管理"
End If

myRow1 = Target.Row
If Target.Address = Range("J" & myRow1).Address Then
Set myWsn = Workbooks("受注管理.xls").Worksheets(1)
myRow2 = myWsn.Cells(Rows.Count, 1).End(xlUp).Row
Rows(myRow1 & ":" & myRow1).Copy Destination:=myWsn.Rows(myRow2 + 1 & ":" & myRow2 + 1)
End If

End Sub

お手数をおかけいたしますが、よろしくお願いいたします。
    • good
    • 0
この回答へのお礼

丁寧なご回答どうもありがとうございました。
大変、大変助かりました。
ほぼ理想通りのファイルが出来上がりました。
ただ、キーボードから入力するとデータは反映されるのですが、
コピー&ペーストでデータを入力すると、"物件表"の方のファイルにデータが
反映されません。まったく同じデータが多数あるので、コピー&ペーストで
データが入力できるとありがたいのですが・・・
もし、原因がわかるようでしたらお教え下さい。お願いします。

お礼日時:2002/10/28 20:43

こんばんわ。

早速の補足有難うございます。
まだよく全体像がつかめないので再度補足の要求をさせていただきます。
A10:客先名、B10:物件名、C10:担当、D10:確度、E10:物件番号、F10:売値、G10:原価、H10:荒利、I10:受注月、J10:売上げ月と項目名がなっているのはわかりました。では、1行目から9行目まではどの様になっているのでしょうか。

>この5つのbookを自動的にひとつのbook(5人分のデータが入ったbook)にま>とめたい。
ということなのですが、他のそれぞれのブックの項目名や表の構成はどのようになっているのでしょうか。

今ひとつあなた様のおやりになりたいことが頭に浮かんできません。
あなた様のおやりになりたいことをもう一度具体的に詳しくお知らせいただけないでしょうか。それが解らないとマクロを組むことができません。

お手数をおかけいたしますが、よろしくお願いいたします。

この回答への補足

1行目から9行目には下記のデータが入っています。(千円単位)グループ全体の売上げです。

受注額 受注マージン  売上額  売上マージン
--------------------------------------------------
A10000 1000    20000  200
--------------------------------------------------
B10000  1000    20000  200
---------------------------------------------------
C10000  1000    ・・・   ・・・
---------------------------------------------------
D20000  2000 ・・・
--------------------------------------------------
E 1500   150    ・・・
---------------------------------------------------
F 2000 200
-----------------------------------------------------
S 1000 100
------------------------------------------------------
A+B+C54500 5450
------------------------------------------------------
たとえば(1)さんが自分のブックの最終行に新しい物件(原価、確度など)を追加したら、全体の方のブックの最終行(300行目)に(1)さんのデータが自動的に入力されるようにしたいのです。
そして、(2)さんが新たに自分のブックにデータを入力したら全体のブックの方の(1)さんの物件の下(301行目)に(2)さんのデータが自動的に入力されるようにしたいのです。(300行目には既に(1)さんのデータが自動的に入っている)
つまり、全体のブックは、グループ全体でどれだけの物件数と売上げがあったのか、一目でわかるようにしたいのです。
個人が自分の物件表を更新したら、全体の物件表も、その更新を反映するようにしたいのですが、そんなことってできますか?
うまく伝えられなくてもどかしいのですが、もし、まだわからなければ聞いてください。お願いします。
上の表のスペースがうまく表示されなくてわかりづらいかもしれませんが、確度ごとの売上げです。

補足日時:2002/10/28 00:41
    • good
    • 0

一つのBOOKにまとめるということですが、シートは分かれていてもいいんでしょうか?


Excelでは複数のシートを1つのBookに納めて1ファイルに保存できます。
標準では3枚のシートで一つのBOOKが構成されていると思います。
では具体的な手順ですが、まず5人分のBOOKを開き、次にまとめたい新しいBOOKを作ってください。
その後、まず(1)さんのBOOKを選択し、画面の下にあるシートタブ(名前をつけてなければSheet1になってます)を右クリックし、表示されるメニューから「移動またはコピー」を選択します。
表示されるダイアログの一番下の「コピーを作成する」に必ずチェックを入れ、まとめたいBOOKを上のコンボボックスから選択します。
そのままOKをクリックするとまとめたいBOOKにシートがコピーされます。
これを残りのメンバーに対して繰り返せば、一つのBOOKにまとまります。
もし、1枚のシートにしたいということであれば、細かくコピー&ペーストするか、マクロを組む必要がありますね。
    • good
    • 0

初めまして。

私でよろしければコピー・ペーストするだけですぐにあなた様の思い通りに動作するサンプルマクロを組んでみたいと思います。
ご希望の節は、次のことをお知らせください。

 ・現在データが入力されているシートの項目名とセル番地
 ・移動するブックの項目名とセル番地

お手数をおかけいたしますが、よろしくお願いいたします。
    • good
    • 0
この回答へのお礼

わざわざ、ご丁寧なご回答ありがとうございます。
実は項目名はいっぱいあって、A10:客先名、B10:物件名、C10:担当、D10:確度、E10:物件番号、F10:売値、G10:原価、H10:荒利、I10:受注月、J10:売上げ月です。
移動するBOOKには同じセル番地に同じ項目名が入っています。
この回答で、質問に対する答えになっていますか?
わからなければ、お手数ですが、ご質問ください。

お礼日時:2002/10/27 23:43

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