• ベストアンサー

エクセルのデーターを反映させるには?

先日も同じような質問をしたのですが、もう少し分かりやすく説明して質問させていただきます。 エクセルで日程表から請求書へデーターを反映させたいのですが・・・ 日付  ○○さん   △△さん  □□さん 10/1  A店 500  B店 500  C店 1000 10/2  C店 500  A店 500  A店 500 10/8  A店 200  C店 300  B店 1000 10/9  B店 300  A店 200  C店 500 とあります。この日程表から人ごと、場所ごとの請求書を作成します。 ので、上記の場合全部で9枚の請求書が必要です。例えば○○さんのA店への場合 10/1  500 10/8  200 合計  700円 という請求書です。これを日程表から反映させて作成したいのです。 どのような方法でできるのでしょうか?

  • k-koko
  • お礼率36% (111/303)

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

一応作ってみました。 VBEで標準モジュールに貼り付けて下さい。 表の形がイメージしにくいかもしれませんが イメージは、#1のイメージです。 基本的には、場所が違う場合も、「場所」の部分だけを変更すれば動くように作ったつもりです。 セルの書式は適宜設定して下さい。 わからないところがあれば聞いて下さい。 プルダウンリストの作り方や ボタンを作ってマクロを割り当てるのはわかりますか? Public Sub 請求書作成() Const 日付 = 0, 金額 = 1 Dim 日程表 As Range, 請求書 As Range Dim 担当者, 店名, 集計月 Dim 担当者列 Dim 日程表検査位置, 請求書転記位置 Dim 合計 Set 日程表 = Range("日程表!A2") '日程表シートのデータ(項目名を除いた)部分の左上のセル Set 請求書 = Range("請求書!C6") '請求書シートの項目名部分の左上のセル回りに1つ以上のセルの空きがあること '日程表が月ごとになっている場合は必要ない '月ごとに作成する場合は、月末の請求書の作成処理が終わったら、コピーしてシート名の日程表を10月などに変更する '年ごとになっている場合は、検査月をApplication.WorksheetFunction.month(請求書.Offset(日程表検査位置, 日付).Value)のようにして調べる 集計月 = Range("請求書!B1").Value 店名 = Range("請求書!D1").Value 'プルダウンリストで指定した内容のセルを読み込む 担当者 = Range("請求書!F1").Value 'プルダウンリストで指定した内容のセルを読み込む 担当者列 = Application.WorksheetFunction.Match(担当者, Range("日程表!B1:F1"), 0) '"日程表!B1:F1"は、担当者の名前の範囲 請求書.Activate 請求書.CurrentRegion.ClearContents '作業領域の消去 日程表検査位置 = 0: 請求書転記位置 = 0: 合計 = 0 請求書.Offset(請求書転記位置, 日付).Value = "日付": 請求書.Offset(請求書転記位置, 金額).Value = "金額" '項目名の作成 請求書転記位置 = 請求書転記位置 + 1 '項目名を書いたので1つ下げる Do While (日程表.Offset(日程表検査位置, 日付).Value <> "") '日程表の日付があるデータを検索する日付の並びに空白はないこと If 日程表.Offset(日程表検査位置, 担当者列).Value = 店名 And 日程表.Offset(日程表検査位置, 担当者列 + 1).Value <> 0 Then '日程表に金額が入っている時転記する 請求書.Offset(請求書転記位置, 日付).Value = 日程表.Offset(日程表検査位置, 日付).Value 請求書.Offset(請求書転記位置, 金額).Value = 日程表.Offset(日程表検査位置, 担当者列 + 1).Value 合計 = 合計 + 請求書.Offset(請求書転記位置, 金額).Value 請求書転記位置 = 請求書転記位置 + 1 '1つ書いたので1つ下げる End If 日程表検査位置 = 日程表検査位置 + 1 '検査する場所を1つ下げる Loop 請求書.Offset(請求書転記位置, 日付).Value = "合計": 請求書.Offset(請求書転記位置, 金額).Value = 合計 & "円" '合計の作成 End Sub

その他の回答 (3)

  • terakura
  • ベストアンサー率20% (4/20)
回答No.3

考える前にお伺いしたいのですが、事例がA店からC店となっていますが、店の名前というのはあらかじめ分かっていますか?増える可能性はありますか? それから、元のデータは日付順に並んでいるのですか? 処理の方法はVBAを使うとうまくできると思います。補足していただいたら、考えてみようと思います。

k-koko
質問者

補足

