文字列の単語あたりの文字数をカウントして、値をコンマで区切って返す方法はありますか?

3
Stewart Gray 2019-11-02 17:11.

私はセル内の文字列のリストを持っています-それらの数千-そして私は単語ごとに文字を計算する必要がありますが、単語で区切られています-できれば1つの迅速な式で...

例:1。「ハンドル付きブラックカップ」>式必要> 5,3,4,6

  1. 「巨大なクマの像」>必要な式> 5,4,6

単語を列に数えるために非常に非効率的な方法でマクロ化された繰り返しのタスクにこれが必要です(そのうちの20を使用する必要があります)が、これに取り組む必要があります。

通常、スペースを数え、ネストされたserach()式を重ねて構造を分解し、文字が個々の単語を数えます...

あるいは、マクロを使用してスペースをコンマに置き換え、テキストを列に使用することもできますが、それでも、探しているもののカウントプロセスが長くなります。

私たちは明らかに=LEN(A1)-LEN(SUBSTITUTE(A1," ",""))単語のスペースを数えるために使用します

次に、現在、=SEACRH()関数を=MID()関数(およびいくつかの奇妙な数字)と組み合わせて使用して、各単語を独自の個別のセルに表示します

その後=LEN、もう一度すべての個々の単語にぶつかる-非常に長い間

これを行うためのより短い方法を見つけたいと思っていますが、誰かが私を間違っていると証明できることを願って、式だけでそれを行うのに十分な動的な方法がないかもしれないと感じています!

3 answers

4
JvdV 2019-11-03 01:33.

Excelのバージョンに応じてさまざまなオプションがあります。


オプション1: TEXTJOIN

あなたはTEXTJOIN機能を探していると思います。これは、より新しいバージョンのExcel(ドキュメントへのリンクを参照)でのみ使用でき、次のように機能する可能性があることに注意してください。

の式B1

