• ベストアンサー

【エクセル】新規シートを作成しながら代入

エクセルで複数の見積書を一気に作りたいです。 見積書のフォーマットは同じで、 「社名」の部分と「金額」の部分のみを差し替えたものを、 たくさん作成したいです。 Sheet1に、 社名1 50000 社名2 20000 社名3 68000 … のように、作成したい見積書の社名と金額のリストをおくと、 1)Sheet1リストの社名の数だけ見積書シートを作成し、 2)任意の場所に社名と金額を代入して、 リストの項目の数だけ見積書を作成するような関数やマクロは書けないでしょうか。 つまり、 Sheet1!A1 -> Sheet2!C1, Sheet1!B1 -> Sheet2!C2 Sheet1!A2 -> Sheet3!C1, Sheet1!B2 -> Sheet3!C2 Sheet2!A3 -> Sheet4!C1, Sheet1!B3 -> Sheet4!C2 といった具合で引用したいです。 Sheet1のリスト項目数は不定です。 (当方VBAの知識ありません。) どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • web2525
  • ベストアンサー率42% (1219/2850)
回答No.2

Sub Macro1() 社名 = Sheets(1).Range("A1") 金額 = Sheets(1).Range("B1") no = Sheets.Count i = 0 Do Until 社名 = "" i = i + 1 Sheets(2).Copy after:=Sheets(no) no = no + 1 Sheets(no).Name = "見積書(" & 社名 & ")" Range("C2").Value = 社名 Range("C3").Value = 金額 社名 = Sheets(1).Range("A1").Offset(i, 0) 金額 = Sheets(1).Range("B1").Offset(i, 0) Loop End Sub Sheet1に会社名・金額の一覧、Sheet2に見積書原本ある状態で。 >当方VBAの知識ありません。 VBAは環境(Sheetのフォーマット等)により細かな修正が必要になります。 VBAの知識がまったく無い状態だと回答が得られたとしてもその修正が出来ないため、希望通りの動作となる可能性は少ないのです。

chips0105
質問者

お礼

皆様の分を参考に試行錯誤の結果、思い通りのものがかけました。 これを機にVBAを勉強しようと思いました。 ありがとうございました!!

その他の回答 (4)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

お初です まずは、禁止事項の丸投げの項目をお読みください >マクロは書けないでしょうか。 >(当方VBAの知識ありません。) ここでコードを提示しても、使いこなせるか疑問です 上記の理由から関数にします 見積書のフォーマットの一番上に1行挿入する 印刷範囲をA2からに変更しておく 見積書のフォーマットのC1へ =VLOOKUP(A1,Sheet1!A1:B20,1,FALSE ) 見積書のフォーマットのC2へ =VLOOKUP(A1,Sheet1!A1:B20,2,FALSE ) と、しておいて 見積書のフォーマットのA1に会社名を入力 見積書のフォーマットのそれぞれに社名と金額が入ります 見積書のフォーマットのA1に入力規則のリストを設定すれば 社名をリストから選択するだけ メリットは質問の方法だと、シートタブから社名がわからない シートが増えると、タブが隠れて探すのがさらに困難 社名のリストに名前を定義設定すれば、社名の増減があっつた場合に 定義設定を変更すれば、数式の範囲やリストの設定を変更をしなくてよくなるので さらに使いやすくなると思います 以上 参考までに

chips0105
質問者

お礼

皆様の分を参考に試行錯誤の結果、思い通りのものがかけました。 これを機にVBAを勉強しようと思いました。 ありがとうございました!!

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.4

ちなみに標準のままだとSheet3があるのでSheet3の削除を若しくはシート名を変更して置かないとエラーになりますよ

chips0105
質問者

お礼

皆様の分を参考に試行錯誤の結果、思い通りのものがかけました。 これを機にVBAを勉強しようと思いました。 ありがとうございました!!

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.3

