• 締切済み

エクセルのデータベース計算で困っています。どなたかお分かりの方ご教示下さい

エクセルで 【データベース1】 コードA 100 101 【データベース2】 コードB 200 201 【データベース3】 値 301 302 の三つのデータベースから 【結果】 コードA  コードB 値 101 200 301 101 200 302 101 201 301 101 201 302 102 200 301 102 200 302 102 201 301 102 201 302 のような結果を作成することは可能でしょうか。 エクセルに詳しい方ぜひご教示下さい。 色々なエクセルのサイトを検索したのですが ついにわからず困ってまして…どうか宜しくお願いします! もし可能でしたらエクセル関数でお願いします。 (ご無理でしたらVBAでも大歓迎です)

みんなの回答

noname#110201
noname#110201
回答No.3

本当に、総当りの組み合わせを作りたいだけなのでしょうか? 総当りとは、3つの数字のあらゆる組み合わせを作る意味なのですが。 3つの数字にそれぞれ2つの選択肢があるので、8通りの組み合わせができますね 確かに、提示されている例では、そうなっています。 総当りではなく、データベースとしての機能を実現させるのでしたら、VLOOKUP関数を考えてみてください。 この関数については、私がごちゃごちゃ書くより、ぐぐってみればいくらでも引っかかってきます。 例えば、 http://allabout.co.jp/computer/msexcel/closeup/CU20060805A/ でも、データベースなら、アクセスを使ったほうがよいのではないでしょうか。 総当りの組み合わせを作るだけなら、下に示したプロシージャのような感じでできます。 シートA、B、CのそれぞれA2のセルから下に組み合わせにつかう数字が並んでいるとします。 その数字はいくつあってもかまわないようにしてありますが、空白のセルがあればそこで数字の列が終わっていると判断しています。 キーになるフィールドは不要です。このキーも出力させる必要があれば、適当にアレンジしてください。 結果はシートResultに出力されます(あらかじめその名前のシートがある、という前提です)。 タブ寄せがうまくコピーできるかどうか分かりませんが、もしうまくいかなければ、お手元のエディタにコピーして、解読してください。 動作確認していますので、私の意図のとおりには動くはずです。 Sub AllCombination() Dim ValueA As Variant, ValueB As Variant, ValueC As Variant Worksheets("Result").Select Range("A1").Value = "A" Range("B1").Value = "B" Range("C1").Value = "C" Range("A2").Select Worksheets("A").Select Range("A2").Select While ActiveCell.Value <> "" ValueA = ActiveCell.Value Worksheets("B").Select Range("A2").Select While ActiveCell.Value <> "" ValueB = ActiveCell.Value Worksheets("C").Select Range("A2").Select While ActiveCell.Value <> "" ValueC = ActiveCell.Value Worksheets("Result").Select ActiveCell.Value = ValueA ActiveCell.Offset(0, 1).Value = ValueB ActiveCell.Offset(0, 2).Value = ValueC ActiveCell.Offset(1, 0).Select Worksheets("C").Select ActiveCell.Offset(1, 0).Select Wend Worksheets("B").Select ActiveCell.Offset(1, 0).Select Wend Worksheets("A").Select ActiveCell.Offset(1, 0).Select Wend Worksheets("Result").Select End Sub

noname#79209
noname#79209
回答No.2

要は、総当たりの組み合わせで表を作りたいのだと思います。 「コードA」のサンプルと「結果」との内容が異なるので、 回答者諸氏が混乱しています。ご注意ください。 もし、そうなら、 ワークシート関数を使ってもある程度は可能だと思いますが、 行数が多いと限界があります。 まあ、VBAでしょうね。 各表ごとにFOR-NEXTとかDO-LOOPを入れ子にして回せばできますよ。 「だからぁ、そのコードを教えて!」 と言われるでしょうが、それだと全くの丸投げなので...

syouya6
質問者

お礼

補足を先につけてしまいましたが ご回答ありがとうございます。

syouya6
質問者

補足

