このチュートリアルの目的は、再帰機能の概念を説明し、Excelで再帰的なラムダを作成するための一般的なアプローチを実証することです。私たちは、あらゆる側面を詳細に探求し、ワークシートで簡単にフォローして再現できるようにします。
Lambda関数の導入により、VBAプログラマーだけでなく、Excelの再帰計算が誰でも利用可能になりました。簡単に言えば、プログラミング言語のように振る舞う式を構築し、非常に少なく、非常に速く達成できるようにすることができます:)
このチュートリアルで説明した例は、Lambdaの構文と基本的な用途をすでに知っていることを暗示していることを覚えておいてください。そうでない場合は、Essentials:ExcelでLambdaを書いて使用する方法から始めるのは理にかなっています。
再帰的なラムダ関数
全員が同じページにいることを確認するには、まず再帰機能が何であるかを判断しましょう。
コンピューターサイエンスでは、再帰は、関数が直接的または間接的にそれ自体を呼び出す問題を解決する方法です。このような関数は再帰的と呼ばれます。基本的に、再帰関数は反復によって機能し、同じ問題の小さなインスタンスを解くことにより、より大きな問題の解決策を見つけます。
現在、Lambdaは再帰をサポートする唯一のExcel関数であり、コーディングなしで複雑な問題のためのコンパクトでエレガントなソリューションを作成できます。
VBAでは、通常、 for…nextまたはdo ... while loopを使用して再帰が行われます。 Lambdaは通常、IF関数に依存して、ブール条件をテストし、条件が真または偽のかどうかを再開します。
これが再帰的なラムダ機能の構造です。最も単純な形式です。
= lambda(x、y、…、 'パラメーターを宣言するif(logical_test、 '条件mylambda()をテストします。重要なポイントは、再帰的な呼び出しが永遠に続くのを止めることです。このために、エンディングケース(停止ケース、またはベースケースとも呼ばれます)を提供する必要があります。出口ポイントが提供されていない場合、コンピューターがクラッシュするまでフォーミュラが繰り返され続けます。もちろん、#numを投げます!エラー。
非再帰機能と比較して、再帰的なラムダは、書き込み、テスト、デバッグがより困難です。古き良き鶏肉と卵の謎に似ています - 機能が正しく機能するためには、それ自体を呼び出さなければなりません。それ自体を呼び出すために、関数は正しく動作する必要があります:)
不要なキャラクターを削除するための再帰的なラムダの例
外部ソースからデータをインポートする場合、ゴミ文字はしばしばこっそり入り込む可能性があり、何らかの形でデータをクリーニングする方法を見つける必要があります。
交換されたすべての機能は、特定のキャラクターを何も置き換えて、特定のキャラクターのすべての発生を削除することができますが、一度に1つの文字にしか処理できません。
いくつかのセルのすべての不要な文字をリストし、式を使用して1回の急降下でそれらを排除するためにより、はるかに高速で便利なことがあります。再帰的なラムダは、まさにあなたが必要とするものです:
=LAMBDA(data, chars, IF(chars"", RemoveChars(SUBSTITUTE(data, LEFT(chars, 1), ""), RIGHT(chars, LEN(chars) -1)), data))
カスタムラムダ関数はRemoveCharsという名前で、2つの入力パラメーターが必要です。
- データ- 洗浄するセルまたは一連のセル。
- CHARS-削除する不要なキャラクター。テキスト文字列またはセルの参照の形式で提供できます。セルでは、スペースも根絶したい場合を除き、キャラクターはスペースなしでリストされる必要があります。
高いレベルで、ここに関数が行うことがあります:
RemoveCharsは、除外リスト( CHARS )を循環し、一度に1つの文字をパージします。各再帰コールの前に、IF関数は残りのcharを評価します。文字列が空でない場合(chars "")、関数はそれ自体を呼び出します。最後の文字が処理されるとすぐに、反復プロセスが終了します - フォーミュラは現在の形式でデータを返し、終了します。
逆ロジックも機能します。文字列が空の場合(chars = "")、現在のデータを返して終了します。それ以外の場合は、 RemoveChars関数を呼び出します。
=LAMBDA(data, chars, IF(chars="", data, RemoveChars(SUBSTITUTE(data, LEFT(chars, 1), ""), RIGHT(chars, LEN(chars) -1))))
どちらのアプローチを選択しても、結果はまったく同じになります。
ヒント。同じタスクは、正規表現で簡単に実現できます。詳細については、特殊文字を削除するにはExcel Regexを参照してください。
Excelで再帰的なラムダを書く方法
免責事項から始めたいと思います:) Excelに再帰的なラムダを構築する文書化された方法はありません。これは、機能が真新しいことを考えると説明できます。私は自分のやり方を共有しますが、それはあなたに役立つかもしれません。
コア式を作成します
一般に、あなたはあなたのラムダ関数の望ましい動作をエミュレートするコア式を書くことから始めます。私たちの場合、究極の目標は特定のキャラクターを何もないことに置き換えることであり、Excelにはすでに理想的な楽器があります - 代替機能:
代替(Text、Old_Text、New_Text、[instance_num])代用するには、供給する必要があります。
- テキスト- 文字を置き換えるテキスト。私たちの場合、それはA2のテキスト文字列です。
- old_text-置き換える文字。 D2のすべてのキャラクターを確認する必要があります。それは、左端のキャラクターから始める理由があります。左の関数は私たちのために簡単にそれを取得できます:
LEFT(D2, 1)
- new_text- old_textを置き換える文字。明らかに、それは空の文字列( "")です。
- instance_numはオプションであり、私たちの場合は必要ありませんので、省略されています。
その結果、私たちのコア式はこの形をとります。
=SUBSTITUTE(A2, LEFT(D2, 1), "")
代替は一度に1つの交換を行うことができるため、D2の除外リストに文字があるのと同じくらい何度も実行する必要があります。問題は、次のキャラクターを処理するように強制するにはどうすればよいですか?そして、これが答えです:
反復ごとに、左から1つのキャラクター、つまりすでに見られたキャラクターを取り除きます。 LENと組み合わせた正しい関数は、簡単にそれを行うことができます:
=RIGHT(D2, LEN(D2) -1)
後続の各代替物は、以前の代替物の結果をテキスト引数として使用していることに注意してください。つまり、元の文字列(a2)ではなく、以前の代替機能(b2)によって返された文字列に置き換えを行うことに注意してください。
コア式をラムダ関数に変換します
覚えているように、私たちのカスタム関数はRemoveCharsと名付けられることになっており、データとCharの2つのパラメーターがあります。
あなたの仕事は、各パラメーターを計算する方法について関数を指示することです。
- データ- 文字を置き換える文字列。代替式によって提供されます。
- CHARS-削除する文字。適切な式で提供されます。
あなたがすることは、単に上記の2つの式を、それらをコンマで分離するRemoveChars関数の内部に配置するか、またはExcelの関数の引数を分離するために使用されるキャラクター(地域設定で設定されたリストセットされたリストで決定)を配置することです。
RemoveChars(SUBSTITUTE(A2, LEFT(D2, 1), ""), RIGHT(D2, LEN(D2) -1))
Lambdaはセル参照ではなくパラメーターを操作していることに留意して、次のステップはA2をデータに、D2をCharsに変更することです。
RemoveChars(SUBSTITUTE(data, LEFT(chars, 1), ""), RIGHT(chars, LEN(chars) -1))
RemoveChars関数が完了しました。悲しいことに、この時点でそれをテストする方法はありません。以前のテストの結果に頼って、必要に応じて後でデバッグを行うことができます。
Lambda関数を再帰的に呼び出すようにします
これは、「理論的式」を実用的なソリューションに変える重要な部分です。
カスタムラムダと同様に、パラメーターを宣言することから始めます。
=LAMBDA(data, chars,
次に、特定の状態を評価し、結果に応じて再帰または出口を呼び出します。出口のポイントを確立することは重要な考慮事項です。そうしないと、ループから抜け出すことができないため、式は正しく機能しません。
私たちの場合、IF関数は、 Charsリストが空白でないかどうかを確認します(Chars "")。 True( Charsが空ではない)の場合、RemoveChars関数を呼び出します。 false( charsが空)の場合、データを現在のフォームと出口を返します。
これは一般的なアプローチです:
=LAMBDA(data, chars, IF(chars"", RemoveChars(…), data))
そして、これはその完全な形の本当の式です:
=LAMBDA(data, chars, IF(chars"", RemoveChars(SUBSTITUTE(data, LEFT(chars, 1), ""), RIGHT(chars, LEN(chars) -1)), data))
または、 charsが空白であるかどうかを確認できます(chars = "")。 trueの場合、データを返して終了します。 False Call RemoveCharsの場合。
コンセプト:
=LAMBDA(data, chars, IF(chars="", data, RemoveChars(…)))
完全な式:
=LAMBDA(data, chars, IF(chars="", data, RemoveChars(SUBSTITUTE(data, LEFT(chars, 1), ""), RIGHT(chars, LEN(chars) -1))))
Lambda定義の関数に名前を付けます
再帰的なラムダを命名することは、非回復的な仲間を命名することと違いはありません。
- CTRL 3ショートカットを押して名前マネージャーを開き、 [新規]をクリックします。
- [新しい名前]ダイアログボックスで、次のことを行います。
- 名前ボックスに、関数の名前: RemoveCharsを入力します。
- スコープをワークブックに設定したままにします。
- ボックスを参照するには、ラムダの式を貼り付けて、それが平等記号で始まることを確認します。
- オプションで、詳細については、コメントボックスにパラメーターの説明を入力してください。
- [OK]をクリックして、新しい機能を保存します。
Excelで再帰的なラムダを使用する方法
それは最も簡単な部分です:)あなたのラムダ関数が名前を取得したら、他のネイティブ関数と同じようにそれを使用できます。
エンドユーザーの観点から見ると、カスタム関数の構文はこれと同じくらい簡単です。
RemoveChars(データ、チャー)たとえば、A2:A10(データ)のデータをクリーンするには、D2( CHAR )に不要な文字を入力し、B2に以下の式を入力します。
=RemoveChars(A2:A10, D2)
おそらくご存知のように、Excel 356では、すべての式は本質的に動的な配列式です。したがって、式を1つのセル(B2)に入力すると、すぐにすべての結果が得られます(この動作はこぼれています)。
従来の「1つの式 - 1つのセル」の動作を好む場合は、データにセル参照(A2)を使用し、$サインでCHARSセルアドレス($ d $ 2)をロックして、式をコピーするときに変更するのを防ぎます。
=RemoveChars(A2, $D$2)
上記の式はB2に移動し、B10を介してドラッグします。
セル内の削除された文字をリストする代わりに、テキスト文字列として式に直接供給できます。
=RemoveChars(A2:A10, "_^*/&%")
注記。コアフォーミュラで使用される代替機能は大文字と小文字であるため、カスタム関数は大文字と小文字を異なる文字として扱います。特定の文字を削除する場合は、文字ケースに関係なく「x」と言いたい場合は、文字列に「x」と「x」の両方を含めます。
再帰を理解する
再帰的なラムダを理解する手がかりは、各反復で何が起こるかを正確に知ることです。私たちの例では、そのようなことが2つあります。
- 以前の代替の結果は、ネストされた代替機能を使用しているかのように、次のRemoveCharsの呼び出しの新しいデータパラメーターになります。
- Chars文字列は1つの文字によって削減されます。あなたはそれを一種のカウントダウンと考えることができます。 Chars文字列が空になると、反復プロセスが停止し、式は最終結果として現在の形式でデータを返します。
以下の表は、再帰プロセスをよりよく視覚化するのに役立ちます。
再帰的なラムダ機能のその他の例
以下の例では、既存のLambda関数を新しい機能で拡張してニーズに合わせて調整する方法について説明します。
例1。不要な文字を削除し、余分なスペースをトリミングします
さまざまな無関係な文字に加えて、データには過度のスペースが含まれている場合があります。それらを取り除くために、組み込みの関数のようにトリムの内部にリムーヴェーチャーをネストすることができます:
=TRIM(RemoveChars(A2:A10, F2))
効果を確認するには、列BとDの結果を比較してください。後者の場合、不要な文字が削除されるだけでなく、すべての先頭および後続のスペースも削除されますが、内側の空間は単語間の単一のスペース文字に縮小されます。
毎回ネスティングを気にしたくない場合は、ラムダ自体の中で1回限りのセットアップとしてそれを行うことができます。
=LAMBDA(data, chars, TRIM(IF(chars"", RemoveTrim(SUBSTITUTE(data, LEFT(chars, 1), ""), RIGHT(chars, LEN(chars) -1)), data)))
改善された関数はRemovetrimという名前で、魅力のように機能します。
=RemoveTrim(A2:A10, D2)
例2。複数の文字を同じ文字に置き換えます
特定のシナリオでは、いくつかの異なる文字を指定する別の文字に置き換えることは理にかなっています。実際、それは私たちのRemoveChars関数が実際に行うことです - 指定された文字を空の文字列( "")に置き換えます。ただし、式で直接定義したいのに、交換用の文字はハードコーディングされています。それを行うには、関数にもう1つのパラメーター、たとえばnew_charを追加する必要があります。
したがって、私たちの新しい関数、それを交換用の名前にしましょう、次の構文があります:
交換(データ、chars、new_char)RemoveCharsを交換用チャーに変換するには、3つの小さな編集を行う必要があります。
- 3 RDパラメーター-NEW_CHARを定義します。
- ハードコーディングされた空の文字列( "")をnew_charに置き換えます。
- new_charを3 rd引数としてapplecteChars関数に渡します。
その結果、複数の文字を再帰的に置き換えるために、もう1つの有用なラムダが得られます。
=LAMBDA(data, chars, new_char, IF(chars"", ReplaceChars(SUBSTITUTE(data, LEFT(chars), new_char), RIGHT(chars, LEN(chars)-1), new_char), data))
たとえば、サプライヤーが突然IDまたはSKUの形式を変更した場合、この式を使用して、すべての不適切な文字(E1)を適切な文字(E2)に置き換えることができます。
=ReplaceChars(A2:A6, E1, E2)
例3.複数の値を他の値に一度に置き換える
この例は、その前のものの論理的な拡張です。今回は、単一の文字ではなく単語全体(または文字列)を置き換え、各単語には独自の置換値があります。
古い値と新しい値は別々のセルに配置されるため(下のスクリーンショットに示すように)、前の例で使用した正しい関数は機能しません。古い/新しいペアをループするには、何か他のものを把握する必要があります。うーん、特定のセルから指定された数の行と列を移動する機能がExcelにあるようです。うん、それはオフセットです!
主な方法が確立されているため、交換機能を書くことは大したことではありません。
交換(データ、古い、新規)データの場合、古い値を新しい値に置き換えるために、その基本形式で代替機能を使用しています。
SUBSTITUTE(data, old, new)
古い値を取得するために、古いリストの最上部のセルから始めて、各インタラクションで1列を下に移動します。
OFFSET(old, 1, 0)
新しい値を取得するために、まったく同じことを行いますが、もちろん、新しいリストでは次のことを行います。
OFFSET(new, 1, 0)
最後に、IFの助けを借りて既に馴染みのある出口戦略を実装し、あなたの新しい強力な再帰的なラムダは使用の準備ができています(名前マネージャーに名前を付けることを忘れないでください:)
=LAMBDA(data, old, new, IF(old"", ReplaceAll(SUBSTITUTE(data, old, new), OFFSET(old, 1, 0), OFFSET(new, 1, 0) ), data))
A2:A10のソースデータ、D2で始まる列Dの古い値、および列Eの新しい値がE2で始まると、この単純な式で複数の置換を行うことができます。
=ReplaceAll(A2:A10, D2, E2)
その結果、B2の単一の式は、A2:A10のすべての略語を対応するフルネームに置き換えます。
再帰的なラムダス対VBAユーザー定義関数
プログラミングの背景を持つ高度なExcelユーザーは、再帰的なラムダ関数が同等のVBAコードとどのように相関するかを知りたいと思うかもしれません。さて、見てみましょう。
複数の文字を削除するための再帰的なラムダ
ご存知のように、これは非機能的な擬似コードです。私たちはそれをVBA編集者に入れて、何が起こっているのかをよりよく理解するために、おなじみの形でアルゴリズムを表す:)
複数の文字を再帰的に削除するユーザー定義の関数
そして、これは、類似のユーザー定義関数をVBAでどのように記述することができるかです。
複数の文字を削除するユーザー定義の関数非再帰的
同様の関数は、非再帰的方法を使用して記述することもできます。この場合、 RemoveCharsを別の関数として書き込み、 Chars文字列が空でない場合にRemoveCharsNonの再us式関数内から呼び出します。
同じタスクを別の方法で達成できます。除外文字を1からLEN(CHARS)に反復させ、データにあるCharを空の文字列に置き換えることができます。 MID関数は、 Chars Stringから1つずつ各文字を抽出するために使用されます。
VBAユーザー定義関数と比較して、ラムダを使用することの利点は何ですか?何よりもまず、マクロ対応の.xlsmファイルとしてワークブックを保存する必要はなく、すべてのオープニングでマクロを有効にする問題を節約します。
うまくいけば、このチュートリアルが、再帰的なラムダがExcelでどのように見えるかについての洞察を得るのに役立つことを願っています。お読みいただきありがとうございます。来週のブログでお会いしましょう!
ダウンロード用のワークブックを練習します
再帰的なラムダの例(.xlsxファイル)VBAユーザー定義関数(.xlsmファイル)
以上が例を備えたExcelの再帰的なラムダ機能の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Excelピボットテーブルとチャートのタイムラインを作成するプロセスをガイドし、それを使用してダイナミックで魅力的な方法でデータと対話する方法を示します。 あなたはあなたのデータをピボで編成しています

