• ベストアンサー

EXCELで請求書を作りたいのですが

B1のセルに品番を入れたらA1に商品名、C1に単価、D1に小計が表示されるような請求明細とその明細をもとに納品日別で納品場所、使用期間、金額の入った請求一覧を1セット作り、それの単価に3%乗せた明細と一覧をもう1セット作りたいと思っています。 1つの商品名に対して品番は複数、1つの品番に対して単価は1つです。 自分はパソコン教室などに行ったことがなく、本もどれがいいのか判らないので+-*/、オートsumと関数、書式設定などはヘルプを参照して覚えました。会社の業種はリース業なのですが伝票類・在庫管理類、超アナログな会社です。 現在は全て1個1個入力してsheetとsheetをリンクさせて電卓叩いて・・・という作業をしているのですが、量が増えて締め切りに間に合わなくなってきてしまい質問させていただいた次第です。 よろしくお願い致します。

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

  • ベストアンサー
  • matsu_jun
  • ベストアンサー率55% (146/265)
回答No.5

まずは型式、品名、単価の一覧データベースを作りましょう。「データベース」という名前のシートを作り、A列に商品名、B列に品番、C列に単価をあらかじめ入力・作成しておきます。下のような感じですね。  ┃ A ┃ B ┃ C ┃ ━╋━━━╋━━━╋━━━╋ 1┃型 式│品 番│単 価│ ━╋───┼───┼───┼ 2┃AAA│  1│ 10│ ━╋───┼───┼───┼ 3┃BBB│  2│200│ ━╋───┼───┼───┼ 4┃CCC│  3│170│ ━╋───┼───┼───┼ 5┃DDD│  4│510│ ━╋───┼───┼───┼ 6┃   │   │   │ ━╋───┼───┼───┼ 7┃   │   │   │ ━╋───┼───┼───┼ 次に請求明細のシート(シート名はどのような名前でも結構です)のA1のセルに「型式」、B1のセルに「品番」、C1のセルに「単価」、D1のセルに「小計」、E1のセルに「個数」と入力しておきましょう。後からE列に個数を入力すれば自動的にD列に小計が表示されるようになります。 さて、それが済んだら、Altを押しながらF11キーを押してVisual Basicエディタを開きます。 左側の「プロジェクト」と書かれた枠に「Microsoft Excel Object」と書かれた部分があります。そこにシートの名前の一覧がありませんか?あったら、請求明細のシート名をダブルクリックします。すると画面右側が灰色から白色に変わりましたね。そこに以下をコピーしてください。 'ここから------------------------------------------------------------------------------------------ Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo ErrHand Application.ScreenUpdating = False Application.EnableEvents = False If Target.Column = 2 And Target.Row <> 1 Then If Target.Value = Empty Then Cells(Target.Row, 1).Value = Empty Cells(Target.Row, 3).Value = Empty Cells(Target.Row, 4).Value = Empty Cells(Target.Row, 5).Value = Empty Else With Worksheets("データベース").Range("B:B") Set x = .Find(Target.Value, LookAt:=xlWhole) If Not x Is Nothing Then Cells(Target.Row, 1).Value = Worksheets("データベース").Cells(x.Row, 1).Value Cells(Target.Row, 3).Value = Worksheets("データベース").Cells(x.Row, 3).Value Cells(Target.Row, 4).Value = "=C" & Target.Row & "*E" & Target.Row Else MsgBox ("対応する型式がありません") Cells(Target.Row, 2).Activate End If End With End If End If ErrHand: Application.EnableEvents = True Application.ScreenUpdating = True End Sub 'ここまで------------------------------------------------------------------------------------------ はい。これで処理は終了です。Visual Basic エディタを終了してください。 後は請求明細のシートのB列に品番を入力するたびにA列に商品名、C列に単価、D列に小計(C列の値×E列の値という数式)が入ります。後でE列に個数を入力すると小計が反映されます。 B列を削除すると、その行についてA列からE列まで全てのデータが削除されます。 ただし、「複数セルを選択して削除」には対応しておりませんので悪しからず。

toduki
質問者

お礼

すごく丁寧な回答ありがとうございます。マクロとVBAの差も判っていないような私ですが、とても判り易くて助かりました。 自動で出てくるって素晴らしいですね!久しぶりに感動しております。 教えていただいたコードを元にVBAの勉強をしようと思います。ありがとうございました!

