- ベストアンサー
エクセル(空き番号の最小値の取得について)
空き番号の最小値の取得について エクセルにて付与するナンバーの管理をしています。 シートでは重複しない数字がA列で縦に並んでいます。 数列は、ところどころ空き番号があります。 その空き番号の最小値が取得したいのです。 例「1・2・3・○・5・○・○・8・~」 例でいうと「4」が取得したいのです。 一度のみの処理ではなく、列に「4」を追加すると、次最小値である「6」を取得したいです。 上記を実現できる関数式を教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
質問には書かれていないのですが、「ナンバー」を数値ではなく自 然数で考えていると想像します。1から始まる正の整数限定ってこと ですね。 そうすると、対象とする自然数を含む配列を作成して、A列の内容と 比較してやるのが良さげですね。簡単に抜けのない自然数の配列を 得るには、row(1:100)のように行番号を使うのがラクチンです。 で、row(1:100)で得られた1~100の自然数の配列がA列に現れるかど うかをmatch関数で探します。見つかれば何番目にあったかを返し、 見つからなければ#NAエラーを返します。 エラー値のままでは演算できないので、not(isna())で見つかったと ころが1、見つからなかったところが0になるように加工します。こ れに思いっきり大きな数(たとえば1万)をかけ、さらにrow(1:100)を 足します。すると、{10001;10002;3;10004;...}のように、見つかっ たところは行番号+10000、見つからなかったところは行番号のみに なります。 最後に、index関数で配列としての体裁を整え、min関数で一番小さ い数値を取り出すと、見つからなかった自然数の最小値ですね。 というわけで、「A列で縦に並んでいます」のがA2:A20だとすると =min(index((not(isna(match(row(1:100),A2:A20,0)))*10^4)+row(1:100),0)) で完成。途中に空欄がどうしたとか、重複がなんだとか、並び順が こうしたとかは一切関係ありません。
その他の回答 (3)
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
> ナンバーとはIPアドレスなのです。 Excel的には番号ではなく文字列ですね。まぁいいでしょう。IPアド レスの管理で「空きに適当に入れる」ことが出来るのは最後の1バイ トだけで、上位のバイトは環境で決まってしまいますね。だから、 管理対象の最下位バイトだけをB列に抜き出して、同じように検索し て下さい。 192.168.0.1~192.168.0.256までなら、B列は =mid(A1,11,3)*1 です。 =min(index((not(isna(match(row(1:256),B2:B200,0)))*10^4)+row(1:256),0))
お礼
何度も回答を頂き、有難うございました。 希望通りの処理ができ大変感謝しております。 今回の式に含まれる関数など覚え、今後活用したいと思います。 ありがとうございました。
- tinu 2000(@tinu2000)
- ベストアンサー率40% (147/366)
確認です。 > 例「1・2・3・○・5・○・○・8・~」 この例では、4行目は空白行になっていますか? 1・2・3・5・8・・・と詰まっていますか? > 列に「4」を追加すると、 空白の4行目に4と入力するのですか? 4行目を挿入して4と入力するのですか? 最大値はいくつですか? 4行目は空白行になっている。 空白行に4と入力する。 最大値は1000とする。 と仮定しての方法ですが。 B列に1から1000まで連番を付ける。 C1セルに「=IF(A1=B1,"",1)」を入力して、C1000セルまで下へコピー D1セルに「=MATCH(1,C1:C1000,0)」を入力する。 これで常にD1セルに次最小値を常に表示することになります。 B列、C列は表示しないと設定しても良い。 B、C、D列は使っていない右端の列を使うなどご自分の実情に合わせて下さい。 ではでは。
お礼
詳しい説明ありがとうございます。 説明不足で失礼しました。 追加する「4」は空白になっておりません。行挿入します。 最大値は256です。 対象の数列はソートされていません。 よろしくお願いします。
- ASIMOV
- ベストアンサー率41% (982/2351)
1.その数列は、小さい順に並んでいるのでしょうか? 2.例では「行」が空いている様なイメージですが、どうなんでしょう?
お礼
説明不足で失礼しました。 追加する「4」は空白になっておりません。行挿入します。 最大値は256です。 対象の数列はソートされていません。 よろしくお願いします。
お礼
丁寧な説明有難うございます。 関数は得意でないのですが、理解することができました。 そこで、さっそく記述してみましたが、この処理で管理するナンバーとはIPアドレスなのです。 IPアドレスは「192.168.0.1」のようになっており数式が使用不可でした。 説明不足ですみません。 このような状況の回避方法はありますでしょうか? よろしくお願いします。