質問する
0

excelで動く数式がcalcでERROR 代替の方法はないでしょうか

質問日 2020-07-26 09:49:22 +0200

miyamo2 のGravatar画像

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法、 たとえば、

<a列&gt; <b列&gt; <c列&gt; 7="" 1 りんご 100円="" 7="" 2 ぶどう 200円="" 7="" 2 すいか 300円="" 7="" 3 みかん 100円<="" p="">

このような表があって、100円を含む行をそのままの形で、 7/1 りんご 100円 7/3 みかん 100円 このように別のセルに抜き出す方法の質問があって、その回答が、 ーーーーーーーーーーー 別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。 日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

edit retag flag offensive close merge delete

Comments

えっと…。文字化けもあって、何がなんだかちょっとわかりにくいです。 元の表がイメージできません。 記載いただいているのは、何かの形式なのでしょうか…?(浅学ですみません…。)

ファイルなり画像の添付は出来ないでしょうか。

例えばこれを…

7/1りんご100円
7/2ぶどう200円
7/2すいか300円
7/3みかん100円

こうしたい、ってことですかね?

7/1りんご100円
7/3みかん100円
JO3EMC のGravatar画像JO3EMC ( 2020-07-26 17:16:39 +0200 )edit

2 Answer

1

回答日 2020-07-27 12:14:49 +0200

miyamo2 のGravatar画像

文字化けになり、申し訳けありませんでした。「Comments」をいただいた通りです。sheet1に上の表があり、sheet2のA1に条件100円を入れ、その下に条件に合う行を表示するため If 以下の数式が入っています。(Excelでは機能します。)

sheet1! を sheet1. に変えて「#NAME?」のエラーは消えましたが、2行目は0、3行目にぶどうが出ました。

Indexの中に、*が入っているのは、私もよく理解できていないのですが、ExcelではIndexの引数として配列が使用できるようで、{ }でくくった表示になるようです。それを*を使っても実現できるようなのです。 一方、http://www009.upp.so-net.ne.jp/OpenOffice/excel-calc/function01_e-c004.html のIndexの説明によると、

INDEX関数は、行番号と列番号で指定したセルの内容を返します。 ExcelのINDEX関数には、「セル範囲形式」と「配列形式」の2つの書式があります。Calc のINDEX関数は、「セル範囲形式」の書式に限られます。

とあります。したがって、calc では仕様的に実現できない要求なのかもしれません。

ご提示いただいたプログラムありがとうございます。Excelでは数式1つでできたこともcalcでは順序を経てできるということですね。内容をよく勉強させていただきます。ありがとうございます。

edit flag offensive delete link もっと

Comments

0

回答日 2020-07-26 18:33:27 +0200

JO3EMC のGravatar画像

updated 2020-07-26 21:38:15 +0200

スプレッドシートのデータ互換はあんまり得手じゃないのですが…、ちょっと試してみたところで少しご提案を…。

例示されてる関数(=IF~ってやつ)の「Sheet1!」を全て「Sheet1.」に置き換えてみるとどうでしょうか。

=IF(COUNTIF(Sheet1.$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1.A:A,LARGE(INDEX((Sheet1.$C$1:$C$500=$A$1)*ROW(Sheet1.$C$1:$C$500),),COUNTIF(Sheet1.$C:$C,$A$1)-ROW(A1)+1)),"")

Caclではシート指定の表現がExcelと違うようです(その程度のユーザーですすみませんw)。手元ではそうすることでエラーは出ません。 ただ…抽出されたのは「100円」じゃない「ぶどう」と「すいか」でした。

関数式の内容までは今のところ検証してません。手元にはExcelがなく、例示の関数式がExcelで機能してくれるのかどうかも検証できてません。自分には理解の及ばない部分もありそうです(INDEX式の使い方が理解できてません)。
正直のところ、表計算ソフトに向いた処理ではないように思えます。データベースやスクリプト向きと。

お手元にExcelがあるのなら、Excelでファイルを作ってCalcで読み込んでみるのが楽な気はします(邪道?)。

(追記)
質問の関数式とはアプローチが違いますが…。自分ならこう書く、という例を上げておきます。
C:\fakepath\257101A1.ods
中間計算セルを多用します。1セルにあまり複雑な式を盛ることはしません。もう少し統合して中間計算セルを減らすことが出来ますが、「検索範囲先頭行番号」と「検索範囲内出現位置」の列は無くせません。邪魔なら非表示なりシートを分けるなり、やりようはあろうかと思います。
範囲参照もなるべく扱いません。デバッグが面倒なので。なるべくシンプルに。あまり高級な機能は使わずに。
もっとスマートな書き方もあろうかと思いますが、参考として。

edit flag offensive delete link もっと
ログイン/サインアップして回答する

質問ツール

1 follower

Stats

Asked: 2020-07-26 09:49:22 +0200

Seen: 51 times

Last updated: Jul 27