• ベストアンサー

ロータス機能のエクセルでの実現について

 ロータス123では、データベース関数の条件式をデータベース内のデータ個別に変更することが可能(データベース関数の条件式がデータ個別に変更可能)でしたが、エクセルでは条件式をセルで表現しなければならないので、困っています。  例  1000人分の生年月日が入力されたセルがあり、現在年齢を算出し、ある年齢のデータ数を数える。  このような場合、123ではデータテーブルに一切触らずに1セル1行の関数で計算できたのに、エクセルでは別に1セルを年齢計算結果として使用せざるを得ず、テーブルの様式やシート構造を変更できないデータの場合困っています。  123の例 DSUM関数の条件式にDGET関数とDATEDIFF関数を組み込む  今のところ、全てVBAで組んでいます(VBAで年齢計算し、セル書き出し)が、後々の担当者のことを考えるとできたら関数で表現したいのですが、どなたかお分かりの方がいらっしゃったらお教えください。

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

  • ベストアンサー
  • O_Denwa
  • ベストアンサー率26% (46/172)
回答No.5

>エクセルの方が遅れているのでしょうか。 どーでしょうね。 普及率から良くとExcelの天下ですし、機能も充実してますから。 そのぶん。わかりにくい関数の動きは採用されないのかもですね。 >条件範囲がシート上に残ってもかまわないのです。 なら、条件範囲を入力用と実際に使う用。二箇所用意し、 入力部分には、年齢をそのまま入れて、 それを実際使う用の条件範囲部分で、入力年齢ぶん昔の日付に置き換える。 (ある年齢。で求めるなら、その年齢ぶん昔の本日から、その1年後のフタツの日付が必要) っで、置き換えた日付を条件として使い、リストからカウント。 とかだめでしょうか? 平たく言うと、年齢から、誕生年月日を求めて、 それをつかい、生年月日リストを数えるって事です。 ややっこしそうですけど(汗

wedge
質問者

お礼

 それだあ!  ありがとうございます。  年齢を出して比較するのではなく、最初から年齢から逆算した範囲と生年月日とを比較すればいいんのだなんて、思いつきもしませんでした。  目からうろこがとれた思いです。ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.4

#1,#2で補足要求したものです。 #1では補足解答では「Criteria」の部分を、 #2では「中間結果的データの列」が邪魔だと、別の答えになっているように思います。どちらが一方ですか両方ですか。 「Criteria」のセルも、表上に残るから、見る方が見やすいのであって、デメリットではないと思う。 「Criteria」に関しては、各行ごとにC1:C2 、D1:D2、E1:G2、・・・と使い分ければ出来そうだが、それでは不可ですね。 D   E    F   G 年齢  年齢   年齢  性別 >40 >35  >30 2  「テーブルの様式やシート構造を変更できないデータの場合」でも余白範囲は使ってもいいのではないですか。あるいは別シートにコピーして、仕事してますよ。 ●DGETそのものやその他一時的配列(ベクトル?)に蓄えられるような方法があるか勉強してみます。 エクセルにもDGETがありますが、普通の使い方では、やはりCriteriaの範囲はシート上に要るようです。

wedge
質問者

補足

 回答ありがとうございます。  条件範囲がシート上に残ってもかまわないのです。  (実際、条件が極めて複雑なため、現在の集計用シートではEH列まで使って条件セルを生成しています。)  でも、データベーステーブルは一切いじれないのです。5年間に及ぶ自動化の努力により、多数のアプリが追加された結果、さまざまなアプリが参照しており、このエクセルのデータも他のアプリが参照する結果、1列増やすだけで、膨大な修正個所の検索が必要になってしまいます。実際は、どこを修正してよいか分からなくなっている状態です。  また、人事異動の結果、使用する職員がまったくの初心者(マウスすら握ったことがない)である場合が多く、他の部署にいる私が、いつまでも面倒を見ることはできません。関数ぐらいなら理解してもらえると思います。  エクセルファイルのLOADが発生したときに、データ数を数え、他のシートにコピーし、そのシートで1列余計に使うというような動作をすれば解決するとは思いますが、そうするとまたVBAでスクリプトを書くこととなってしまいます。そうなると初心者の理解は不可能でしょう。  質問の解決は、無理でしょうか。自分なりにいろいろトライアルしたのですが・・

全文を見る
すると、全ての回答が全文表示されます。
  • O_Denwa
  • ベストアンサー率26% (46/172)
回答No.3

>1000人分の生年月日が入力されたセルがあり、現在年齢を算出し、ある年齢のデータ数を数える。 A1に”生年月日”というタイトルが入るとして、 A列のA2以降に生年月日が入っている状態だとしたら、 123なら、その状態で別セルに @DCOUNT(A1..A65536,"生年月日",@DATEDIF(A2,@NOW,"y")=ある年齢) とすれば、リストから「ある年齢」の人の数が求まりますよね。 DSUMやDGETというのを使用しているところを見ると、ちょっと違うのかもしれませんけど。 ※「ある年齢」は、当然ですけど、年齢を示す数字。 これをExcelの関数で表現するには。。。。 別のセルへそれぞれの年齢を出して数えるくらいしか思いつきませんでした(汗

wedge
質問者

補足

この場合、実際に使用した記述は、 @DCOUNT(データベース範囲,"生年月日",@DATEDIFF("生年月日",@NOW,"y")=ある年齢#AND#他の条件......) としていました。 エクセルの方が遅れているのでしょうか。 123が失われて苦労しています。 エクセル長所は、ソートが1000倍くらい早いことと、アクセスなどとの連携がスムースなこと以外思いつきません。(ToT)

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

質問はこう言うことですか。例えばA1からA10まで 生年月日 1964/2/13 1984/5/31 1942/10/29 1985/12/20 1943/1/31 1942/9/11 1967/7/13 1956/12/31 1993/1/25 とし、B1に年齢、B2に演算式「=DATEDIF(A2,TODAY(),"y")」をいれ、B10まで複写する。 B列はB1からB1まで 年齢 38 18 59 16 59 59 35 45 9 となる。 C1からC2に 年齢 >40 と入れ、(例えば)C7に「=DCOUNT(A1:B10,B1,D1:D2)」 とすると、C7は「4」になる。 ●この場合B列が必須なのが邪魔である。B列を使わないで、同じ結果を(演算式で)出来ないかと言うことでしょうか。

wedge
質問者

補足

 そうです、下記の補足をお読みください。  1列増やせれば問題などないのですか゛・・  123ではいとも簡単だったのに・・・

全文を見る
すると、全ての回答が全文表示されます。
  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

下記表現個所に当たる関数式の実例1,2で挙げていただけませんでしょうか。やり方を教えてくれる方が出るかもしれないと思います。 (1)条件式がデータ個別に変更可能    セル内容のリテラルで書きこめるって事ですか。 (2)1セル1行の関数で計算できたのに、エクセルでは別に1セルを年齢計算結果として使用せざるを得ず (3)DSUM関数の条件式にDGET関数とDATEDIFF関数を組み込む ●一般的には下記が出来るので大きな差はないはず。(私見では123が先生格で、エクセルも追いついている部分が関数の 数などに見えると思いますが、)下記では対処できないケース なんでしょうか。   ・関数式のネストが可能。   ・通常は数値文字列を入れるところへ関数式を入れられる   「ケースがある」。   ・一般的には数値やA1表現A1:A10表現や範囲名   、セル名表現が可能です。   ・先ほど解答した別件質問のINDIRECTのように    間接的に出来るが故のメリットもあります。範囲などを    むしろ間接表現をもっと認めて欲しいぐらいです。

wedge
質問者

補足

 説明不足でもうしわけありません。  エクセルのDSUM関数は、Criteriaにセル範囲を指定しなければなりません。  この条件は、外部表現形式が文字列式であれば、内部保持形式がどのようなものてあっても条件として認識します(数値でもtext関数などで文字に変換し、+"<"などを付加する文字列式化しても、表現形式が文字列式であれば条件認知が可能)ですから、条件式を変化させることはできますが、データごとに条件式を変更することができません。データベース関数と条件は1:1でしかありません。  たとえば、DSUMがデータベーステーブルをサーチしている場合に、今まさにサーチしているデータを元に計算された結果を条件式とすることは、セル範囲を条件としている以上、できないと考えます。  たとえば、生年月日データがある場合に、その生年月日から計算された年齢により、条件式を変化させるなどは、データの数だけ条件セルを設けるか、別途1列を設けて、年齢計算結果を収納することになります。  条件セルに「<15」15歳以下とした場合に、別にセルを設けないとした場合、比較対照先の年齢はどこで計算するのでしょうか。(別途1列を設けて、年齢計算結果を収納していれば、単にそれとの比較ですみますが・・・)  一方、123では、DSUMの条件式にデータベース関数を組み込むことができ、データごとに条件式を変化させることができます。DSUM条件は、関数内に直接記述しますから、このような問題が発生しないこととなります。  たとえば、現1サーチデータについて、年齢計算し、それを条件比較対照とすることができます。DSUM(,,DATEDIFF(DGET()))  このように、条件比較対照を、セル列の増加なくデータごとに計算式化できないかということです。  

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • エクセル関数でデーターベースから値を抽出するには・・・

     エクセル関数のDGETはデータベースから1つの値を抽出しますよね。でも条件を満たす値が複数ある時には「#NUM」が返されて抽出出来ない。条件を満たす値を複数返すような関数は無いのでしょうか ?   住所、氏名、年齢、職業、のデータの中で「"東京*"」にすむ人の名前を抽出しなさい。「"東京*"」に住んでいる人がいない場合は空白セルを返すようにする、と言った内容です。   どなたか教えて下さい。

  • エクセル「DGET」関数の範囲について

    お世話になります。 DGET関数に関して質問です。 =DGET (データベースの範囲,条件を満たすフィールド,検索条件) に対して、「データベースの範囲」に対してタイトル(AA~CC)をつけていますが、 データベース上に同じ名前があると、2件目以降のAA~CCの項目にあるデータは 条件で見つけてくれないようでした。(以下の条件だとヒットしない) ●条件 AA       BB    CC 2012/2/10 山田 \24,000 ●データベースの範囲 AA       BB    CC    AA       BB CC 2012/2/10 田中 \12,000                   2012/2/10 山田 \24,000 データベースをすべて縦書きにして同じ項目をなくせばもちろんヒットするのですが、 現金と通帳のデータ両方をデータベースの範囲として見て欲しいので、レイアウトを 横並びにしたいのですが、なにか方法はありますでしょうか? 別の関数でも構いませんのでよろしくお願いします。 やりたいのは、横並びにした両方のデータを参照して、 一致したものは入金が終わっているとしたのですが、その関係で同じタイトルにしてます。

  • EXCEL で検索、更新したい

    EXCEL でわからない箇所があり質問します。 前提条件 Sheet1 A列:名前 B列:年月 C列:値 データは、名前と年月で一意になるデータシートがあり マスターデータとして全データが登録されている Sheet2 A列:名前 B列:年月 C列:値 ある条件でとあるデータベースから抽出した名前と年月の一覧がある この段階で値のセルには何も入っていない やりたい事 (1)この状態でマクロを実行し、A列、B列を条件に該当する行から    C列を抽出しSheet2 にセット (2)Sheet2のC列の値を変更後、マクロの実行で    A列、B列の条件を元該当する行から、Sheet1の C列に値を更新 (3)もし、Sheet2のA列、B列の条件に該当しない行がある場合、    Sheet1に行追加しC列を格納 という事をしたいと考えています。 Sheet1 の全ての行をマクロでループさせて A列、B列をif分で比較し行を取得し、Sheet2 に張る場合、 遅くなるのであまりやりたくないと思っています Find 関数も考えたのですが、ヘルプを見る限り、条件が1つしか指定でき ないように思えるのですが、複数列の条件を指定できる Find 関数 あるいは、類似の関数とあかがあるのなら教えてください 最悪は、EXCEL ADO で、自分自身をSQLで抽出、Update、Insert を行う 事も考えていますが、 EXCELのセル内の式で、INDEX関数やDGET関数で簡単に抽出できるのに (ただ、値を変更するので式はかけないけど・・・) わざわざ、ADOでプログラムを組むのもどうなんだろうと疑問に思ってます。

  • Excel VBA でデータベース操作のできる関数

    データベースを扱えるソフトを作ろうと思ったら、通常 Access を使うことになると思うのですが、Excel で作ろうと思っています。 なぜかというと、Office Personal版を持ってる人にも使って欲しいからです。 Excel の1シートをひとつのテーブルに見立てて、簡単なデータベース操作をしたいのですが、それが簡単に行える関数はありますか? VBA の関数でも知りたいのですが、SQL文などで扱えるようになってるのがあればなおさらいいのです。

  • 関数で抽出したセルの一部の文字を変更したい

    DGET関数を使って、別シートよりデータをひっぱってくるように設定しています。 元の値はセルに入っている文字の一部のみ文字の色を変更、太字、下線をひくようにしていますが、 関数ではその文字の条件まで抽出する方法が見当たりません。 DGET関数によって抽出したデータにおいて、「あいうえおかきくけこ」のうち「あ」だけ文字色を赤色、太字、下線をひくようにしたいです どなたか詳しい方やり方を教えてください。 宜しくお願いします。

  • エクセル、計算式で日付が41330となるのを西暦に

    エクセル2010です。 画像のようなデータがあったとして、 たとえば、「2月のUFJの金額の合計をする」といった計算式を、別のセルに記入したいと思っています。 そこで作業列を作り、ワイルドカードを使った文字列をヒットさせるようにしました。 画像のE列に「=A○&B○」という式の作業列を作り、結果を記載したい目的のセルには、 =SUMIF(E16:E27,"2013年2月*UFJ",D16:D27) としてみました。 しかし、ヒットさせたい"2013年2月"の部分が、標準形式の41330のような表示になってしまい、ヒットしません。 SUMIF式のほうを標準形式にしてみようと思いましたが、どの桁が何月と決まっているわけではないので、ワイルドカードを使って指定できません。 こういう場合、E列を「2013年2月25日UFJ」のように表示させるのは、どうすればよいのでしょうか? アドバイスをいただけると幸いです。よろしくお願いします。 ------------------------------------ ちなみに、SUMIFS関数やSUMPRODUCT関数で実現はできたのですが、データが多くなってくると処理がとても重くなってきます。 またピボットテーブルも考えたのですが、この結果を各種条件で表示させるセルをまず設定してから、そのセルを別の様々な計算式が参照するような連動をするかたちになるので、ユーザーの手で条件を変更するピボットテーブルでは対応できないのでは、とのことから、この方法を試しているところです。

  • エクセル自作関数の再計算

    エクセルでVBAを利用して自作関数を作りました。 この関数はシートの値の内容によって異なる結果を返す内容になっています。 で、この関数をセルから呼び出しているのですが、シートの値を変更した時に、もともと用意されている関数なら自動的に再計算されますが、自作関数は再計算されませんでした。 仕方がないので、再計算させたいときには関数を使用しているセルを編集状態にして何も編集せずにenterを押し再計算させています。 これを何かの機能で再計算させる方法を教えてください。よろしくお願いします。

  • 正規表現 使う機会が多いのでしょうか?

    正規表現とはデータベースを操作するにおいて 使う機会が多いのでしょうか? 私はエクセルVBAを勉強しているものですが 正規表現の知識は必要ですか? エクセルでも正規表現を使う機会は多いですか? (エクセルではVBAや関数が不要な単機能なデータしか扱いません)

  • エクセル 複数条件の検索でデータを抜き出す方法

    win7、エクセル2007で作成中のデータベースで、複数の複数の条件に合ったデータ(レコードではなく1セル)を抜き出したいと思っています。 フィールド名は、時間帯、名前、教科、所属などです。 今作っている式は、 =IF(SUMPRODUCT((INDIRECT("'[時間割.xlsx]"&C$2&"'!$b$5:$b$150")=$B5)*(INDIRECT("'[時間割.xlsx]"&C$2&"'!$G$5:$u$150")=$M$28))=1,"〇","") 名前と時間帯が式の検索条件に入っています。 参照先が別ファイルの為、INDIRECTを使っています。 これで条件に合ったデータがあった場合に「〇」が表示されるようにまではできたのですが、さらに、条件に合ったデータの教科を表示するようにしたいと思っています。 ちなみに、人の時間割の為、条件に合うデータは1件しかないです。 DGETなどを使ってみつつ1日中考えていたのですが、訳がわからなくなってきました。。。 もし詳しい方おられましたら、教えて頂けないでしょうか?? すみませんがよろしくお願いします!!

  • エクセルにで、Criteria(条件表)でセル参照は使えますか?

    エクセル2002を使用しております。 DSUM関数を用いていろいろやってみてはいるのですが、できないので助けてください!! <目的> データベースの「日付」フィールドに入力された値が、A1~A2の日付であるレコードの「項目A」に入力された値(数値)を合計しようとしています。(A1とA2はデータベース外にある入力用のセルです) <私が選んだ方法←できません(泣)> DSUM関数を用い、引数Criteria(条件表)のセルに、(1)A1に入力された日付以上(2)A2に入力された日付以下となるように論理式を立てたいのです。『>=A1』としてみましたが、計算されません。 条件式の立て方をアドバイスください。 また、他に良い方法がございましたら、教えていただきたいです! よろしくお願いいたします。

このQ&Aのポイント
  • バックカバーが完全に閉まっておらず、両面印刷ができません。爪の位置が確認できず困っています。
  • Windows11で使用しているブラザー製品のHL‑L2375DWで、バックカバーが閉まらず、両面印刷ができません。
  • バックカバーが閉まっていないため、正しく両面印刷ができず困っています。ブラザー製品のHL‑L2375DWを使用しています。
回答を見る

専門家に質問してみよう