- ベストアンサー
excel VBAを使って、データを自動的に表示させたい!
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
No.1です。 本当は関数を使うのがいいんですが、せっかくマクロを作ってみたようなので流用してみると、こんな感じでどうでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) '商品名、数量が変わった時以外は終了 If Target.Column <> 1 Or Target.Column <> 2 Then Exit Sub End If '検索用の「商品名」「数量」を取得 RefName = Target.Value RefNum = Target.Offset(0, 1).Value '「元データ」シートの上から最後まで探索 For iRow = 2 To 65535 '「商品名」と「数量」が一致した場合 If Sheets("元データ").Cells(iRow,1).Value = RefName And Sheets("元データ").Cells(iRow,2).Value = RefNum Then '自動入力 Target.Offset(0, 2).Value = Sheets("元データ").Cells(iRow,3).Value Target.Offset(0, 3).Value = Sheets("元データ").Cells(iRow,4).Value Target.Offset(0, 4).Value = Sheets("元データ").Cells(iRow,5).Value End If Next End Sub
その他の回答 (5)
- imogasi
- ベストアンサー率27% (4737/17068)
エクセルVBA程度では多列(多段)式検索は難しい。キー(列)が少ない場合は、関係列を定桁式(注)に結合して、その結合列で検索すると出来る。(注)右の列データが左へつめてこないようにする ーーー 普通は第1列で抜き出したもの(行)を、ワークに取っておいて、そのワークのデータを対象に第2の検索をかける。これを最後の条件まで続ける。 ーー データベース(ACCESSをはじめ)ではSQL文では簡単に複数条件を指定出来る。 ーー エクセルでは苦肉の策として マクロの記録で、データーフィルターフィルタオプションの設定 の操作を行う。 例データA1:D2 条件セル コード1 コード2 コード3 a z ーーー データセル A3:D11 コード1 コード2 コード3 計数 a x aa 1 b z bb 2 c y cc 3 a z dd 4 b y ee 5 c x ff 6 b y ee 1 a z ss 2 ーー コード Sub Macro1() Range("A3:D11").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _ "A1:C2"), CopyToRange:=Range("F1:I11"), Unique:=False End Sub A3:D11の11ほか最下行やCopyToRange:=のセル範囲は適宜修正する。 ーー 結果 F1:I3 コード1 コード2 コード3 計数 a z dd 4 a z ss 2 ーーーー 条件を1つ2つ3つでテストしてください。 3つでも2つでもうまく行くことテスト済み。 ーー この方法に賛否、良い点・欠点はあろうが、エクセルの機能に沿った回答で、 こういう回答はVBのエキスパートでも、エクセルを知らないと思いつけないものだ。 そういう人は、該当データなどを配列に入れて選び出すようなことを考えるだろう。 ほかにMSクエリと言うのも有る。
- hallo-2007
- ベストアンサー率41% (888/2115)
No2です。補足がありましたね、以下参考にしてください Private Sub Worksheet_Change(ByVal Target As Range) For i = 2 To 100 If Sheets("元データ").Cells(i, 1).Value = Cells(Target.Row, 1).Value And Sheets("元データ").Cells(i, 2).Value = Cells(Target.Row, 2).Value Then Exit For Next Cells(Target.Row, 3).Value = Sheets("元データ").Cells(i, 3).Value Cells(Target.Row, 4).Value = Sheets("元データ").Cells(i, 4).Value Cells(Target.Row, 5).Value = Sheets("元データ").Cells(i, 5).Value Cells(Target.Row, 6).Value = Sheets("元データ").Cells(i, 6).Value End Sub 考えている間に既に回答がでていましたね。おまけです。
- death_note
- ベストアンサー率32% (61/189)
No.3の回答ですが、変なところがいくつかありましたねww 最初の判定と、検索文字列を作る所は適当に修正してください。
補足
最初の判定は修正できました。 しかし、検索文字列の部分が・・・ どんな風に修正すればいいですか??
- hallo-2007
- ベストアンサー率41% (888/2115)
商品データを商品名、数量で並び替えてあるか、ランダムなのかで処理が違ってきます。 データがランダムに並んでいるのであれば、データを最初から最後まで順に確認することになるので処理に時間がかかりますよね。 データの件数にもよりますが、こういった場合はデータを昇順に並び替えておいてください。 仮に関数案ですが 商品データ A B C D E 商品名 数量 産地 担当者 商品コード 商品あ 10 商品あ 20 商品い 10 ・・・ とあったとして、別シート A1セルに検索する商品名 を入力したとします。 A2セルに =MATCH(A1,商品データ!A:A,FALSE) A3セルに =MATCH(A1,商品データ!A:A,TRUE) と式を入れる表示したい商品名のある最初の行番号と最後の行番号がでます。 B1セルに 検索する 数量 を入れたとします。 =VLOOKUP(B1,INDEX(商品データ!B:B,A2):INDEX(商品データ!C:C,A3),2,FALSE) 産地が表示されるはずです。 マクロで行うにしても商品名で範囲を区切って 数量で今出来ているマクロを実行すればよいでしょう。
- death_note
- ベストアンサー率32% (61/189)
>商品名と数量を入力するだけで、商品データを参照して、産地・担当者・商品コードが自動で入力されるマクロを作成したいです。 この(商品名と数量)に対して(産地・担当者・商品コード)は1対1の関係でしょうか? 1対1ならマクロでなくてもVLOOKUPなどの関数で実現できます。 1対多となると、出力が複数行になるのでマクロしかないと思います。
補足
(商品名と数量)に対して(産地・担当者・商品コード)は1対1の関係です。できたところまで表示します。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 Then Target.Offset(0, 1).Value = WorksheetFunction.VLookup(Target.Value, Sheets("元データ").Range("A2:F100"), 2, False) Target.Offset(0, 2).Value = WorksheetFunction.VLookup(Target.Value, Sheets("元データ").Range("A2:F100"), 3, False) Target.Offset(0, 3).Value = WorksheetFunction.VLookup(Target.Value, Sheets("元データ").Range("A2:F100"), 4, False) Target.Offset(0, 4).Value = WorksheetFunction.VLookup(Target.Value, Sheets("元データ").Range("A2:F100"), 5, False) End If End Sub
関連するQ&A
- excel VBAを使って、データを自動的に表示させるには!?
excelのVBA・マクロの書き方について教えてください!! 商品データ(商品名、数量、産地、担当者、商品コード)を入力したシートがあります。 別のシートに、商品名を入力するだけで、商品データを参照して、数量・産地・担当者・商品コードが自動で入力されるマクロを作成したいです。 本を見ながらやっていたのですが、なかなか上手くいきません! (商品名を入力する)セルをあらかじめ指定し、そこに商品名を入力して表示させる方法はあったのですが・・・ セルを指定せずに、A列ならどこに商品名を入力しても、自動でデータが表示される方法はありますか??
- ベストアンサー
- オフィス系ソフト
- エクセルで最新データのみ表示させたい
Excel2003を使用しています。 毎日データを入力している表があるのですが、それを月末に最新データのみの一覧表にしたいのです。 A B C D E F G H 日付 店舗コード 店舗名 商品コード 商品名 数量 単価 金額 店舗名・商品名は別シートにコード一覧表があり、そこからVLOOKUPで表示させています。 日付・店舗ごとに小計行を入れています。 件数は3000近くあります。これを商品名ごとに最新のデータ行のみを表示した表にしたいのです。 フィルタオプションの重複データを無視するや集計などやってみましたがうまくいきません。 VBAは書くことは出来ませんが、簡単な修正は出来ると思います。 どういった方法がありますでしょうか? よろしくお願い致します。
- ベストアンサー
- オフィス系ソフト
- ExcelのVBAについて
ExcelのVBAについて VBA全くの初心者です。 以下のような処理を行いたいのですが、どなたかご教授をお願いします。 以下のように支店(1)~(3)のシートがあります。 1.入力シートに調べたい商品No・商品名・備考を入力する(複数行あり) 2.マクロを実行すると、商品Noを検索対象として支店(1)~(3)シートをチェックし、 一致しない行を不一致データシートに出力する もう一つ別のマクロで、 1.入力シートに調べたい商品No・商品名・備考を入力する(複数行あり) 2.マクロを実行すると、商品Noを検索対象として支店(1)~(3)シートをチェックし、、 一致する行を一致データシートに出力し、D列に対象データがあるシート名を表示する ※可能でしたら、E列に対象データがある行番号も表示する -------------------------------- シート名:支店(1) A B C 商品No 商品名 備考 011 商品A 備考A 009 商品B 備考B 015 商品C 備考C -------------------------------- シート名:支店(2) A B C 商品No 商品名 備考 008 商品A 備考A 023 商品B 備考B 004 商品C 備考C -------------------------------- シート名:支店(3) A B C 商品No 商品名 備考 007 商品A 備考A 033 商品B 備考B 018 商品C 備考C -------------------------------- シート名:入力シート A B C 商品No 商品名 備考 ※ここに複数行入力する -------------------------------- シート名:不一致データシート A B C 商品No 商品名 備考 ※ここに出力される -------------------------------- シート名:一致データシート A B C 商品No 商品名 備考 ※ここに出力される
- 締切済み
- Visual Basic
- EXCEL マクロ・VBA 自動で連番を振る
EXCELのマクロ・VBAについて質問です。 例えば、B列にデータを入力すると、入力した行まで自動的にA列に連番が入力されるようにしたいのですが、どういった方法があるでしょうか。 マクロやVBAについてはこれから勉強をしようと思っている素人ですので、コードとその解説をいただけると助かります。
- 締切済み
- その他(プログラミング・開発)
- エクセルです。2つの異なるデータを自動で一つにしたいのですが
お願いいたします。 エクセル初心者で、ただいま勉強中です。 一つめのシートにはいろいろなお店の名前が縦に入っています。 2つ目のシートには、そこで販売している商品名・価格・売価などのデータが入っています。 各お店では、すべてではありませんが、同じような商品を扱います。 また、お店や商品の種類は増え続けます。 現状 シート1、シート2をそれぞれVLOOKUP関数を使い、シート3にそのデータを移行し、それぞれのお店の売上げなどの計算をしています。 しかし、毎回、シート1のコード、シート2のコードをシート3に入れている為、非常に時間がかかっています。 そこで以下のようにできませんか? シート1のお店のデータとシート2の商品群のデータを自動で一つにまとめて、一つのコードを自動で作成してくれるような、そのようなことは可能でしょうか。 ほとんどの商品はほとんどのお店で扱います。 最初から、A列にお店、B列に商品、C列に価格、D列に売価などを入れた新しいシートを作ればよいのでしょうが、お店も増え、商品も増えていくと、非常に手間がかかります。 また、上記のようにシート3に2つのシートのデータを移行しなくてはいけません。その作業もコードを2ついれていくのは大変です。 例えば、 新しいお店ができ、さらに商品が追加になりました。 これを、私が手動でシート1にお店を追加 私が手動でシート2に商品名などを追加 ということをしただけで、新シート4に自動で、全部のお店に全商品が追加された、一つのコードを作成したいのです。 そうできれば、一つのコードをシート3にBLOOKUP関数を使い、簡単に移行できそうな気がしまして。 ぜひ、そのような自動でやってくれる関数などがありましたら、またはもっとよい方法がありましたら教えて下さい。 何卒、よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- EXCELでVLOOKUPでデータを検索、引継ぎをしたい
こんばんは。今、困ってます。Sheet1で、 店コード 商品コード 担当名 01 12345 たなか 01 12350 すずき 01 12355 たなか 02 12360 こんどう という元データが出来ていて、Sheet2で、 店コード 商品コード 担当名 01 12345 01 12348 01 12350 という別ファイルがあり、同じ商品コードの場合は、 Sheet1の元データから、担当名をひっぱりたいと思います。 そこで、担当名の欄に =IF((VLOOKUP(B1,Sheet1!B:M,2))="","",(VLOOKUP(B1,Sheet1!B:M,2))) と入力したんですが、 商品コードが 12346 でも 担当名に たなか と 出てしまったりするので、困ってます。 商品コードが一致しているときだけ、担当名を表示させるには、どうしたらよいのでしょうか? よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルVBA(?)を使って
エクセルで特定の商品コードをセルに入力すると その商品コードに対する商品名称(日本語)を 表示させたいのですが、具体的にどのような コーディングにすればいいのでしょうか?? 入力シートから 商品コード・商品名称が入力してある シートを参照させて商品名称を取得したいのです。 可能ならば 該当する商品コードに対する名称が 取得できなかった場合、何かのメッセージボックスを 表示させたいのですが・・・。 エクセルのバージョンは97です。 OSはWin98です。 商品コードに対する商品名は1対1で 商品コード・商品名称の入っているシートと 商品コードを入力するシートとは 同一ブックです。 100件以上のコードに対して紙ベースで 商品名称を捜すのに 泣いています(≧_≦) 助けて下さい!!!
- ベストアンサー
- オフィス系ソフト
- エクセル 担当ごとに自動振り分け
ご教授願います。 エクセル2003使用です。 シートが「入力」「担当無」「鈴木」「佐藤」「山田」・・・・とあります。 元のデータを「入力」シートに入力後、各担当に自動で振り分けられるようにしたいです。 元データとなる「入力」シート A B C D E F G H 1NO 担当 会社名 住所 商品名 数量 日付 金額 2 1 鈴木 ○会社 神奈川 ペン赤 100本 10/25 50万 3 2 担当無 △社 東京 ノート 200冊 10/26 10万 振り分け先となる「担当無」「鈴木」「佐藤」「山田」・・・・シート A B C D E F G H I 4 NO 会社名 住所 商品名 数量 日付 金額 結果 備考 となります。 うまく説明できないのですが ・振り分け先には見出し等を付けたい為A1~3は空欄、A4は項目名にしたいです。 ・各担当が「担当無」のシートを見て自分のやりたい案件を選択できるようにしたいです。 ・選択された「担当無」に入力されていたデータは、選択した担当のシートに反映されるようにしたいです。又、反映後は「担当無」シートから削除。 ・振り分け先シートのみにある”H列の結果”と”I列の備考”は各担当が入力するため振り分けを実行したら下端のセルに自動でデータが追加されるようにしたいと思っています。 同じような質問などを参考にし色々試したもののマクロ、数式ともに勉強始めたばかりのレベルなので応用ができずデータが重複したり、エラーばかりなってしまいます。 図々しいとは思いますが、ご教示いただければ幸いです。 宜しくお願い致します。
- 締切済み
- その他(ビジネス・キャリア)
- エクセルVBA:表の内容を担当者別に振り分けたい
よろしくお願いいたします。 VBA初心者です。よろしくご指導をお願いいたします。 安易に教えてgooで質問することにお叱りをいただくこともあり、 VBAの本も数冊買って勉強をはじめ、格闘していますが、手に負えません。どうか助けてください。 A B C D E F g 担当者 日付 商品 規格 数量 単価 備考 1山田太郎 ○ △ ■ ◎ ◇ ▼ 2鈴木次郎 ■ ○ ▼ ■ ○ ○ 3佐藤三郎 △ ■ ○ ◎ ◎ ■ 4山田太郎 ▼ ■ ◎ ■ ○ ▼ 5山田太郎 ◇ ○ ◎ ◇ ◆ ◎ 6鈴木次郎 ◆ ◎ ◇ ◎ ◇ ◇ というような入力シートの表があり、レコードは1000以上、下にたくさん続きます。 ○や▼には実際には数値や商品名、短文などが入ります。 担当者は、50名、そこで「山田太郎」をはじめ、担当者氏名の名前の50のワークシートを作成しています。 そこで、次のようなVBAを書きたいのです。 VBAを実行すると、 シート別に入力表のデータが振り分けられて、 「山田太郎」に A B C D E F g 1 日付 商品 規格 数量 単価 備考 2 ○ △ ■ ◎ ◇ ▼ 3 ▼ ■ ◎ ■ ○ ▼ 4 ◇ ○ ◎ ◇ ◆ ◎ と入力シートに入力されたデータが50名のシートに振り分けられるものです。 どうか、よろしくご指導お願いいたします。
- ベストアンサー
- オフィス系ソフト
- Excelについて質問します
Excel2000を使用しております。 早速ですが、たとえば以下のようなシートがあります。 <Sheet1> 「商品コード」「数量」「金額」「商品グループコード」 A0001 10 ¥500 01 A0002 12 ¥580 01 A0003 17 ¥690 02 このシートから以下のようなシートを作成します。 <Sheet2> 商品グループ 01 「商品コード」「数量」「金額」 A0001 10 ¥500 A0002 12 ¥580 ・ 商品グループ 02 「商品コード」「数量」「金額」 A0003 17 ¥690 このとき、Sheet1の商品グループは毎月の売上状況により変わります(その月売れないものもあれば、新たに売れるものもある)。 Sheet2を自動的(マクロ、VBA)に作成したいのですが、何か良い方法はないでしょうか?うまく表現できなくてすみません。
- ベストアンサー
- オフィス系ソフト
お礼
ご回答ありがとうございます。 参考にします。