🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

Q&A

解決済

2回答

23888閲覧

【Excel】文字列の最大値を取得したい

Mr.sijimi

総合スコア21

関数

関数(ファンクション・メソッド・サブルーチンとも呼ばれる)は、はプログラムのコードの一部であり、ある特定のタスクを処理するように設計されたものです。

0グッド

0クリップ

投稿2020/12/03 08:01

編集2020/12/04 00:44

Excelで下記のような表があります。
項目1の文字列で最大値にあたるデータを関数を使って取得するのが目標です。

表1

項目1
1AACD
2ABCD
3ACCD
4ADC

##前提
★項目1の中で「A」を最小値、「Z」を最大値とする
★文字数はすべて統一して4文字(指定桁になるよう空白右側空白埋めになっているデータもあり→上記の表では行4)
★表ではわかりやすくするため上から順にA→Zの流れになっているのですが、実際は順不同となっている場合もあります。

処理内容としたら、OracleのMax関数のような動きをエクセルで実現させたいということです。

表1のデータであれば「ADC」が取得したい、ということです。

ですが、調べて出てくるのは「MAXIF関数」や「MAXA関数」ばかりです。
上記だと、文字列ではなく、「数値の最大(MAXIF)」または「0か1(MAXA)」となってしまい、目標となる文字列の取得ができません。

Excelでは文字列の最大、最小を求めることはできないのでしょうか?
わかる方いましたら教えてください。

##追記
上記の内容が解決していない状態で恐縮です。
目標内容の追加を1点だけさせていただきます。

表2

Idipt
11234
29876
36543
4...etc

表3

Id項目1
11234AACD
29876ABCD
36543ACCD
41234ADC
5...etc

表2.Idと表3.Idがキーとなっていて、両テーブルでIdが合致する行が複数ある場合に項目1の文字列での最大値を取得するのを目標とします。(他前提条件は変わらずです)

現状で重複するデータがある場合に複数セルにて重複するデータをすべて取得するというのは実現ができています。

=IFERROR(INDEX($Id$1:$Id$5,MATCH(LARGE(($Id$1:$Id$1="1234")*1/ROW($Id$1:$Id$5),ROWS($Ipt$1:$Ipt1)),1/ROW($Id$1:$Id1),0),COLUMNS($ipt$0:ipt$0)),"") //ipt列は入力するセルで項目名の行を0行目としています

上記の場合、1セル1データの取得となっておりますが、参照するための列や行を増やしたりすることをせず、iptの入力セルだけで完結させたです。

Excelでの重複データを取得する方法を調べましたが、1セル1データ取得の方法がほとんどでした。

引用テキスト参照するための列や行を増やしたりすることをせず、iptの入力セルだけで完結させたです。

この方法での取得はあるのでしょうか?併せて教えていただければ幸いです。

###スペック情報
OS:Windows10 Pro
Soft:MicrosoftOffice Orifessional Plus 2016 Excel

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

radames1000

2020/12/04 01:00

追記で質問されていますが、関連していてもまったく別の問題ですよね。 最初からすべて記載するか別の質問にしてください。
Mr.sijimi

2020/12/04 01:02

失礼いたしました。 新たに質問を投稿させていただき、こちらの投稿はクローズさせていただきます。 ご指摘ありがとうございます。
guest

回答2

0

ベストアンサー

A1からA10に値が入るとして下記式入力後Ctrl+Shift+Enterしてください。

excel

1=INDEX(A1:A10,MAX((COUNTIF(A1:A10,"<"&A1:A10)=MAX(COUNTIF(A1:A10,"<"&A1:A10)))*ROW(1:10)))

投稿2020/12/03 13:51

radames1000

総合スコア1925

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr.sijimi

2020/12/03 23:57 編集

ご回答ありがとうございます。 試してみたところ、必ず一番上の行が取得されてしまいます… また、下記の記載ができておりませんでした。申し訳ありません。 今回提示しています表ではわかりやすくするため上から順にA→Zの流れになっているのですが、実際は順不同となっている場合もあります。
radames1000

2020/12/04 00:43

順不同は問題ありませんので安心してくださいね。 式を編集状態にしてからCtrl+Shift+Enterをしてみてください。 配列を使っているので、式の前後に{}がついてきます。
guest

0

自分ならば記号に重みを付けますかね。仮にA~Zまであるとして、Aを01、Zを26とします。
そして記号を順番に数値に分解し、その数値を取得します。

桁を合わせ、桁が揃うように後は00で埋めます。

だとするとAACDは010100304、ADCは01040300となります。
あとはソートするだけです。

投稿2020/12/03 08:35

FKM

総合スコア3647

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr.sijimi

2020/12/03 09:51

ご回答ありがとうございます! なるほど。その案は思いつかなかったです! 1度試してみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問