ご回答ありがとうございます。 店名はわかっていて20位はあり、これからも増える可能性はあります。 元のデーターは質問で書いた日程表なのですが、表自体は日付順に並んでいるというか・・・ 土曜 ・・・・・・ 日曜 ・・・・・・  平日 ・・・・・・  土曜 ・・・・・・ 日曜 ・・・・・・ 平日 ・・・・・・ 祝日 ・・・・・・ 土曜 ・・・・・・ というように土曜と日曜の間に平日の分を1行挟んでいます。 日程なので入力するのは日付順ではなく、スケジュールのわかった所からばらばらに入力していきます。 もちろんスケジュールがなければ空白のままもあります。 反映した請求書は日付順に並んでいなくても構いません。 日程表に入力してすぐに反映というのではなく、1か月分まとめて月末に反映させても構いません。 VBAで作成できるというのはわかりましたがなにせ初心者なので、勉強してやってみようとは思うのですがまず何をどうしてどのようにすればいいのかがさっぱりわからなくてお手上げ状態です(T_T) ご回答いただければとても嬉しいです。 なにとぞよろしくお願いいたします。

  • moon_piyo
  • ベストアンサー率60% (88/146)
回答No.2

こんにちは 昔,似たようなことをmatch関数とoffset関数を使って行いました match関数で "A店" の位置の検索を行うのですが,そのときに, 「直前の検索でみつけた "A店" の真下のセルから検索する」という作戦でいきます ○○さんの店名がB列に格納されて,見出しが1行目にあるとします データは50件を想定します まず検索開始行を決めます(初回0) その位置から検索を開始し,何番目に"A店"が出現するか,をMATCHで取得します 次の検索を行う位置は 検索開始行 = 前回の検索開始位置 + 前回のMATCH関数の戻り値,とします 1回目の検索 検索開始: 0 発見位置: match("A店", offset(B1,検索開始(0),0,50-検索開始,1)) .... 2 日付 : OFFSET(B1,検索開始{0}+発見位置{2},-1,1,1) {10/1} 金額 : OFFSET(B1,検索開始{0}+発見位置{2},1,1,1) {500} 2回目の検索 検索開始: 前回の検索開始{0}+ 前回の発見位置{2} .... 2 発見位置: match("A店", offset(B1,検索開始{2},0,50-検索開始(2),1)) .... 2 日付 : OFFSET(B1,検索開始{2}+発見位置{2},-1,1,1) {10/8} 金額 : OFFSET(B1,検索開始{2}+発見位置{2},1,1,1) {200} 3回目の検索 検索開始: 前回の検索開始{2} + 前回のOFFSET{2} .... 4 発見位置: match("A店", offset(B1,検索開始{4},0,50-検索開始{4},1)) ... #N/A ※ {}内の数は実際の値をあらわします また 合計行のところは OFFSETの第2パラメータが #N/Aかどうか,第2パラメータの一つ上の値が#N/Aかどうかをチェックすれば実現できると思います

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

やはり、マクロを使うのが一番思ったものができるとは思いますが、日程表に入力即反映とはいかない(マクロの実行という手順が必要) 参照と関数でやる場合、間を詰めるというのが難しいです。間がスカスカになってもいいなら、準備が結構面倒かもしれませんが、日程表が即反映できます。 フィルタオプションを使ってやる場合、 日程表の形式を、変更しないといけません。 データの抽出はできますが、合計は別に付け足す必要があります。 なんにしても、日程表、請求書と密接に関連した処理が必要なので、簡単には答えにくいです。 アイデアとしては、 請求書シートの上部に、 人名のプルダウンリスト,請求先のプルダウンリスト、実行ボタンなどを用意してボタンを押すと、 その下の作業領域がクリアされ マクロで該当する条件のデータを転記する。 マクロで印刷範囲を設定して、印刷。 てな感じですか。 条件を調べるとか転記するというのは、結構簡単なので、それほど難しくはありません。

k-koko
質問者

補足

ご回答ありがとうございます。 そうなんです、理想としては、 請求書の上部にそれぞれのプルダウンリストを用意して、それぞれ指定すると、それぞれの請求書が出てきてそこだけを印刷するって感じなんです! 日程表に入力して即反映しなくても構いません。1か月分まとめてでもいいんです。それと、請求書は間が空かず1行ずつ詰めたいのです。 なにかよい方法があればご回答のほどよろしくお願いいたします。