ご回答ありがとうございます。 すみません、ご指摘の通り例示させていただいたものは二回とも誤りでした。 以下が正です。 【データベース1】 コード1 コードA aa 100 aa 101 bb 102 【データベース2】 コード1 コードB aa     200 aa     201 cc     202 【データベース3】 コード1    値 aa 301 aa 302 dd 303 の三つのデータベースから 【結果】 コード1 コードA  コードB 値 aa 100 200 301 aa 100 200 302 aa 100 201 301 aa 100 201 302 aa 101 200 301 aa 101 200 302 aa 101 201 301 aa 101 201 302 >要は、総当たりの組み合わせで表を作りたいのだと思います。 その通りだと思います(言葉が厳密にわからないので曖昧ですみません) >ワークシート関数を使ってもある程度は可能だと思いますが、 >行数が多いと限界があります。 >まあ、VBAでしょうね。 >各表ごとにFOR-NEXTとかDO-LOOPを入れ子にして回せばできますよ ありがとうございます。 ・関数では難しいこと ・VBAなら可能なこと がわかっただけでも収穫です。 >「だからぁ、そのコードを教えて!」 >と言われるでしょうが、それだと全くの丸投げなので... 仰る通り丸投げの積もりでした。 これからのことを考えても良いとは言えないですよね。 ギリギリまで考えてみます。

  • sytkn
  • ベストアンサー率43% (54/125)
回答No.1

【結果】の表示の組み合わせが良く分かりません。 コードAを4つづつ表示、コードBを2つづつ表示、値を順番に1つづつ表示させたいと言う事でしょうか? 何(どこのセル)を基準に、どのようにしたい(並べ替えたい・表示したい・コピーしたい)と言うのがいまいち分かりません。 もう少し具体的に説明お願いします。

syouya6
質問者

お礼

補足を先につけてしまいましたが ご回答ありがとうございます。

syouya6
質問者

補足

早速のご回答ありがとうございます。 そして説明不足失礼致しました。 説明しようにも適当な言葉がわからず難しいのですが 誤解を恐れずに申し上げますと各値に対して共通のコードが存在し、その条件にあった各値の数だけ結果の表示が倍々になっていく結果がほしいのです。 下記であれば コード1=aaを条件に各データベースを結合させます。 (結果の行数は(コードAの条件適合行数)×(コードBの条件適合行数)×(値の条件適合行数)に自動的に表示される) 【データベース1】 コード1 コードA aa 100 aa 101 bb 102 【データベース2】 コード1 コードB aa     200 aa     201 cc     202 【データベース3】 コード1    値 aa 301 aa 302 dd 303 の三つのデータベースから 【結果】 コード1 コードA  コードB 値 aa 101 200 301 aa 101 200 302 aa 101 201 301 aa 101 201 302 aa 102 200 301 aa 102 200 302 aa 102 201 301 aa 102 201 302 >何(どこのセル)を基準に、 答えになっているかわかりませんが、コード1を基準にです >どのようにしたい(並べ替えたい・表示したい・コピーしたい)と言うのがいまいち分かりません。 「三つのデータベースを結合させたい」と申し上げるのが合っているかと思います。

