3

次のように、セミコロンで区切られた文字列として格納された任意の長さの配列を含む一連のセルがあり、長さは 1 から 65 エントリまでの範囲です。

  • pcmsh15(232);pcmsh16(232);pcmsh17(136);
  • pcmsh12(40);
  • pcmsh12(40);
  • pcmsh12(5);pcmsh15(20);

VBA を使用せずに Excel 2010 の括弧内の数値を合計する方法が必要です。これらは任意の長さの文字列であり、それぞれが独自のセルに含まれていることに注意してください。

現在、括弧内の数値を合計する VBA 関数を作成しましたが、スプレッドシートの速度が低下しています。Excel の SUBSTITUTE 関数を使用して、セミコロンで区切られた配列を Excel の内部配列形式に似たものに変換できることはわかっています。

="{"&SUBSTITUTE([@[data]],";",",")&"}"

残念ながら、Excel はそれを SUM または COUNTIF の配列として解析せず、文字列としてのみ解析します。私が見つけた1つの回避策は、文字列形式の配列でセルを参照する名前付き範囲を作成しますが、セルにはこれらの配列が任意の数あるため、すべてのセルに名前を付けることができません。

「純粋な」Excel関数でこのようなことは可能ですか?

4

1 に答える 1

2

これは実際に VBA を使用しなくても実行できます。その方法はちょっとばかげていますが。しかし、ただの楽しみのために...

セルB4に、「解析」したい文字列の 1 つを入れます。

B4:  pcmsh15(232);pcmsh16(232);pcmsh17(136);

次に、示されたセルに次の数式を入力します。

B6:  =SUBSTITUTE(B4,"pcmsh", """dummy")
B8:  =SUBSTITUTE(B6,"(",""";")
B10: =SUBSTITUTE(B8,")","")
B12: =MID(B10, 1, LEN(B10)-1)
B14: ="{"&B12&"}"

これにより、開始テキストが有効な Excel 配列のテキスト表現に変換されます。

B14: {"dummy15";232;"dummy16";232;"dummy17";136}

次のトリックを使用すると、Excel でその文字列を評価して実際の配列を返すことができます。という名前の式を作成しますeval_leftC14名前付き式を作成するときは、セルが選択されていることを確認してください。

=EVALUATE(B14)

式は相対参照を使用することに注意してください。そのため、 以外のセルからその名前を使用すると、がすぐ左側のセルに変更されているC14ことがわかります。B14

EVALUATEこれは、文字列を受け取り、その文字列が表す値を返す古い Excel 4 マクロ関数を使用します。これで cell に最終式を入れることができますC14:

C14: =SUM(eval_left)

は数値以外の文字列を無視するためSUM、VBA を使用せずに必要な答えが得られます。(ただし、 を使用しているため、マクロの警告は引き続き表示されますEVALUATE。)

私が言ったように、これはただの楽しみのための好奇心だと思います。このような作業には VBA を使用する方がはるかに優れています。

編集:

万が一、実際にこのようなことをしたいと思った場合、EVALUATE処理できる長さの制限に遭遇することになります。「ダミー」などを使用せずに、長い文字列を65未満の値に切り刻む必要がありますが、それでも実行可能です。

于 2011-07-05T19:41:34.020 に答える