EXCELの使い方を教えてください。Sheet1に商品名、商品コード、商品単価の表を作り、Sheet2の受注商品表に商品名、もしくは商品コードから自動的に単価を入れる仕組みはできるのでしょうか?

また、以前の商品名、もしくは商品コードの単価から今回入力分の単価が自動的に入るような仕組みは簡単にできるものでしょうか?
できる限り簡単なやり方だとありがたいのですが。ちなみにちょっとマクロをいじれる程度のレベルでできればうれしいです。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:
  • 終了:2007/05/18 08:30:04
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答6件)

id:Nigitama No.1

回答回数311ベストアンサー獲得回数18

ポイント19pt

マクロは必要ありませんよ。

VLOOKUPという関数を使えば出来ます。

http://www.excel.studio-kazu.jp/lib/e1tw/e1tw.html

>また、以前の商品名、もしくは商品コードの単価から今回入力分の単価が自動的に入るような仕組みは簡単にできるものでしょうか?

これは特に設定しなくても出来ていると思うのですが?(ひょっとしたら私が質問の意図を取り違えているかも?)

id:Platini

特に設定~というあたりを具体的にお教えいただけますか?

私がわかっていないだけなのでしょうか

2007/05/11 09:03:46
id:rikuzai No.3

回答回数1366ベストアンサー獲得回数141

ポイント18pt

まずSheet1の商品表の情報をSheet2の入力情報に反映する件ですが、

商品名、商品コード、のどちらを入力するかを決め、

入力する項目をSheet1の表のA列に設定して一覧表を作成します。


ここでは商品コードを入力すると仮定します。

まず、Sheetに

A列=商品コード

B列=商品名

C列=商品単価

として表を作成します。

商品コード 商品名 商品単価
123465 はてな 3000

一覧表の作成が終わったら、A-C列を列選択して、

左上にある名前ボックスに「商品データ」と入力してエンターします。

これで一覧表に「名前」が設定されます。


次にSheet2のA列に商品コードを入力するとして、

B列=商品名

にそれぞれの情報を自動表示するために数式を入力します。

1行目を項目行として、

B2=IF(ISERROR(VLOOKUP($A2,商品データ,2,0)),"",(VLOOKUP($A2,商品データ,2,0)))

と入力します。

この数式のうち「2」はもとの一覧表の商品コードから数えて何列目を参照するかを指定しているので、

商品単価の場合は「3」に書き換えればいいだけです。

後は該当行までコピーしてください。



既存の商品データを入力に反映していきたいという件は、

一覧表を作らずに、ということでしょうか。

既存のデータから一覧表を作成する方法が色々ありますので、

一旦一覧表にまとめてしまえば、前述の方法で自動表示できますが、

それとはまた違ったことをお考えなのでしょうか。

コメント欄を開放それていればコメント欄にて補足いたします。


以上ご参考まで。

http://kokoro.kir.jp/excel/name.html

id:Nigitama No.4

回答回数311ベストアンサー獲得回数18

ポイント18pt

VLOOKUPについては解決していると思いますが、

>以前の商品名、もしくは商品コードの単価から今回入力分の単価が自動的に入るような仕組み

これなんですけど、

私の解釈では、例えばA2に"えんぴつ"と入力して、A3, A4・・・と入力を続けて、A7に来てまた"えんぴつ"を入力しようとした・・・・

このとき、"え"を入力するだけで、エクセル側が「過去に入力した"え"から始まる言葉」を探してきて、候補として現れる。

見た目的にちょっと違うんですけど、携帯電話でメール書いてるときの「過去に入力したやつがぱっと出てきてくれる」のと似た感じです。

あ・・・・

いまちょっと調べました。

調べたらやっぱり設定があるようです。ごめんなさい。

[ツール] メニューから > [オプション] を選択 > 表示された [オプション] ダイアログボックスの中の [編集] タブをクリック > 下のほうにある [オートコンプリートを使用する]

にチェックを入れる。

これでできると思いますが、どうでしょうか?

http://dreamy.boy.jp/kihon7.htm

id:hiko3karasu No.5

回答回数1058ベストアンサー獲得回数25

ポイント18pt

関数vlookup でできます。

例として簡単にさせてもらいます。

Sheet1

 商品名 A列

 商品コード B列

 商品単価 C列

 商品名のデータは行1から行100までの100個

Sheet2

 列Aに入力する商品名、列Bに商品コード、列Cに対応する単価

としますね。

まず、シート1のA,B,Cを選択、A列を優先して並べ替えします。

次にSheet2で

列Bの1行目に