関連するQ&A

  • エクセルの関数で顧客管理データーベース

    エクセルの関数で顧客管理データーベース (画像添付あります) 顧客管理で、関数を使いたいのですが、 一時保管の A3と、B3は常に、違う値が入ります。 そこで、それを、データーベース化したいのですが、 例えば、 A3、B3の値を、E3、F3に移して、 また、A3,B3を消去し、新しい値を入力し、それを次に、E4、F4に移したいのですが、 どうしたらよいでしょうか。

  • エクセル 計算式

    エクセルの関数についての質問です。 A1のセルにおいて、計算式を作成しました。その計算結果がマイナスの場合にA1のセルは0と表示させ、更に、B1セルではA1のセルの計算結果を計算式に入れているため、A1がマイナスであった場合は、B1での計算式中のA1の値を0として計算させたいのですが、どうやればよいのか教えて下さい。 IF関数ですか?色々やってみたのですが、うまく出来ません。 よろしくお願い致します。

  • エクセルのデータベースで参照・貼り付け

    エクセル2003で、データベースを作成してあります。 別のシートに、コードを入力すると、データベースを参照して関連の項目を貼り付けるという作業したいと思っています。 例 シート2にデータベース住所録を作成。 [コード][氏名][住所][電話]... シート1の[A]列にコードを入力すると、データベースから氏名をコピーし[B]列に貼り付け...[C]列に住所... ※貼り付けたデータを後で編集したいため、貼り付けで行いたいと思います。 ※マクロではなくて、関数で行いたいと思います。 ※実際には住所録ではなくて、在庫管理です。 よろしくお願いいたします。

  • エクセル データベースと検索

    エクセル初心者です。 今データベースの検索の勉強のため 以下のような2枚のシートを作成しています。 上段がデータベースの元データで在庫の商品と 支店名です。 商品の種類は全部で1000個位の種類があります。 下段が商品を備蓄している支店名と支店コードです。 そこで今回したい処理なのですが、 下段の支店コードの横の列に以下のように 検索フォームをつくり、支店名(さらに言えば支店コードだけ) を入力すれば、その支店で持っている商品名を すべて表示したいのです。 現在、目視でしているためたいへん時間がかかります。 関数やVBAで抽出することはできるのでしょうか。 よろしくお願いします。

  • エクセル データベースからの検索について

    エクセル データベースからの検索について 商品名・商品番号・在庫といったデータベースがあります。 検索する別の場所を設けそこで商品番号をたたくと商品名と在庫が表示できるようにVLOOKUPでしました。 商品番号がわからない場合があるので商品名から検索できるようにしたいのですが 商品番号からの検索と同じ関数では「#N/A」となってしまいました。 文字での検索の場合はどのような関数になるのでしょうか?         B2商品番号入力   C2検索結果表示(商品名) D2検索結果表示(在庫数)         B3商品名入力    C3検索結果表示(商品番号)D3検索結果表示(在庫数)  A10商品番号  B10商品名     C10在庫数   :       :         : としてC2には =VLOOKUP(B2,A10:C100,2,FALSE) とし正しい結果が表示されます。 商品名から検索したいC3にも同様のものをいれましたが表示されません。 よろしくお願いします。     

  • Excelでのデータ検索関数について

    Excelでのデータ検索について悩んでいます。 例えば、A列では「あ~お」、B列では「A~H」でC列ではデータが入っている場合でA列の「い」、B列の「C」のデータを検索したいときはどのように関数を組み合わせれば良いでしょうか?色々試したのですがなかなかうまくいきません。vlookup、index関数で組み合わせてできるのでしょうか?やはりVBAでしか無理なのでしょうか? どなたかご存知の方、ご教示ください。

  • エクセルVBAでセル選択

    エクセル2000でリストを作成し、VBAで編集しようとしています。 A列に入力されているコードの先頭に「’」をつけて文字列とするための関数をB2のセルからA列のデータが入力されている最後のセルの隣までコピーしたいと思っています。 A列の最終セルを取得するVBAは分かったのですが、その値をB列の選択範囲として使用する方法がわかりません。 エクセルVBAは全くの初心者です。 どなたか教えてください!

  • EXCEL SUMIF 関数の計算結果が倍数になってしまう

    EXCEL SUMIF 関数の計算結果が倍数になってしまう EXCELのC列に下記数式を入れているのですが、計算結果がなぜか2倍された値が入ってしまいます。 色々と検索してみたのですが、よく分からず、皆様のお力をお貸し頂きたく。 =IF(A2=A3,"",SUMIF(A:A,A2,B:B))

  • Excel 順不同数値の検索

    | A | B |   100 115   110   120   130   120   110   120 このように数値が順不同で並んでいるA列を上から検索して、 B1の値と同じ値かそれ以上になる行番号(かその値)をB2に表示させるには どのようにすればよろしいでしょうか。 (上記の場合ですと、3行目の120の値をB2に表示させたい。) 出来ればVBAは使わず関数だけで実現したいと考えています。 VLOCKUP、MATCH等々、検索関数を調べましたが出来そうで出来ません。 ご教示頂けますでしょうか。

  • エクセルVBAをGoogleAppScriptで

    エクセルVBAで作成された動作をGoogleAppScriptでも再現させたいのですが、簡便な方法はありますでしょうか?動作内容はA列に配置された複数のキーワードを、あるサイトで検索してその結果を順次B列に返すという動作です。 理想としてはVBAコードを貼り付けて変換ボタンを押せばjavascriptに変換されるようなイメージです。 よろしくお願いいたします。

専門家に質問してみよう