A1形式が分かりやすいならCellsではなくてRangeを使うほうが分かりやすかったかな Sub Macro1() Dim Row As Long '行繰り返し用 Row = 1 '1行目から繰り返すため初期設定 While Sheets("Sheet2").Range("A" + CStr(Row)) <> "" 'Sheet2の該当行、1セル目が空欄でないなら繰り返す Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) 'Sheet1を最終位置に複写して新たなシートを追加 ActiveSheet.Name = "Sheet" + CStr(Sheets.Count) '追加したシートの名前を変更 ActiveSheet.Range("A" + CStr(Row)).Formula = "=Sheet2!A" + CStr(Row) '追加したシートのA列 文字列に変換したRow行に計算式をセット Row = Row + 1 Wend 'ここまでを繰り返す End Sub

chips0105
質問者

お礼

皆様の分を参考に試行錯誤の結果、思い通りのものがかけました。 これを機にVBAを勉強しようと思いました。 ありがとうございました!!

  • noah7150
  • ベストアンサー率46% (116/251)
回答No.1

基本的に丸投げは禁止なのですが Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2009/1/6 ユーザー名 : ' Dim Row As Long '行繰り返し用 Row = 1 '1行目から繰り返すため初期設定 While Sheets("Sheet2").Cells(Row, 1) <> "" 'Sheet2の該当行、1セル目が空欄でないなら繰り返す Sheets("Sheet1").Copy After:=Sheets(Sheets.Count) 'Sheet1を最終位置に複写して新たなシートを追加 ActiveSheet.Name = "Sheet" + CStr(Sheets.Count) '追加したシートの名前を変更 ActiveSheet.Cells(1, 1).Formula = "=Sheet2!A" + CStr(Row) '追加したシートの1行目、1列目に計算式をセット Row = Row + 1 Wend 'ここまでを繰り返す End Sub 以上 Sheet1が見積もり雛形、Sheet2が社名一覧として書いてあります 複数の計算式があるなら ActiveSheet.Cells(1, 1).Formula = "=Sheet2!A" + CStr(Row) '追加したシートの1行目、1列目に計算式をセット をCells(1, 1)をCells(1, 3)、"=Sheet2!C"などに変えて追加してね 尚、Cells(行,欄)ですC2だとCells(2,3)と前後が逆になります。

chips0105
質問者

お礼

皆様の分を参考に試行錯誤の結果、思い通りのものがかけました。 これを機にVBAを勉強しようと思いました。 ありがとうございました!!

関連するQ&A

  • エクセル2000で見積書を作成したいです

    エクセル2000で見積書(予算書)を作成したいです。 エクセル素人ですが水道配管部材の見積書(予算書)作成をしようと思ってます。 部材番号記入での見積書(予算書)にしたいのですが、 シート1を印刷用シート、それぞれの部材リスト用の各シート名を作成(エルボ、チーズ、ソケット、 バルソケなどなど)とします。 1,印刷用(見積書又は予算書)シートA列に部材番号、B列に部材メーカー名、C列に型番(形式)、D列に数量入力、E列に単位、F列に部材見積単価、G列に見積金額(数量×部材見積単価)、 H列に実行単価(仕入れ単価)、 I列に実行金額(数量×仕入れ単価)、J列に利益金額(G列見積金額-I列実行単価)、K列に利益率(この場合、利益金額÷実行単価になるでしょうか?)とします。 2,部材リスト各シートのA列に部材番号、B列に部材メーカー名、C列に型番(形式)、E列に単位、F列に部材単価、、H列に実行単価(仕入れ単価)とします。 例えばシート名がエルボで部材番号はL001~L100・・・・、シート名がチーズで部材番号がT001~T100・・・・。 3,印刷用(見積書又は予算書)シート20行目まで必要項目(見積先、社名、日付など)とします。 4,21行目以降のA列に必要な部材番号を記入(各部材リストシートから部材番号をコピー などして)すると、それに該当する列項目が記入され、それぞれ金額などが出るようにしたいです。 現在、部材リストシートを作成しながら(始めたばかりですが)、その箇所をコピーして見積書(予算書)を作成しています。 関数の=VLOOKUP(検索値,範囲,列位置,検索の型)とかでなるものでしょうか?(意味は分かりませんが・・・) ご教授のほどよろしくお願いいたします。

  • エクセル 範囲の代入

    あるセルに入力された「範囲(C10:C13など)」を 別のセルの関数式に用いることができませんか? 具体的には、 A列:項目番号 B列:区分 ※A列の項目番号が入った行のB列には、項目名が入り、C以降は空白。 C列:種別 D列:名称 E列:詳細 ※B列の区分が入った行は、A列は空白・C~E列に各入力があります。 といった表が25シートあります。 項目毎にいくつの区分をもっているか・各種別がいくつづつかを カウント式で表記を 手作業になってしまいましたが、 ひとまず 25シート全ての A列に項番の入った行のF列に 項目毎の区分数を COUNTAを使って表示させてみました。 そこから範囲を抜き出し B列の区分毎のカウントを、COUNTIFを用いて (例えば、項番1の「A」はいくつか・「B」はいくつか、項番2の「A」はいくつか・「B」はいくつか・・) を出したいのですが・・・うまくいきません。 →F列に代入した式から、範囲式部分(例えばC14:C36・・・)をG列に抜き出し、  それをCONUTIFに代入できないか? というものです。 もちろん、別の方法があれば上記のやり方に こだわりはありません! 知識不足につき お手数とは存じますが、ご教示いただけますと助かります。 よろしくお願い致します。

  • エクセルのリストを他シートで使いたい

    下記、悩んでいます。 どなたか、ご回答お願いします。 シート1で入力されたB列の中に弊社が入っており、 弊社直下順位が対象となるリストをシート2で選択項目としたいのです。 ・シート1 (入力シート、形式変更出来ません) A2~A30セル 「順位」 B2~B30セル 「社名」 B2セルは固定で、他社は不定ですし、順位は常に変動します。 例)弊社順位が2位で、3位が5社だった場合。 A2=2 B2=「弊社」 A4.A7.A14.A15.A28=3 A4=「A社」 A7=「B社」 A14=「C社」 A15=「D社」 A28=「E社」 この様に入力されている状態で3位のリストを作りたいのですが・・・ まったくもって分かりません。 ご教授、お願い致します。

  • エクセル 表の形態を効率よく変更したい

    以下の見積の表があります。   A   B   C   D 1 大項目 小項目 金額 シートNO' 2  あ    a   2000    1 3  あ    b   3000    2 4  い    a   1000    3 5  い    b   3000    4 6  い    c   2000    5 ・  ・    ・    ・   ・ ・  ・    ・    ・   ・ これを。   A  B   C   D 1  あ            2    a   2000   1 3    b   3000   2 4  い            5    a   1000   3 6    b   3000   4 7    c   2000   5 ・・・とした表を別に作成したいのです。 一つの大項目に対して、小項目は最大4つほどあります。 大項目については、40近くあります。 今後これを元に利用したいので。 項目の数、内容、金額は随時変わる予定です。 そして、前者の表は、各シートから其々データを参照してきています。 関数などを利用し、効率よく変更できないでしょうか。 よろしくお願いします。

  • 別のシートで自動的に並べ替えをしたい(エクセル)

    エクセル2003を使用しています。 質問があります。 A~C社で見積を取ったとします。 それをひとつのシートで集計します。 (例) 社名 A社 B社 C社 ・   (省略) ・ ・ 合計 12 32 25      ↓  ↓ これを別シートの表紙で自動的に昇順で並べ替えをして比較表を作りたい 社名 金額 差異 A社 12  0 B社 25  13 C社 32  20 予め別シートで社名の位置が固定されて、いちいち並べ替えれば問題ないのですが、元のシートで集計された結果を自動的に別のシートで並べ替えをする方法を教えてください。

  • エクセルで2つのシートの集計のしかた

    エクセルの関数等使いこなせないものでお知恵をお貸しください。 よろしくお願いいたします。 例えば「A」と「B」のシートがあります。この2つシートを1つにまとめた表を作りたいです。「A」「B」には名前と項目ごとに金額があります。「A」のシート、または「B」のシートのどちらかだけに名前・金額があるものもあれば「A」「B」の両方のシートに名前・金額があるものもあります。「A」「B」どちらにも名前・金額があるものは1行の各セルに「A」の項目の金額、「B」の項目の金額がとんでくるようにしたいです。「A」「B」どちらかにしかない場合は「A」の項目のセルに、「B」の項目のセルに金額がとんでくるように・・・といった表を作成出来ないものでしょうか? 説明不足で申し訳ありませんが教えてください。よろしくお願いいたします。

  • エクセルのシート1からシート2に引用すると重複表示

    当方、この7月からある団体の会計を任されて四苦八苦しています。 エクセルで1枚目のシートに「現金出納」、 2枚目以降のシートには1枚目の項目を引用して、 「科目ごとの集計」といった書類を作成しました。 2枚目以降の引用で、重複項目が表示されて原因が解らず 困っています。 使った手法は 1.「データの入力規制」でシート1の右側に項目を置き、 c行の「項目」欄の入力をプルダウンで選択出来るようにした。 2.シート2のH2「項目」を入力すると、シート1のC行の項目を参照し 当てはまるものを抽出し、シート2のA~E行に表示されるようにした。 使った関数はこちらです。 =IF(OR($H$2="",COUNTIF(現金出納!$B$2:$C$1000,$H$2)<ROW(A1)),"",INDEX(現金出納!A$2:A$1000,SMALL(IF(現金出納!$B$2:$C$1000=$H$2,ROW($A$1:$A$999)),ROW(A1)))) この状態で概ね上手く表示されるのですが、 中に二重表示されてしまうものが有ります。 シート1のD行「収入金額」にデータが有るものが 2枚目のシートに二重に表示されている感じなのですが、 中には二重表示されていないものも有るようです。 多分関数のどこかが間違っているのだと思うのですが、 関数の知識がほどんど無いので困っています。 原因がわかりましたら教えて頂けませんか。 よろしくお願いいたします。

  • エクセル2003でシートごとに見積作成した内容を1つのシートで一括管理したい。

    Excel2003でシートごとに作成している見積情報を1つのシートで管理したいと思っています。 具体的には、シート名にそれぞれ、見積(1)、見積(2)・・・と括弧の中に連番をふっています。それぞれの、見積情報(件名、品名、金額等)を1つのシートで一覧表にしたいのですが、シートを参照して、それを下の行にコピーで簡単に作りたいのですが、いちいち見積(1)の1の部分を手で直さないとエラーになってしまいます。試した方法は、A列に項番を1、2、3と下の行に行くにつれ、連番をふっておく。その連番をB列の件名列に参照として入れる。 ='見積 (1)'!$F$11 この1の部分を手打ちで1といれずに、=A1 とか入力すると、値の更新:見積(A1)というウィンドウが開いてしまいます。何か良い方法がありましたら、ご教示いただければ幸いです。

  • 分けて作成したシートを自動的に1枚のシートにまとめたい

     A    B    C    D  品名  数量   納期  価格 1 りんご  50  11/1  3,000 2 みかん  100  11/5  5,000 3 メロン  10  11/1  10,000 エクセルで上記の様なリストを発注リストとしてA店発注リスト・B店発注リスト…と店舗別でシートを分けて作成したリストを自動的に一枚のシートに(A店+B店+…の全ての発注内容)まとめることは出来ますか。 エクセルについてはあまり詳しくないのですが、何か方法があれば教えて下さい。 宜しくお願いします。

  • エクセルで見積書を作成したいのですが

    エクセルで見積書を作成したいのですが 商品名  個数(単位)  単価  金額 1     A      ア   10000 2     B      イ   10000 3     C      ウ   10000 4     D      エ   10000 のようにリストを作成して、 実際には 商品名  個数(単位)  単価  金額 2     B      イ   10000 1     A      ア   10000 3     C      ウ   10000 1     A      ア   10000 のように、リストの中から選択できるように したいのです。 ネットや本を見ながらやってみましたが、 初心者の為、上手くいきません。 詳しい方、教えてください。 宜しくお願いします。

専門家に質問してみよう