- 締切済み
各「見積書」ファイルから、会社名・金額等を抽出して「一覧」ファイルに1行に貼付て、ナンバリングしたいです。
各「見積書」ファイルから、会社名・金額等を抽出して「一覧」ファイルに1行に貼付て、ナンバリングしたいです。 1.「見積書.xls」の見積シートから 現在は、B6:鈴木商店(会社名)、B8:岩手物件(件名)、F30:\20,000(金額)が記入してあります。 2. 1.で選択したセル内容を「一覧」ファイルの業者シートに貼り付ける。 3.貼り付ける際、下記のように1行にまとめる。 1001,鈴木商店,岩手物件,\20,000,日付(作成日) 1002,山田商店,神奈川物件,\80,000,日付(作成日) 4.上記の動作を各見積シートにボタンを設置してボタンを押すと動作し、先頭のナンバリングを自動にし入力し業者シートに貼り付ける。 それと同時に自動でナンバリングした番号を見積シートの「G1」セルに貼り付ける。 5.上記の一連の流れが終わると最後に自動保存する。 以上 上記のようなVBAを知りたいです。もしくはもっと良い案がございましたらお知恵を下さい。よろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- hallo-2007
- ベストアンサー率41% (888/2115)
N02です。 質問読み飛ばしていた部分がありました。 >「一覧」ファイルの業者シートに貼り付ける。 ですが、別途、一覧のファイルがあって、業者の数のシートがあるということでしょうか。 更に、見積書の数だけシートがあったりするとか? ブックの構成ですが、見積書入力用シート、データ一覧シートの2つにします。 必要であれば、入力済みデータの確認用のシートを作成します。 3枚のシートがあれば十分かと思います。 ファイルを分けたり、シートを分けたりする必要はありませんし、作業が複雑になるだけです。 シートの構成には沢山の失敗の経験から得るところが多いですが、 初心者の方の失敗の事例の多くが会社ごとにシートを分けたり月ごとにブックを分けたりするところから始まっています。 十分に検討してみてください。
- imogasi
- ベストアンサー率27% (4737/17070)
質問の意味の良くわからない質問だが推測して答えてみる。 「見積書.xls」の見積シートといっているのは、シート数は相当数あるのだろう。 すると見積書.xlsブックの全シートを捉えるVBAコードを知る必要があると思う。 これは関数などでは難しいと思う。 シート名を捉えるのは(シートが多くて、しつこくなったら中断はCTRL+PAUSE?BREAKキーを押す) 標準モジュールに Sub test01() Dim sh For Each sh In Worksheets MsgBox sh.Name Next End Sub をやってみて納得すること。 ーー このShで各シート(オブジェクトが捕まえられる)。 別ブックに出す、になっているが、初心者用に同一ブックの「一覧」シートにリストを出すことから勉強したら。 その場合、厳密には一覧シートは除く Sub test01() Dim sh For Each sh In Worksheets If sh.Name = "一覧" Then GoTo p01 MsgBox sh.Name p01: Next End Sub ーーー 後はMsgBox sh.Nameのところは本来の処理に置きかえる。 結局 Sub test01() Dim sh i = 1 '一覧での開始行 '--- For Each sh In Worksheets If sh.Name = "一覧" Then GoTo p01 '一覧は対象外 ' MsgBox sh.Name Worksheets("一覧").Cells(i, "A") = i '連番 Worksheets("一覧").Cells(i, "B") = sh.Cells(6, "B") '会社名 Worksheets("一覧").Cells(i, "C") = sh.Cells(8, "B") '件名 Worksheets("一覧").Cells(i, "D") = sh.Cells(30, "F") '金額 Worksheets("一覧").Cells(i, "E") = Date '実行日付 i = i + 1 p01: Next End Sub ーーー 結果 の一部 A-E列 B,C列の中身はでたらめだが。 ・・・・ 4 ab sd 33 2008/11/7 ・・・・ ーー 何回も質問してるらしいが、この際VBAを勉強したら。 コード10数行で終わりだ。 仕事にエクセルを使うにはVBAの習得は必須と思う。 別ブックに出す方法は質問者が今後勉強のこと。
- fujillin
- ベストアンサー率61% (1594/2576)
何かよくわかりませんが、要は目次というかブックの一覧を作るのが目的のように感じますが・・・ 同様のフォーマットのシートが複数あって、それの一部を抽出して一覧を作成するって言うふうに読み取ったのですが、違っていたら失礼。 どうせ作るなら、 > 1.で選択したセル内容を「一覧」ファイルの業者シートに貼り付ける 的な処理ではなくて、「ブックの一覧を作る」という処理にしておいたほうがいいのでは? 各シートがどのようなタイミングで増えていくのか(あるいは、ある日セットで揃うのか)不明ですが、仮に、逐次増えていくとしても、既に一覧に載っているものはコード番号があるので識別できそうだし。 (安全のため、他にも「記載済み」を確認できる識別子をもうけておいた方が良いと思いますが。) 『一覧シートがない場合は一覧シートを作成し、既にある場合はそれに追記する、みたいな形で、ブック内の全シートを見て一覧を作る』処理にしておけば良さそうに思いますが? それにしても、なんだか、『教えて!goo』というより『作って!goo』みたいな感じですね・・
- hallo-2007
- ベストアンサー率41% (888/2115)
前にも同じ質問拝見したと思います。 見積シート B3 =TODAY()←今日の日付 B5 =MAX(一覧シート!A:A)+1←ナンバリング B6 会社名 B8 件名 F30 金額 一覧シート A B C D F 見積番号 会社名 物件名 金額 作成日 1001 鈴木商店 岩手物件 \20,000 08/11/07 ・・・ と準備 見積シートにボタンを作成、VBエディター開いて Sub Macro1() GYOU = Worksheets("一覧シート").Range("A65536").End(xlUp).Row + 1 Worksheets("一覧シート").Cells(GYOU, 1).Value = Range("B5").Value Worksheets("一覧シート").Cells(GYOU, 2).Value = Range("B6").Value Worksheets("一覧シート").Cells(GYOU, 3).Value = Range("B8").Value Worksheets("一覧シート").Cells(GYOU, 4).Value = Range("F30").Value Worksheets("一覧シート").Cells(GYOU, 5).Value = Range("B3").Value End Sub で試してみてください。コードの意味は理解してください。
お礼
ありがとうございます。いろいろなご回答をいただきました。 VBAの勉強は必須ですね。
- n-jun
- ベストアンサー率33% (959/2873)
マクロの自動記録で出来る範囲の記録を取ってみる。 >2. 1.で選択したセル内容を「一覧」ファイルの業者シートに貼り付ける。 セルを選択したようには思えないのですが。 何をもって選択した事になるのでしょうか。
お礼
ありがとうございます。早速試してみます。今後はVBAの勉強をしていきます。