=VLOOKUP(A1,Sheet1!$A$1:$C$100,2)

列Cの1行目に

=VLOOKUP(B1,Sheet1!$B$1:$C$100,2)

といれます。

これでSheet2のA1に商品名を入力すると商品コードと単価が現れます。

B1に商品コードを入れると単価が現れます


http://dummy ダミーです

id:tobeoscontinue No.6

回答回数220ベストアンサー獲得回数59

ポイント18pt

VBAで考えてみました。

>Sheet1に商品名、商品コード、商品単価の表を作り、Sheet2の受注商品表に商品名、もしくは商品コードから自動的に単価を入れる仕組みはできるのでしょうか?

Sheet2でSheet1のセルを参照するには

Cells(r2, c2) = Sheets("Sheet1").Cells(r1, c1)

で可能です。


一番の問題はSheet1にある商品をどう指定するかです。

商品名の一部を入力する方法が考えられますが漢字変換はさほどいい入力方法とは思えません。

商品コードによる入力も商品点数があまり多くない、商品の変動が多くないなどでないと実用ではないように思います。


以前にした方法は商品に読み(あるいは副キーのようなもの)を設定してその読みによってマッチする商品名をいくつか表示し、目視で該当するものを指定するというものでした。この方法の問題は商品に対してどのような読みが設定されているのかわかりにくいことですが、規定を設けることである程度は軽減できると思います。

Sheet1には商品コード、商品名、単価、読みの順に登録するとします。2行目より。

Function QuaryName(name As String)
  Dim last
  last = Cells.SpecialCells(xlCellTypeLastCell).Row
  For r = 2 To last
    If StrComp(name, Cells(r, 4)) <= 0 Then
      QuaryName = r
      Exit Function
    End If
  Next
  QuaryName = last
End Function

QuaryNameはnameに近いものをSheet1から探してその行を返します。

ここではシーケンシャルに検索していますがバイナリーサーチにした方がいいでしょう。いずれにしろSheet1は読みでソートしておく必要があります。


Sheet2では商品名、数量、単価の項目をB5の位置からを想定しています。Cellの内容が変更されたかをキャッチするいい方法が解らないのでSelectionChange()を使っています。そのためオプションの入力後にセルを移動するを右にしておく必要があります。

制御を簡略化しているため動作に支障があるかもしれません。

Dim Master_Current_Row As Integer

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
  If Target.Count = 1 And 4 < Target.Row And Target.Row < 11 Then
    If Target.Column = 3 Then
      Application.EnableEvents = False
      Dim name As String, s As String, r As Integer
      name = Cells(Target.Row, 2).Value
      s = Left(name, 1)
      If Cells(Target.Row, 2).Value = Cells(20, 2) Then
        Cells(Target.Row, 3).Select
      ElseIf "0" <= s And s <= "9" Then
        r = Master_Current_Row + Val(s)
        Cells(Target.Row, 2) = Sheets("Sheet1").Cells(r, 2)
        Cells(Target.Row, 4) = Sheets("Sheet1").Cells(r, 3)
      Else
        Master_Current_Row = Sheets("Sheet1").QuaryName(name)
        r = Master_Current_Row
        Cells(Target.Row, 2) = Sheets("Sheet1").Cells(r, 2)
        Cells(Target.Row, 4) = Sheets("Sheet1").Cells(r, 3)
        For i = 20 To 29
          Cells(i, 2) = Sheets("Sheet1").Cells(r, 2)
          r = r + 1
        Next
        Cells(Target.Row, 2).Select
      End If
      Application.EnableEvents = True
    ElseIf Target.Column = 4 Then
      Cells(Target.Row + 1, 2).Select
    End If
  End If
End Sub

操作としては商品名(B5)に読みを入れてEnterを押します。

するとTargetはC5になってSelectionChangeイベントが発生し、SelectionChange()が実行されます。

最初はSheets("Sheet1").QuaryName(name)が実行されB5に入力された文字列で検索して近い商品名の行を返します。

その行から10行を左下(b20)に商品名をコピーします。

最初のものがもっともヒットしやすいと思われるので商品名と単価をコピーします。(必要なら商品コードも)

しかし確定がどうかわからないのでSelect()で戻します。

商品リストを見て該当するものがあればその行を0から9で指定します。確定して数量の位置(C5)へ移動します。

該当のものが無ければ再度読みを入力します。


数量が入力されたら次の商品名(B6)へ移動します。

商品と読みを対応させていますが、Sheet3に商品コードと読みを対応させることで商品と読みとの対応を軽減できるかもしれません。

http://q.hatena.ne.jp/ ダミー

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません