問題タブ [excel-udf]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - XLL が UDF より遅いのはなぜですか?
XLL を使用してマクロを高速化しようとしてきましたが、XLL よりも UDF の方がはるかに高速です。
コード プロファイリングを含む一部のデータがそれを示しています
サブ Proc:module 1 反復のXLL時間11.64831 秒
サブ Proc:module 1 反復のUDF時間4.25986 秒
これは、変換した 2 つの UDF で発生し、ファクターは約 2 倍または 3 倍遅くなります。たとえば、このための XLL 関数は次のとおりです。
UDF関数は
両方とも、データとセル間の空白を使用して Range(A1:A701) に対してテストされました。どちらも期待どおりに機能しますが、XLL の方が遅いだけです。
excel - 関数が長すぎますが、必要です。VBA で実行できますか?
深刻な知識不足のため、私は計算を行うためにとてつもなく長い関数を作成しました。問題は、Excel には長すぎるということです。自分の関数を参照する VBA で新しい関数を作成する方法をオンラインで調べてみました。私はこれに非常に迷っており、どんな助けも素晴らしいでしょう. この関数は、ここに投稿するには面倒すぎます (30k 文字の長さです)。
では、ここで関数の一部を示します: =+IF(ISERROR(IF(LEFT(C12,FIND(" ",C12,1))=$C$2,SUMPRODUCT(P12:S12,Selection!$B) $4:選択!$E$4),IF(LEFT(C12,FIND(" ",C12,1))=$C$3,SUMPRODUCT(P12:S12,選択!$B$5:選択!$E$5),IF (LEFT(C12,FIND(" ",C12,1))=$C$4,SUMPRODUCT(P12:S12,Selection!$B$6:Selection!$E$6),IF(LEFT(C12,FIND(" ", C12,1))=$C$5,SUMPRODUCT(P12:S12,選択!$B$7:選択!$E$7),IF(RIGHT(C12,LEN($C$6))=$C$6,SUMPRODUCT(P12 :S12,選択!$B$8:選択!$E$8),IF(RIGHT(C12,LEN($C$7))=$C$7,SUMPRODUCT(P12:S12,選択!$B$9:選択!$E $9),IF(RIGHT(C12,LEN($C$8))=$C$8,SUMPRODUCT(P12:S12,選択!$B$10:選択!$E$10),SUMPRODUCT(P12:S12,選択!$B $11:選択!$E$11)))))))),1,IF(LEFT(C12,FIND(" ",C12,1))=$C$2,SUMPRODUCT(P12:S12,選択!$B $4:選択!$E$4),IF(LEFT(C12,FIND(" ",C12,1))=$C$3,SUMPRODUCT(P12:S12,セレクション!$B$5:セレクション!$E$5),IF(LEFT(C12,FIND(" ",C12,1)) =$C$4,SUMPRODUCT(P12:S12,選択!$B$6:選択!$E$6),IF(LEFT(C12,FIND(" ",C12,1))=$C$5,SUMPRODUCT(P12:S12 ,選択!$B$7:選択!$E$7),IF(RIGHT(C12,LEN($C$6))=$C$6,SUMPRODUCT(P12:S12,選択!$B$8:選択!$E$8) ,IF(RIGHT(C12,LEN($C$7))=$C$7,SUMPRODUCT(P12:S12,選択!$B$9:選択!$E$9),IF(RIGHT(C12,LEN($C$8) )=$C$8,SUMPRODUCT(P12:S12,選択!$B$10:選択!$E$10),SUMPRODUCT(P12:S12,選択!$B$11:選択!$E$11)))))))) )SUMPRODUCT(P12:S12,選択!$B$8:選択!$E$8),IF(RIGHT(C12,LEN($C$7))=$C$7,SUMPRODUCT(P12:S12,選択!$B$9:選択!$E$9),IF(RIGHT(C12,LEN($C$8))=$C$8,SUMPRODUCT(P12:S12,選択!$B$10:選択!$E$10),SUMPRODUCT(P12:S12,選択!$B$11:選択!$E$11)))))))))SUMPRODUCT(P12:S12,選択!$B$8:選択!$E$8),IF(RIGHT(C12,LEN($C$7))=$C$7,SUMPRODUCT(P12:S12,選択!$B$9:選択!$E$9),IF(RIGHT(C12,LEN($C$8))=$C$8,SUMPRODUCT(P12:S12,選択!$B$10:選択!$E$10),SUMPRODUCT(P12:S12,選択!$B$11:選択!$E$11)))))))))
excel - アルファベット以外のすべてを削除する式
ピリオド、コンマ、スペース、ハイフン、アポストロフィを含むすべての非アルファ文字を削除するために、Excel で名前の列をスクラブする必要があります。
例:O'Malley-Smith, Tom, Jr.
に変更OMALLEYSMITHTOMJR
クライアントは、これが Excel 関数である必要があります。それ以外の場合は、replaceAll("[^a-zA-Z]", "").toUpperCase()
. SUBSTITUTE
セルごとに1つしか利用できないように見える関数 の混乱全体の外でこれを行うための既製の関数のように見えるものを見つけることができないようです。
カスタム マクロの開発が必要な場合、私はそれほど流暢ではありません。
excel - 「関数の挿入」プロンプトで Excel UDF 計算を無効にする
「関数の挿入」プロンプトによって呼び出されたときに、Excel UDF 関数 (現在 Excel DNA ライブラリを使用しています) を無効にする方法はありますか?
私のExcel UFD関数はWebサービス呼び出しを行い、「関数の挿入」プロンプトでのこの動作はサーバーを過負荷にしています(ユーザーが入力するたびに関数が呼び出されるため)。
この機能を無効にする方法を知っている人はいますか?
arrays - 検索する引数として配列を取得すると、INDEX(MATCH()) で制限に達しました
私はこの式を使用します:
=IFERROR(IF(MATCH(transf(E7);transf(Sheet2!$C$2:$C$66648);0)>0;"YES");"no")
transf
セル内の実際のテキスト値を小文字に変換/変換し、他のことを行うUDFです(この質問の主題ではありません)。
通常、transf(E7)
形成された配列内で の値が見つかった場合transf(Sheet2!$C$2:$C$66648)
、式は を返します。YES
no
UDF 自体はうまく機能し、何度もテストされています。問題は、今回は機能しないことです。返された答えはno
で、正しくありません。この数式の失敗は、66,000 個以上のアイテムの大きな配列に関連していますか? 配列数式として使用される UDF の制限は何ですか?
編集1
これは私の UDF の簡易版です。
パフォーマンスの場合に他の欠陥に気付いた場合は、お知らせください。
編集2
Excel 2010 を使用しています。互換モードはありません。ファイル自体は .xlsm、UDF は .xlam アドイン ファイルにあります。
vba - VBA Excel: ユーザー定義関数
修正済み: user3964075のコメントを確認してください
以下の簡単なコードのヘルプが必要です。基本的には、検索する行を指定できる vlookup の別のバージョンです。
asda(fval, rng, fcol, rcol)
fvalはユーザーが探しているものです
rngは範囲です
fcolは vlookup のデフォルトで 1 に設定されており、ユーザーは検索の基準として使用する列を選択できるようになりました
rcolは、一致が見つかった場合に返される列です
以下のコードを参照してください。
問題: 機能しません。理由がわかりません。他の人のコードを使用したいので、自分のコードから始めて修正したいと思います。
今後これを読む人のためにコードを修正しました:
終了機能
string - Excel での出力用の VBA の UDF に長い文字列があるエラー #VALUE
以下の UDF を使用して参照を連結し、結果を
のような SQL クエリに含めますref in ('ref1', 'ref2', ...)
。
UDFは通常どおり正常に動作しますが、参照の膨大なリスト#VALUE
を配置する必要がある場合は、Excel に入り
ます。
私はすでにこの回答を見ていますが、UDFを機能させることができません...
String
関数の型をからVariant
(明示的に)に変更しようとしましたが
、何も変わりませんでした...
私も試しConcatSQL2 = A(0)
てみConcatSQL2 = A
ました出力、
Dim A(0 To 0) As String
宣言、...そして再び機能しません...
アイデアが不足しています...
参考までに、結果の文字列の長さは約 220k になると予想されます...
大量のテキストを生成するために、ここで Lorem Ipsum ジェネレーターを使用できます!