その他の回答 (4)

  • kaiu
  • ベストアンサー率20% (65/315)
回答No.4

>アクセス、会社のパソコンに入ってないのです。 そうですか。 書類の作成にかかる人件費等を考えると 入れたほうがいいと思うのですが・・・。 計算式でも出来ると思いますが おそらく複雑になると思うのでVBAを使って+計算式が いいと思います。 ●サンプルコードを以下に書きます。 Sheet1のデータから品番(Like検索)のデータを 読み込んでSheet2に書き出すコードです。 ---------------------------------------- ※サンプルマクロ ParamOutputData ---------------------------------------- Option Explicit Sub ParamOutputData() Dim strKeyword As String Dim strJouken As String strKeyword = InputBox("品番を一部入力してください。") Do While strKeyword = "" strKeyword = InputBox("値が入力されていません。" & vbCrLf & _ "品番を一部入力してください。") Loop strJouken = "*" & strKeyword & "*" Application.ScreenUpdating = False Sheets("Sheet2").Activate Cells.Clear With Sheets("Sheet1") .Range("A1").AutoFilter Field:=3, _ Criteria1:=strJouken .Range("A1").CurrentRegion.Copy _ Destination:=Sheets("Sheet2").Range("A1") .Range("A1").AutoFilter End With Sheets("Sheet2").Columns("A:F").AutoFit Application.ScreenUpdating = True End Sub --------------------------------------------- (1)マクロを上記のマクロ名で登録して -----の間をモジュールを入力するフォームページに まるっとコピーしてください。 (2)Sheet1に下記のデータを入れてみてください --------------------------------------------- No. 商品名 品番 単価 1 ああああ AA 50 2 ああああ BB 100 3 いいいい CC 200 4 いいいい DD 300 5 いいいい EE 500 6 ううう FF 20 ---------------------------------------------- (3)結構短い記述でVBAも案外便利だったりします。 サンプルコードを元に色々いじってみてください。 まずデータベースを別に作ったほうが いいですね。 ご参考になれば。

toduki
質問者

お礼

アクセス、私の残業代1ヶ月分で余裕で買えるんですけど本当にそういう事に理解の無い会社なもので。 サンプルマクロありがとうございます。「自動で出てくるってすばらしい!」とオートSUMを初めて使った時以来の感動を覚えました。データベースもどきは作っているので、サンプルを元に色々やっています。 度々の回答、ありがとうございました。

回答No.3

SUMが使えるのなら次はVLOOKUPを覚えられると こんなケースではとても便利です。 ただし、A1に品番を入れ、B1に品名を返すような表の作りにしておく必要があります。 このVLOOKUPを使う前に、 品番、商品名、単価の3つの項目がある対応表を作っておく必要があります。 マイクロソフトUSERSからです。 http://www.microsoft.com/japan/users/office_expert/200304/02-1.asp 本を買われる前に少しでもお役に立つといいですね。 また、具体的な応用の方法は、 「どこそこのセルから表を作って、  どこに入力したらどこに商品名が出て。。」 という書き方をしてくだされば回答がつきやすいです。

toduki
質問者

お礼

maccheroniさん アドバイスありがとうございます。 教えていただいたページ、存在を知りませんでした。本を買う前にこのページで勉強します! 質問の仕方まで教えてくださってありがとうございます。上記のページでもう少し勉強してから、また判らない時に質問しようと思います。

  • kensaku
  • ベストアンサー率22% (2112/9525)
回答No.2

書店に行って、CD-ROMのついた参考図書をお買いになるといいと思います。おおよそ仕事で使う簡単な表の類は、CDに入っています。 安いのは500円くらいから、高くても2000円くらいで買えます。

toduki
質問者

お礼

kensakuさん アドバイスありがとうございます。 CD-ROMが付いた参考書があるのですね。この間書店をウロついた時には目に入っていませんでした。今度探しに行ってみます。2000円くらいなら経費で出してもらえそうですし。

  • kaiu
  • ベストアンサー率20% (65/315)
回答No.1

こんにちは。 内容からすると 品番をキーにしたデータベースを作成して アクセスで作った方が いいと思うのですが。

toduki
質問者

お礼

kaiuさん 回答ありがとうございます。 アクセス、会社のパソコンに入ってないのです。 私も使ったことがないので判らないですし。

関連するQ&A