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

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

「水曜日」シーズン1の中心には大きなミステリーがあります

「水曜日」シーズン1の中心には大きなミステリーがあります

Netflixの「水曜日」は、典型的な10代のドラマ以上のものであり、実際、シーズン1にはその中心に大きなミステリーがあります.

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ボディーランゲージの専門家は、州訪問中にカミラ・パーカー・ボウルズが輝くことを可能にした微妙なケイト・ミドルトンの動きを指摘しています

ケイト・ミドルトンは、州の夕食会と州の訪問中にカミラ・パーカー・ボウルズからスポットライトを奪いたくなかった、と専門家は言う.

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンがハリー・スタイルズとオリビア・ワイルドの「非常に友好的な」休憩が永続的であることを望んでいる理由

一部のファンが、オリビア・ワイルドが彼女とハリー・スタイルズとの間の「難しい」が「非常に友好的」な分割を恒久的にすることを望んでいる理由を見つけてください.

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする 

エリザベス女王の死後、ケイト・ミドルトンはまだ「非常に困難な時期」を過ごしている、と王室の専門家が明らかにする&nbsp;

エリザベス女王の死後、ケイト・ミドルトンが舞台裏で「非常に困難な時期」を過ごしていたと伝えられている理由を調べてください.

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セントヘレナのジェイコブのはしごを登るのは、気弱な人向けではありません

セント ヘレナ島のジェイコブズ ラダーは 699 段の真っ直ぐ上る階段で、頂上に到達すると証明書が発行されるほどの難易度です。

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

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

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

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

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

パンデミックは終わったかもしれないが、Covid-19 は終わっていない

2021 年 6 月 8 日にニューヨーク市で開催された covid-19 パンデミックで亡くなった人々の命を偲び、祝うために、ネーミング ザ ロスト メモリアルズが主催するイベントと行進の最中に、グリーンウッド墓地の正門から記念碑がぶら下がっています。週末、ジョー・バイデン大統領は、covid-19 パンデミックの終息を宣言しました。これは、過去 2 年以上にわたり、公の場でそうするための長い列の中で最新のものです。

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

デビル・イン・オハイオの予告編は、エミリー・デシャネルもオハイオにいることを明らかにしています

オハイオ州のエミリー・デシャネル みんな早く来て、ボーンズが帰ってきた!まあ、ショーボーンズではなく、彼女を演じた俳優. エミリー・デシャネルに最後に会ってからしばらく経ちました.Emily Deschanel は、長期にわたるプロシージャルな Bones の Temperance “Bones” Brennan としてよく知られています。

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

ドナルド・トランプはFBIのマー・ア・ラーゴ襲撃映像をリリースする予定ですか?

どうやら、ドナルド・トランプに近い人々は、今月初めにFBIによって家宅捜索された彼のMar-a-Lago財産からの映像を公開するよう彼に勧めています. 前大統領はテープを公開するかどうかを確認していませんが、息子はフォックス・ニュースにそうなるだろうと語った.

Andor は、他の Star Wars ショーから大きな距離を置きます。

Andor は、他の Star Wars ショーから大きな距離を置きます。

アンドールの一場面。数十年前、ジョージ・ルーカスがスター・ウォーズのテレビ番組を制作するのを妨げた主な理由は、お金でした。

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、彼らが子供たちと行っているスパイをテーマにした活動を共有しています

ケイト・ミドルトンとウィリアム王子は、子供向けのパズルの本の序文を書き、ジョージ王子、シャーロット王女、ルイ王子と一緒にテキストを読むと述べた.

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

事故で押しつぶされたスイカは、動物を喜ばせ水分補給するために野生生物保護団体に寄付されました

Yak's Produce は、数十個のつぶれたメロンを野生動物のリハビリ専門家であるレスリー グリーンと彼女のルイジアナ州の救助施設で暮らす 42 匹の動物に寄付しました。

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

デミ・ロヴァートは、新しいミュージシャンのボーイフレンドと「幸せで健康的な関係」にあります: ソース

8 枚目のスタジオ アルバムのリリースに向けて準備を進めているデミ ロヴァートは、「スーパー グレート ガイ」と付き合っている、と情報筋は PEOPLE に確認しています。

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

Plathville の Kim と Olivia Plath が数年ぶりに言葉を交わすことへようこそ

イーサン プラスの誕生日のお祝いは、TLC のウェルカム トゥ プラスビルのシーズン 4 のフィナーレで、戦争中の母親のキム プラスと妻のオリビア プラスを結びつけました。

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

仕事の生産性を高める 8 つのシンプルなホーム オフィスのセットアップのアイデア

ホームオフィスのセットアップ術を極めよう!AppExert の開発者は、家族全員が一緒にいる場合でも、在宅勤務の技術を習得しています。祖父や曽祖父が共同家族で暮らしていた頃の記憶がよみがえりました。

2022 年、私たちのデジタル ライフはどこで終わり、「リアル ライフ」はどこから始まるのでしょうか?

20 年前のタイムトラベラーでさえ、日常生活におけるデジタルおよびインターネットベースのサービスの重要性に驚くことでしょう。MySpace、eBay、Napster などのプラットフォームは、高速化に焦点を合わせた世界がどのようなものになるかを示してくれました。

ニューロマーケティングの秘密科学

ニューロマーケティングの秘密科学

マーケティング担当者が人間の欲望を操作するために使用する、最先端の (気味が悪いと言う人もいます) メソッドを探ります。カートをいっぱいにして 3 桁の領収書を持って店を出る前に、ほんの数点の商品を買いに行ったことはありませんか? あなたは一人じゃない。

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

地理情報システムの日: GIS 開発者として学ぶべき最高の技術スタック

私たちが住んでいる世界を確実に理解するには、データが必要です。ただし、空間参照がない場合、このデータは地理的コンテキストがないと役に立たなくなる可能性があります。

Language