1
mozilla-nss-3.11.4-0.7

gdb-10.12-1.5.2

glibc-dcc-atv-1.0.3-10.6

次のBCDセルでも分離したい

mozilla-nss      3.11.4       0.7

gdb              10.12        1.5.2

glibc-dcc-atv    1.0.3        10.6

現在、 left 、 right 、および find 関数を使用してそれを実行できますが、うまく機能しません

私が使う

LEFT(B33,FIND(".",B33)-2) =B cell

RIGHT(B33,FIND(".",B33))   =C Cell

RIGHT(D33,FIND("-",D33)-1)  = D Cell

答えは正しくありません 誰でも機能を修正するのを手伝ってくれます ありがとう

4

2 に答える 2

2

ここでの作業を困難にする重要なポイント - 文字列の最後の 2 つのハイフンをセパレータとして使用し、残りはすべてそのままにする必要があります。そのような場合には、 ARRAY 数式が最適です。私の解決策は以下の通りです:

  1. 名前 A1 から始まる 6 列: 文字列 | MAX "-" | 2番目の MAX "-" | Str1 | Str2 | Str3
  2. から始まる列 A に値を入力しますA2
  3. B2 ( MAX "-" ): 式を入力しますが、通常の代わりに+ +を=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0))押します。これにより、ARRAY 式が定義され、その周りに括弧が表示されます (ただし、手動で入力しないでください!)。CTRLSHIFTENTERENTER{}
  4. C2 ( 2番目の MAX "-" ): 式を入力し、もう一度+ +=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)*IF(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)=MAX(IFERROR(SEARCH("-",$A2,ROW(INDIRECT("1:"&LEN($A2)))),0)),0,1))を押します。CTRLSHIFTENTER

したがって、文字列内の最後の 2 つのハイフンの位置を取得します。残りは簡単です - 通常の LEFT / MID / RIGHT のもの:

  1. D2: =LEFT($A2,$C2-1), ENTER.
  2. E2: =MID($A2,$C2+1,$B2-$C2-1), ENTER.
  3. F2: =RIGHT($A2,LEN($A2)-$B2), ENTER.
  4. オートフィルB:F

一時的な列 B:C が不要な場合 - B:C のコンテンツの D:F でそれらへの参照を置き換える必要があります (つまり$A2=LEFT($A2,A2 の実際の数式に置き換えます)。ただし、これにより、非常に複雑な ARRAY 数式が作成され、依然として機能しますが、作成者でも翌日にはわかりにくい)

上記のソリューションについては、おそらく改善または単純化される可能性がありますが、メガバイトの統計データを分析しなければならなかった時代から、そのような構造にかなり慣れているROW...INDIRECTので、LEFT / RIGHT を作成するのと同じくらい簡単です。とにかく、それはうまくいくようです。

便宜上、私のサンプル ファイルを共有します: https://www.dropbox.com/s/p49x32t3a0igtby/StringHyphensSeparate.xlsx

お役に立てば幸いです)

追加 - 最後の 2 つのハイフンを見つけるための 2 つの単純化されたソリューション(残りの手順は上記と同じです):

  • より単純な ARRAY 数式:

    • B2 ( MAX "-" ): 式を入力しますが、通常の代わりに+ +を=MAX(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0))押します。これにより、ARRAY 式が定義され、その周りに括弧が表示されます (ただし、手動で入力しないでください!)。CTRLSHIFTENTERENTER{}
    • C2 ( 2番目の MAX "-" ): 式を入力し、もう一度+ +=LARGE(IF(MID($A2,ROW(INDIRECT("1:"&LEN($A2))),1)="-",ROW(INDIRECT("1:"&LEN($A2))),0),2)を押します。CTRLSHIFTENTER
  • 関数を使用した正規の数式SUBSTITUTE:

    • B2 ( MAX "-" ): 式=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))))を入力しENTERます。
    • C2 ( 2番目の MAX "-" ): 式=SEARCH("@",SUBSTITUTE($A2,"-","@",LEN($A2)-LEN(SUBSTITUTE($A2,"-",""))-1))を入力しENTERます。

解決の鍵は、マッチの特定のインスタンスのみ、つまり 2 番目または 3 番目のハイフンのみをSUBSTITUTE置換できることです。ハイフンの総数は、次の式によって再び決定されます: 元の文字列の長さ MINUS すべてのハイフンが空の文字列に置き換えられた文字列の長さ: . ここでもう 1 つのトリック - 元の文字列をそのままにしておく必要がありますが、中間的な解決策のためにそれを使って何かをしても構いません! したがって、ハイフンを に置き換えてから、一時文字列で検索します。SUBSTITUTELEN($A2)-LEN(SUBSTITUTE($A2,"-","")@@

上記の解決策はすべて機能しています。好きなものを選択してください/よりよく理解してください。同じタスクに対して2つの異なるアプローチがあるため、配列数式の理解にも役立つことを願っています。

サンプル ファイルを更新して、最後の 2 つの例 + 結果のメガフォーミュラを中間ステップなしで含めました。リンクは同じで、上にあります。幸運を!

于 2013-01-22T07:59:55.710 に答える
2

これは完全ではない解決策です:

  1. 検索と置換を実行して、区切り記号ではないダッシュを取り除きます。たとえば、「mozilla-nss」を「mozillanss」に置き換えます。
  2. A1 から始まる列 A に値を入力します。
  3. B1 に入力します。=LEFT(A1,FIND("-",A1)-1)
  4. C1 に入力します。=SUBSTITUTE(A1,B1,"")
  5. D1 に次のように入力します。=SUBSTITUTE(LEFT(C1,FIND("-",C1,2)),"-","")
  6. E1 に入力します。=SUBSTITUTE(SUBSTITUTE(C1,D1,""),"-","")
  7. 列 A のすべての値の方程式を埋めます。
    編集: 次の行を追加しました:
  8. 「mozillanss」を「mozilla-nss」に置き換えます。

あなたの答えは列 B、D、および E にあります。

于 2013-01-21T19:09:16.500 に答える