関連するQ&A

  • エクセルについて

    エクセルで、計算式が入った表を作成したいのですが、例えば シート(1)のAというセルとBというセルの合計を、シート(2)のCというセルに反映したい時は どうしたらいいのでしょうか?

  • アクセスでフォームのデータ(計算結果)がテーブルに反映されない

    アクセス初心者です、教えて下さい。 うまく説明できないのですが、エクセルで作成した売上表をアクセスで作り直そうと試みているのですが…。 簡単に説明すると、フィールドA,B,Cと3つあって、フォーム上でCはAとBの合計(C=[A]+[B])としました。フォーム上ではA,Bに値を入力するだけでCに結果が表示されるのですが、それがテーブルのCに反映されません。テーブルに計算結果を表示させるにはどうしたらいいのでしょうか?

  • Excelのデータを他のExcelに反映さえる

    Excel初級者で本を見てもわからないので教えてください。 毎日、出荷一覧表を作成していていて、(雛型に名前を付けて保存しています。) 表の一部を他のExcelの台帳に日付順に反映させられたらと考えているのですが、 そのようなことは可能でしょうか?  

  • エクセルで別ファイルにデータを反映させる方法

    エクセルで別ファイルにデータを反映させる方法を教えて下さい。 Book1 A4~縦に氏名 B2~横に日付 B3~横に曜日となっていて、出勤日に○をつけています。 Book2 横に日付及び曜日 縦に出勤日に○の入っている人の名前を1ヶ月の表として作成したいのですが その方法があれば教えて下さい。

  • EXCELでうまく反映させたい

    A列に名前、B列に数、C列に日付が入っています。 それが100行あります。 D列以降の1行目にに7/1から7/31まで日付が入っていて、A列からC列までをD列の2行目から100行目までに反映させて、表を作りたいと思っています。 A・B列・C列にそれぞれ名前や数、日付を入れるとD列以降の日付の下に必要な数量が入るように数式を作る方法はありますか? A・B・C列は専用端末からデータを持ってくるので、その度にD列以降を手で作るのは大変です。A・B・C列だけだと、見た目に見づらいので何日にいくつ(数)必要かを一目で見られるようにしたいのです。 何かいい方法を思いつく方いらっしゃいますか? よろしくお願いします。

  • エクセルでデータを反映させたい。

    エクセルで下記のことをしたいのですが、どのような方法が ありますか?   A B C D E (列) 1 1  a b c d 2 2  e f g h 3 3  i j k l (行) ・他シートにA1の「1」を入れると、B~E列のデータが反映する。 (A列の数字が個人を指すもので、それを選択すると付随するデータ(B~E)も反映するということなんですが・・・。 説明が下手で申し訳ないのですが、どなたか教えて下さい。

  • エクセルのシートの反映について質問します。

    たとえば、下のような(シート1)の表を元に、別のシート(シート2)(シート3)へ自動で、反映させることは可能でしょうか? また”=”を使わずに(シート1)の元データを、全く同じ表として、別のブックへ反映させ 元のデータを変える事によって、すべてのシート、指定されたブックが自動で変わるような、方法はあるのでしょうか。 こういった場合、良い知恵がありましたらよろしくお願い致します。 m(_ _)m (シート1)       A     B    C 1  コードNo  日付   名 2    1     10/1   aaaaaa 3    2     10/2  bbbbbb 4    1     10/3   cccccc 5    2     10/4   ddddddd (シート2)       A     B    C 1  コードNo  日付   名 2    1     10/1   aaaaaa 3    1     10/3   cccccc (シート3)       A     B    C 1  コードNo  日付   名 2    2     10/2  bbbbbb 3    2     10/4   ddddddd

  • エクセル 集計方法を教えてください

    エクセル2003について教えてください。 宜しくお願いします。  A B C 1 2 あ   2 0   あ 3 2 い い 4 1   あ 5 2 あ あ 上記のような表で、「B列にあ」と「C列にあ」と「B列C列共にあ」の場合のA列の合計値5を導きだすには どのようにしたら良いのでしょうか? 上記のようなあの合計・いの合計と20種類の合計値を 200行ぐらいから集計したいのですが宜しくお願いいたします。

  • エクセル 2つの文言以外を反映したい

    エクセル2003について質問です。 データリストの中に2つの文言が含まれるデータを拾って、それ以外はそのままセルに反映したいのです。 たとえば、Aの列にデータが入っていて =IF(COUNTIF(A1",*A*"),"A",A1)&IF(COUNTIF(A1,"*B*"),"B",A1) と、入れてみましたが、全部くっついて反映されます。 たとえば、Aの場合は A**A**,AA***など…はじめのAは数式のAが出るようでその後ろはデータリストの文言がそのままつながっているようです。 AとBは、AまたはBだけを抽出して、そのほかの文言はC****でも****Cでも*C*でもどんな組み合わせでもそのままデータを反映してほしいのです。 A,B,C,D…リストにはたくさんの名前があります。 なにとぞよろしくお願いします

  • EXCELのデータ集計

    EXCEL上でのデータ集計で困っています。 例えば、下記の様なデータがあります。 区1 区2 区3 枚数 件数  A  A  A  5 13  A  A  A  6 16  B  B  C  7 12  B  B  C  3  5  C  A  B  2  5 これを区1、区2、区3が同じだった場合に グルーピングして枚数、件数を合計するような データを作成したいのですが。 上記データが、 区1 区2 区3 枚数 件数  A  A  A 11 29  B  B  C 10 17  C  A  B  2  5 の様になって欲しい!! 誰かお知恵を貸して下さい。

専門家に質問してみよう