
申し訳ありませんが、Excel にはあまり詳しくないのですが、私が実現しようとしているのは、sheet1 のセル R7 にある次の vlookup です。
=VLOOKUP(F2,config!F2:H20,3,FALSE)
部屋番号を表示します。例:1
ただし、列に部屋がすでに存在する場合は、列にまだ存在しない別の値を VLOOKUP で検索する必要があります。
(sheet1 セル R8 にある) を使用して、列に存在するかどうかを確認します。
=COUNTIF(E2:E20,R7)>0
したがって、このクエリが FALSE の場合は、上記の VLOOKUP を使用しても問題ありませんが、TRUE が返された場合は、FALSE が見つかるまで検索を続ける必要があります。
シート1:
構成シート:
これが意味を成すといいのですが
答え1
つまり、まだ予約されていない部屋のリストが欲しいということのようです。そこから、いくつかの便利な基準で 1 つを選択します。
私はあなたが試みているのとは違った方法でそれに取り組みます。私なら:
利用可能なすべての部屋のリストをどこかに作成します。おそらく 1 ~ 100 の単純なリストですが、もっと複雑なリストかもしれません。ヘルパー シートの表にリストを作成し、非表示にするかしないかを選択します。名前付き範囲として作成すると便利ですが、目に見えないため、ユーザーが簡単に「変更」できます。
これを取得して、コミットされた列 (Sheet1 の「Room」) にある部屋を削除します。
残りの部屋のうちどの部屋をコミットするかを選択する方法を選択します。
以下では、C1:C12 に部屋 1 ~ 12 のリストを作成します。すでにコミットされている部屋のリストは A1:A4 にあります。これらの範囲は、作成したすべての部屋のリストと Sheet1 の部屋列を使用して、適切に変更します。次に、「存在する」リストの各部屋と「コミット済み」リストの各部屋を比較します。
その最も内側のレベルでは、IF()
比較が行われます。TRUE ""
(すでに予約されている) の部屋の結果があります。FALSE の結果を与えましたが、実際にはそれは問題ではなく、1 年後にスプレッドシートを更新する際に引数が欠落していても困惑しないのであれば省略できます。多くの人が困惑すると思うので、入れました。しかし、それが混乱を招くと思う人もいるでしょうから、「好みに合わせて調整してください」。
これが問題にならない理由は、テストがまだコミットされていない部屋に対してエラーを生成して停止し、FALSE 結果に到達することはないからです。実際に必要なのは、エラーを出したすべての部屋です。そこで、IFERROR()
エラーをキャッチして、テストされている値など、役に立つ結果を返すために、これを でラップします。その結果、大量の空白とコミットされていない部屋が大量に生成されます。
以前は、空白の数を 1 つに減らしていましたUNIQUE()
。これで、未確定の部屋のリストと空白ができました。持っていない場合UNIQUE()
(質問は 2019 年のものであり、投稿者は持っている場合も持っていない場合もありますが、以前のバージョンを持っている人は持っていないでしょう)、次の手順を少しだけ異なる方法で実行できます。
次に、SORT()
結果を -ed して順序付けしました。それが問題にならない場合、また「存在する」部屋のリストが最初から順序付けられている場合、必要ありません。ただし、空白は最後に配置されます。SORT()
関数がないためそれができない場合は、空白が最初になります。最後に配置することで、最初の「1 つの部屋を除くすべての部屋」を選択できるため、空白INDEX()
がなくなります。これは、最後の「1 つの部屋を除くすべての部屋」を選択して削除するよりも簡単です。理解しやすいです。特に難しいことではありませんが、より複雑であるため、1 年後には理解するのが難しくなります。
空白を 1 に減らすことができなかった場合は、COUNTA()
私が行っているように結果に対して を実行してそこから 1 を引くのではなく、COUNTA()
結果に対して を実行してそこからCOUNTA()
「コミットされた」部屋の を引きます。
単一列の入力を単一列の結果としてのみ必要とするため、 の列引数に「1」を使用することは、INDEX()
厳密には必要ではありません... 場合によっては。 ここで行っているように の形式を使用する場合ROW(1:xxx)
(2019 年などのため)、これは必要ありません。 しかし、今日これを実行して niceSEQUENCE()
関数を使用する場合は、間違いなく必要になります。 何らかの理由で、 の値にこれを使用する場合は、INDEX()
それが意味があるかどうかに関係なく、通常は他の値を指定する必要があります。
とにかく、これで、まだ「コミット」されていない部屋の順序付き (いずれにせよ) リストができました。行と列をINDEX()
使用して、別のリストをラップして選択するか、 「1」と数式を使用して残りの「コミット」されていない部屋をカウントすることもできます。おそらく、番号が最も小さい「コミット」されていない部屋を選択するには、 を使用するだけでしょう。または... まあ、アイデアはおわかりでしょう。方法はたくさんあります。部屋の使用をランダム化することが重要な場合は、適切な方法でランダム化します。そうでない場合は、簡単な方法でランダム化します。どのアイデアでも最適だと思います。「存在する」部屋のリストで、非連続的な方法で順序付けすることもできます。これを行う方法はたくさんあります。,1,1
RANDBETWEEN()
MIN()
RANDBETWEEN()
MIN()