=TEXTJOIN(",",TRUE,LEN(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")))

注:これは配列数式であり、を使用して入力する必要がありますCtrlShiftEnter

上記のキーコンボを使用する必要がないようにするために、INDEX:を含めることができます。

=TEXTJOIN(",",TRUE,INDEX(LEN(FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s")),))

追加情報:

FILTERXML

この関数は(ドキュメントに従って)2つの必須の引数を取ります:

  • 有効なXMLの文字列
  • 有効なXPathの文字列

セルから要素(単語)の配列を返したいのでSUBSTITUTE、終了タグ(</..>)のスペース<..>に入れて、文字列の先頭にある開始タグ()と、文字列の先頭にある別の終了タグと連結する必要があります。終わり。

XMLなぜ<?><?>機能するのか、そしてそれが意味するのかについては、タグの説明に頼る必要があります。私のテストでは、最終的に同じ結果になる限り、文字を入れ替えたり、別の文字に置き換えたりできるXpathからです。同じ文字。誰かがこの問題についてのより良い説明でこの答えを補足することができれば素晴らしいでしょう。

その他のFILTERXML「トリック」については、こちらをご覧ください


TEXTJOIN

Office365サブスクライバーまたはExcel2019を所有している場合は、この機能を利用できます。(ドキュメントによると)少なくとも3つの必須の引数があります:

  • 空のテキスト文字列、二重引用符で囲まれた1つ以上の文字、または有効なテキスト文字列への参照である必要がある区切り文字。番号が指定されている場合、それはテキストとして扱われます。
  • 2番目の引数は、TRUEまたはのいずれかFALSEを保持でき、空の値を除外/含めるかどうかを決定します
  • 3番目の引数は、結合されるテキストアイテムです。テキスト文字列、またはセルの範囲などの文字列の配列。

ここで、2つの関数を結合して、でFILTERXML使用できる配列を返すことができますTEXTJOIN


INDEX + LEN

これらの関数の使用法を一緒に説明する必要があります。私はそれ自体では多くの紹介が必要だLENINDEXは思いませんが、一緒にすると非常にうまく機能します。本来、暗黙の交差と呼ばれる力があり、LEN値の配列を関数に渡すときに、この場合はFILTERXML。を介して値の配列を返さないようにします。

通常は、次のキーの組み合わせを使用してこのメ​​カニズムを無効にCtrlShiftEnterCSEます。

ここで、INDEXこの暗黙の共通部分を無効にしLENて配列を返すことができるようにしCSE、数式の必要性を排除します。INDEXこの「力」を持つ機能のひとつです。暗黙の交差に関するより詳細な説明は、ここにあります。


オプション2:UDF

アクセスがTEXTJOINない場合は、UDFの使用を確認する必要があると思います。おそらく以下のようになります。

Function TEXTJOIN(rng As Range) As String
    TEXTJOIN = Join(Application.Evaluate("LEN({""" & Join(Split(rng, " "), """,""") & """})"), ",")
End Function

あなたはこれを次のB1ように呼ぶことができます:=TEXTJOIN(A1)


追加情報:

UDFは、連携して機能する3つの主要なメカニズムで構成されています。

JOIN

この関数は2つのパラメーターを取り、最初のパラメーターが必要です。

  • 最初のパラメーターは、部分文字列を含む1次元配列です
  • 2番目の(オプションの)パラメーターは、返された文字列の部分文字列を区切るために使用される文字列文字です。省略した場合、スペース文字( "")が使用されます。区切り文字が長さゼロの文字列( "")の場合、リスト内のすべての項目は区切り文字なしで連結されます。

関数は文字列値を返します


SPLIT

この関数は文字列を受け取り、指定された文字/部分文字列で区切ります。次の引数を取ります。

  • 1番目:部分文字列と区切り文字を含む必須の文字列式。式が長さゼロのstring( "")の場合、Splitは空の配列、つまり要素もデータもない配列を返します。
  • 2番目:部分文字列の制限を識別するために使用される文字列文字であるオプションの区切り文字。省略した場合、スペース文字( "")が区切り文字と見なされます。区切り文字が長さゼロの文字列の場合、式の文字列全体を含む単一要素の配列が返されます。
  • 3番目:オプションの制限、返される部分文字列の数。-1は、すべての部分文字列が返されることを示します。
  • 4番目:Compareもオプションで、部分文字列を評価するときに使用する比較の種類を示す数値です。値については、「設定」セクションを参照してください。

この場合、最初の2つの引数のみが必要になります。


Application.Evaluate

これは、アイテム/セルをループすることなく、返された値の配列をプルするために使用できる最も便利なメカニズムの1つです。関数に大きな配列数式を入力すると遅くなる可能性がありますが、この場合は問題ありません。この関数は、Microsoft Excelの名前をオブジェクトまたは値に変換し、数式を渡すと、結果が返されます。この特定のケースでは、配列を返します。

1
ashleedawg 2019-11-03 00:28.

私はあなたが探している最終結果、またはあなたがVBAソリューションで大丈夫かどうかについて完全に明確ではありませんが、これは私の解釈です:

Function lengths(txt As String) As String
  Dim wrd
  For Each wrd In Split(txt)
    If lengths <> "" Then lengths = lengths & ","
    lengths = lengths & Len(wrd)
  Next wrd
End Function

コードをVBAモジュールに貼り付けてから、たとえば、A1含まれているBlack Cup With Handle場合は別のセルに貼り付けて、=length(A1)を返し5,3,4,6ます。

0
Error 1004 2019-11-03 00:33.

VBAコードを使用する場合は、次の方法を試すことができます。

Option Explicit

Sub test()

    Dim arr As Variant
    Dim str As String
    Dim i As Long, j As Long, LastRow As Long

    With ThisWorkbook.Worksheets("Sheet1")

        LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row

        For i = 1 To LastRow

            str = .Range("A" & i).Value

            arr = Split(str, " ")

            For j = LBound(arr) To UBound(arr)
                .Cells(i, j + 3).Value = Len(arr(j))
            Next j

        Next i

    End With

End Sub

結果:

Related questions

MORE COOL STUFF

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは3日間一緒に夫と一緒に寝て、25年経ってもまだ夫と結婚しています

ケイト・ブランシェットは、夫に会ったとき、典型的な交際のアドバイスに逆らいました。

マイケルシーンが非営利の俳優である理由

マイケルシーンが非営利の俳優である理由

マイケルシーンは非営利の俳優ですが、それは正確にはどういう意味ですか?

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

ホールマークスターのコリンエッグレスフィールドがRomaDramaLiveでスリル満点のファンと出会う![エクスクルーシブ]

特徴的なスターのコリン・エッグレスフィールドは、RomaDrama Liveでのスリル満点のファンとの出会いについて料理しました!加えて、大会での彼のINSPIREプログラム。

「たどりつけば」をオンラインでストリーミングできない理由

「たどりつけば」をオンラインでストリーミングできない理由

ノーザンエクスポージャーが90年代の最も人気のある番組の1つになった理由を確認するには、Blu-rayまたはDVDプレーヤーをほこりで払う必要があります。

バイオニック読書はあなたをより速く読むことができますか?

バイオニック読書はあなたをより速く読むことができますか?

BionicReadingアプリの人気が爆発的に高まっています。しかし、それは本当にあなたを速読術にすることができますか?

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖:アクセスは簡単ではありませんが、ハイキングする価値があります

ドミニカのボイリング湖は、世界で2番目に大きいボイリング湖です。そこにたどり着くまでのトレッキングは大変で長いですが、努力する価値は十分にあります。

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

私たちの水をきれいに保つのを助けるためにあなたの髪を寄付してください

サロンからのヘアトリミングや個人的な寄付は、油流出を吸収して環境を保護するのに役立つマットとして再利用できます。

ホワイトハウスの最も記憶に残る結婚式を見てください

ホワイトハウスの最も記憶に残る結婚式を見てください

過去200年以上の間にホワイトハウスで結婚したのはほんの数人です。彼らは誰でしたか、そしてそこで結婚式を獲得するために何が必要ですか?

アトランタのドナ・ブラジル:「私があなたに私の話をするとき私を踏まないでください」

アトランタのドナ・ブラジル:「私があなたに私の話をするとき私を踏まないでください」

2017年11月19日にアトランタで開催されたドナブラジルとモーアイボリー(ダグスミスフォトグラフィー)ドナブラジルを見逃すことはありません。

彼らは北朝鮮から脱出した亡命者の胃の中に奇妙な寄生虫を見つけました

彼らは北朝鮮から脱出した亡命者の胃の中に奇妙な寄生虫を見つけました

画像:ゲッティ陰謀愛好家は新しくてエキサイティングなディスカッション資料を持っています:国境を越えて韓国に5発撃たれた北朝鮮の脱北者は寄生虫でいっぱいで、そのうちの1人は南のメディアは、寄生虫を持った北朝鮮の脱北者を見つけることは珍しいことではないと報告している、実際、男性が30以上のタイプを持っていたケースがあった。

パニッシャーの第2話は、複雑な陰謀の網を織り交ぜています

パニッシャーの第2話は、複雑な陰謀の網を織り交ぜています

写真:パニッシャー(Netflix)これらのMarvel Netflixが愛していることが1つあるとすれば、それは複雑な政府や企業の陰謀です。そして、なぜこれらのショーがそのルートを選択するのかを理解するのは簡単です。

最新のBoseヘッドフォンは音楽を聴くためのものではなく、パートナーの鼻を鳴らすためのものです。

最新のBoseヘッドフォンは音楽を聴くためのものではなく、パートナーの鼻を鳴らすためのものです。

あなたのパートナーはチェーンソーのように詮索し、あなたを眠らせませんか?あなたのパートナーはあなたがチェーンソーのように詮索したと主張しますが、あなたが詮索しないので彼らは彼の想像ですか?あなたのケースが何であれ、Bose(はい、ハイエンドオーディオ機器のメーカー)はあなたのために何かを持っています。それらはBoseSleepbudsと呼ばれます。

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya Wishes Boyfriend Tom Holland Happy Birthday with Cuddly Photo: He 'Makes Me the Happiest'

Zendaya shared a sweet photo in honor of boyfriend Tom Holland's 26th birthday Wednesday

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

小さな女性:脳卒中を患った後に病院から解放されたアトランタのジューシーな赤ちゃん:「まだ癒し」

シーレン「Ms.JuicyBaby」ピアソンは、先月脳卒中で入院した後、「もう一度たくさんのことをする方法を学ばなければならない」ため、言語療法を受けていることを明らかにしました。

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

エマストーンは彼女のクリフサイドマリブビーチハウスを420万ドルでリストアップしています—中を見てください!

オスカー受賞者の世紀半ばの家には、3つのベッドルーム、2つのバス、オーシャンフロントの景色があります。

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、母乳育児の経験の中で、彼女は「本当に、本当に落ち込んでいる」と言います

ジーニー・メイ・ジェンキンスは、生後4か月の娘、モナコに母乳育児をしていると語った。

投資ノート:Bioscout AU$300万シード

投資ノート:Bioscout AU$300万シード

Bioscoutは、農家を運転席に置くという使命を負っています。Artesian(GrainInnovate)やUniseedと並んで、最新のシードラウンドでチームを支援できることをうれしく思います。問題真菌症による重大な作物の損失は、農民にとって試練であることが証明されています。

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

リトルマーケットリサーチ1| 2022年のクイックグリンプス遠隔医療市場

遠隔医療は、パンデミック後の時代では新しいものではなく、時代遅れの分野でもありません。しかし、業界を詳しく見ると、需要と供給の強力な持続可能性と、米国で絶え間ない革命となる強力な潜在的成長曲線を示しています。

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

スタートアップ資金調達環境:タイのスタートアップエコシステムの次は何ですか?

2021年は、世界的なベンチャーキャピタル(VC)の資金調達にとって記録的な年でした。DealStreetAsiaによると、東南アジアも例外ではなく、この地域では年間で記録的な25の新しいユニコーンが採掘されました。

ムーアの法則を超えて

ムーアの法則を超えて

計算に対する私たちの欲求とムーアの法則が提供できるものとの間には、指数関数的に増大するギャップがあります。私たちの文明は計算に基づいています—建築と想像力の現在の限界を超える技術を見つけなければなりません。

Language