Excelは、組み込みの「XMLデータインポート」関数を使用してXMLデータをインポートできます。 インポートの成功は、XML構造に大きく依存します。よく構成されたファイルは簡単にインポートされますが、複雑なファイルは手動マッピングが必要になる場合があります。 ベストプラクティスにはXMLが含まれます

この記事では、単一および依存リストを含むデータ検証を使用して、Excelでドロップダウンリストを作成する方法について説明します。 プロセスの詳細、一般的なシナリオのソリューションを提供し、データ入力制限やPEなどの制限について説明します

この記事では、Sum関数、Autosum機能、および特定のセルを合計する方法を使用して、Excelの列を合計する方法について説明します。

この記事では、データの準備、チャート挿入、および強化された視覚分析のためのパーソナライズオプションに焦点を当てて、Excelでパイチャートを作成およびカスタマイズする手順を詳述します。

記事では、平均関数を使用してExcelの平均の計算について説明します。主な問題は、この関数をさまざまなデータセットに効率的に使用する方法です。(158文字)

記事では、テーブルの作成、フォーマット、およびカスタマイズでExcelで説明し、データ分析のために合計、平均、ピボットアブルなどの関数を使用しています。

記事では、データ検証を使用してExcelのドロップダウンリストの作成、編集、削除について説明します。主な問題:ドロップダウンリストを効果的に管理する方法。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

ホットトピック









