
次のテンプレートの xls 列があります:
Model : QE85Q80T,Diagonala cm / inch : 216 cm / 85 inch,Smart TV : Da,Format : Ultra HD 4K,Tip ecran : QLED,Rezolutie (pixeli) : 3840 x 2160,Tuner Digital : Da (DVB-T2 / C / S2) x 2,Difuzor integrat : 60 W,Wireless : Da,Ethernet : Da,Iesire audio digitala (optica) : x 1,CI (Slot) : PLUS,USB 2.0 : x 2,HDMI : x 4,Culoare : Negru,Putere consumata (W) : 257,Dimensiuni cu stand (mm) : 1892.8 x 1163.1 x 338.8,Greutate (Kg) : 50.1
変数に注意してください: 「対角 cm / インチ」、「スマート TV」、「フォーマット」など...
それらはすべて異なる値を持つことができます。
私が達成しようとしているのは、別のセルに「対角線 cm / インチ :「そして最初に」、" - この場合、値は "216 cm / 85インチ「」。
別のセルにも同じことが言えます。値は「スマートテレビ :「そして最初に」、「 - 値は「ダ「残りも同様です...」
Google で何度も検索した結果、次の式が見つかりました:
=MID(F2,検索("対角線 cm / インチ :"、F2)+3、検索("、",F2)-検索("対角線 cm / インチ :"、F2)-4)
問題は、何も返ってこないことです。
何が間違っているのでしょうか?
答え1
答え2
まあ、これは醜いですが機能しますが、これがあなたのニーズにどのように適応するかはわかりません。参照があれば適応できると思います。とにかく、これが式です:
=MID(B2,(SEARCH("Diagonala cm / inch :",B2)+LEN("Diagonala cm / inch :")),(SEARCH(",",B2,SEARCH("Diagonala cm / inch :",B2))-(SEARCH("Diagonala cm / inch :",B2)+LEN("Diagonala cm / inch :"))))
そして、私がそれを思いついた方法は次の通りです:
基本的に、この式は
=mid(b2,39,17)
答え3
何を使用するかについては、おそらく次のようなアプローチが考えられます。
=LET(SearchCell,A1, StartingString,"Diagonala cm / inch : ", EndingString,",", MID(SearchCell, FIND(StartingString,SearchCell) + LEN(StartingString), FIND(EndingString,SearchCell,1+FIND(StartingString,SearchCell)) - (FIND(StartingString,SearchCell)+LEN(StartingString)) ) )
(私は、文字列の長さをハードコーディングしないようにIsolated
を使用するのが好きですLEN()
。もちろん、誰でもそれを知っているので問題にはなりませんが、いわばそこで止まってしまい、基本的な数式を書いてしばらく使用した後に達成したいと思われるより一般的なソリューションに簡単に拡張することはできません。可能な場合はアップグレードを支援する必要があります!)
このアプローチでは、目的の結果の開始点、終了点、および入力文字列から必要な文字数を見つけます。したがってFIND()
、検索文字列の長さが追加されます。また、FIND()
そのポイントの後の「,」を検索します。開始点に 1 を追加してそこからFIND()
開始し、前のカンマによって混乱しないようにする必要があります。
それは単純明快で、いわゆる「醜い」ものです... まあいいでしょう... アップグレードには、LET()
関数を使用します。これに夢中になる人もいるかもしれませんが、検索するセル、開始文字列、終了文字列など、数式への入力を変更する場合にのみ使用することをお勧めします。そうすれば、検索するセルの変更は、数式で使用される 6 か所ではなく 1 か所でのみ発生するため簡単です。また、計算は 6 回ではなく 1 回なので、速度も向上します。2 つの境界文字列も最初にあるため編集が簡単で、数式を簡単に調整して、要求された 2 番目の検索やその他の検索を実行できます。入力セルを使用して境界の文字列を含めることも非常に簡単になります。
LET()
ここで を多用すると、数式の動作の理解が妨げられると思いますが、他の脳は異なる方法で動作し、そのコンポーネントLet()
をセル スコープの名前付き範囲 (Excel 参照、プログラマーはこれを変数と呼びます) の形式に配置すると、動作する数式が最小限のものになります。これにより数式の全体的なサイズが縮小されるのであれば、おそらくそうすることをお勧めしますが、この場合はそうはなりません。しかし、実際には、他の人にとっては逆の意味になります。彼らにとっては、なぜそうしないのでしょうか。
この問題を読んでいる人は誰でも、実際に上記の方法、つまり議論されていることを実現する方法を求めていると思います。しかし、実際に本当に尋ねられているのは、Google で見つかった指定された式がなぜ失敗したのかということです。
基本的に、正しい開始を探さないか、取得する文字列の正しい長さを計算しないからです。最初のSEEARCH()
例: 境界文字列の開始を見つけて、それに... 3... を追加します。数式のロジックは基本的にこれらの回答で使用されているものと同じであることを考慮すると、何の理由もありません。MID()
完全な境界文字列の後に文字列の構築を開始する必要があります。その文字列は 3 文字ではなく 22 文字の長さなので...次に、 の 3 番目のパラメーター (MID()
返す文字列の長さ) が間違っています。境界文字列の前のカンマを見つけて、そこから実際に負の長さを返すように作業し、エラーを返します。他の入力データでは実際の戻り値が返される可能性がありますが、完全に間違った入力選択を使用しているため、正しい戻り値は返されません。したがって、これらの問題を修正すると、機能する数式が得られるはずです。良いアプローチですが、実装はあまり良くありません。しかし、良いアプローチを見つけることはほとんどの場合より難しいことです! その貧弱なMID()
関数のパラメーターとして生成される数値につながる詳細の選択方法を再考する必要があるだけです。