こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

EXCEL データベースより別シートに抽出

Sheet1に商品の受注状況をリストにしています。
A列-オーダーNo、B列-顧客No、C列-顧客名、G列-商品Aの注文数、H列-商品Bの注文数、、、、J列-商品Dの注文数、というように。これをデータベースとして、次のような事をするにはどのようにすればよいでしょうか?

商品の入荷はバラバラです。入荷した時点で、その商品の出荷指示書を顧客毎に作り倉庫に渡します。

そこで、、、
Sheet2に出荷指示書を作ります。
A1にオーダーNoを入力するとB1に顧客名が表示されます(これは出来ます)。
たとえば今回は商品Bが入荷したとして、A7に商品Aのコードを入れると、この顧客の商品Aに対する注文数がB8に表示されるようにしたいのですが、それが出来ません。。欲を言えば、もしその顧客が商品Aを注文していなければ、B8に「0」または「×」が表示されると尚良いのですが。

よろしくお願い致します。

投稿日時 - 2005-08-18 19:23:35

QNo.1588573

困ってます

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

こんにちは~

質問に不明な点があります。

> A7に商品Aのコードを入れると、
> この顧客の商品Aに対する注文数がB8に表示されるようにしたい

「商品Aのコード」というのは、Sheet1のどれと対応しているのですか?

G列からJ列の 「商品**の注文数」というのが、商品コードになっていればカンタンにできると思います。

【 前提条件 】
・Sheet1の A列に同じオーダーNo.は存在しない。
・Sheet1の 1行目は見出しで、G1からJ1には商品コードが(商品コードだけが)入力されている。
・Sheet2の A1にオーダーNo.を入力。
・Sheet2の A7に商品コードを入力。

Sheet2の B8に

=IF($A$1="","",INDEX(Sheet1!G:J,MATCH($A$1,Sheet1!A:A,0),MATCH(A7,Sheet1!$G$1:$J$1,0)))

> もしその顧客が商品Aを注文していなければ、
> B8に「0」または「×」が表示されると尚良い

注文していなければ、Sheet1の注文数の列には何も入力されていないのなら、上の数式で 「0」 と表示されます。

投稿日時 - 2005-08-19 06:51:46

補足

ありがとうございました。
お蔭様でうまく出来ました。
が、ひとつ補足がございます。
出荷指示を出した後、データベースの該当箇所(注文数)のセルに色づけ又はフォントの色を変えると言う事は出来ますか?

いまは、出荷指示書は使い廻しの予定で、プリントアウトしたら次の入力という感じです。
出荷後、データベースを上記のようにしようとすれば、指示書を1件ごと保存する必要があるかと思いますが。。。

よろしくお願い致します。

投稿日時 - 2005-08-19 14:23:10

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

No.1です。

> 出荷指示を出した後、
> データベースの該当箇所(注文数)のセルに色づけ
> 又はフォントの色を変えると言う事は出来ますか?

一般機能ではムリです。
VBAなら可能ですが、それでもよろしいですか?

やり方はいろいろあると思いますが、たとえばこんな感じです。
<前提条件>
・「受注状況リスト」のシート名は Sheet1
・「出荷指示書」のシート名は Sheet2
・Sheet1は1行目が見出し、実際のデータは2行目から始まっていること

メニューの「ツール」-「マクロ」-「Visual Basic Editor」
または、ALT+F11キーで VBEを起動

メニュー「挿入」-「標準モジュール」
画面の右に表示されたコードウィンドウに↓をコピーして貼り付けてください。

'--------------------------------------------------------
Sub 出荷指示書印刷()
  Dim ret As Boolean
  Dim myRowValue As String, myColValue As String
  Dim myRowRange As Range, myColRange As Range

  With Worksheets("Sheet2")
    .Activate

    If Not IsNumeric(.Range("B8")) Then
      MsgBox "データが入力されているか確認してください。"
      Exit Sub

    Else
      myRowValue = .Range("A1").Value
      myColValue = .Range("A7").Value
    End If

  End With

  With Worksheets("Sheet1")
    Set myColRange = .Range("G1:J1").Find(myColValue)
    Set myRowRange = .Range("A:A").Find(myRowValue)

  End With

  If myColRange Is Nothing Or myRowRange Is Nothing Then
    MsgBox "データが見つかりません。入力データを確認してください。"

  Else
    ret = Application.Dialogs(xlDialogPrint).Show
    If ret = False Then
      MsgBox "印刷を中止します。"
    Else
      myColRange.Offset(myRowRange.Row - 1).Interior.ColorIndex = 24

    End If
  End If
  Set myColRange = Nothing
  Set myRowRange = Nothing

End Sub

'--------------------------------------------------------

右上の閉じるボタン(×)をクリックして、VBEを終了。
メニュー「ツール」-「マクロ」-「マクロ」
「出荷指示書印刷」を実行
または、
メニュー「表示」-「ツールバー」-「Visual Basic」
表示された "Visual Basic" ツールバーから「マクロの実行」ボタンをクリックして、「出荷指示書印刷」を実行

同じ画面で「編集」をクリックすれば、VBEが起動してコードの修正ができます。

塗りつぶす色を変更したい場合は、

myColRange.Offset(myRowRange.Row - 1).Interior.ColorIndex = 24

最後の24が色番号ですので、参考URLを見て、お好みの色番号に変更してください。
色見本の右にあるいちばん上の数字が色番号です。

シート上にコマンドボタンを配置し、それをクリックして上記のマクロを実行することもできますが、ここでは説明しきれませんので必要なら市販の参考書等をご覧ください。

参考URL:http://www.relief.jp/itnote/archives/000482.php

投稿日時 - 2005-08-20 18:42:07

補足

丁寧なご回答ありがとうございました。
が、やってみたのですが出来ません。。
元の表をカスタマイズしてしまったので、前提条件に戻してはみたのですが。
もう一度やってみますが、VBAの分かりやすく詳しい解説書でお勧めのものがあれば教えて下さい。

投稿日時 - 2005-08-24 10:48:56

あなたにオススメの質問