<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Sulprobil</title>
    <link>https://www.sulprobil.de/post/</link>
    <description>Recent content in Posts on Sulprobil</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Mon, 25 May 2026 10:39:00 +0100</lastBuildDate>
    <atom:link href="https://www.sulprobil.de/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>sbGetCell (VBA)</title>
      <link>https://www.sulprobil.de/sbgetcell_en/</link>
      <pubDate>Mon, 25 May 2026 10:39:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbgetcell_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;In older versions of Excel you could retrieve interesting information about worksheet cells by using&#xA;the Excel4 macro function GET.CELL.&#xA;Define the name &lt;em&gt;HasFormula&lt;/em&gt; with the value&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;=GET.CELL(48,INDIRECT(&amp;#34;RC[-1]&amp;#34;,FALSE))&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;for example. If you then had inserted &lt;em&gt;=HasFormula&lt;/em&gt; next right to a cell,&#xA;you would have been shown whether the cell had&#xA;a formula (&amp;ldquo;True&amp;rdquo;) or not (&amp;ldquo;False&amp;rdquo;).&lt;/p&gt;&#xA;&lt;p&gt;If you want to achieve similar results with VBA use the UDF sbGetCell below.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Test Date Formulas (Excel)</title>
      <link>https://www.sulprobil.de/test_date_formulas_en/</link>
      <pubDate>Mon, 25 May 2026 10:31:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/test_date_formulas_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;How can I ensure that an Excel date formula is correct?&lt;/p&gt;&#xA;&lt;p&gt;I need to test it!&lt;/p&gt;&#xA;&lt;p&gt;This works best:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;I generate all days of the relevant date range in column A. 1-Jan-1901 to 31-Dec-2099, for example.&lt;/li&gt;&#xA;&lt;li&gt;I enter all possible formulas in columns B, C, D, &amp;hellip; and copy down.&lt;/li&gt;&#xA;&lt;li&gt;I compare all results to the reference formula in column B.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;&#xA;&lt;p&gt;How many ISO calendar weeks does a given month touch?&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbEAN (VBA)</title>
      <link>https://www.sulprobil.de/sbean_en/</link>
      <pubDate>Mon, 25 May 2026 10:28:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbean_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you need to calculate or to check an international article number&#xA;(also known as European article number or EAN):&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbEAN.png&#34; alt=&#34;sbEAN&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;see-also&#34;&gt;See also&lt;/h2&gt;&#xA;&lt;p&gt;For comparison purposes see (external link!) &lt;a href=&#34;https://www.jrdrucksysteme.de/blog/gs-1-ean-13-pruefziffer-berechnen-und-testen/&#34;&gt;Calculate and test Check Digit&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix-sbean-code&#34;&gt;Appendix sbEAN Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbEAN(s &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; bFullEAN &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt; = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; bEAN14 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt; = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate or check EAN check digit. Works for EAN-8,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;EAN-13, EAN-14 / GTIN, and for EAN-18 / NVE / SSCC.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;If EAN is given without check digit, it is calculated&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;and returned (full EAN if bFullEAn is True or just the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;check digit if False). If full EAN is entered the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;result of the check (True or False) will be returned.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbean_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbean_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 31-Mar-2024 PB V0.3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, d &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, m &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, w &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; bCheck &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;m = Len(s)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  w = Asc(Mid(s, i, 1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; w &amp;lt; 48 &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; w &amp;gt; 57 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbEAN = CVErr(xlErrNum)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bEAN14 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; m = 13 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bCheck = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;ElseIf&lt;/span&gt; m = 14 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bCheck = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    m = m - 1 &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate checksum without check digit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbEAN = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 7, 12, 17&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bCheck = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 8, 13, 18&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bCheck = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    m = m - 1 &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate checksum without check digit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbEAN = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  End &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;w = 3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = m &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; 1 &lt;span style=&#34;color:#00f&#34;&gt;Step&lt;/span&gt; -1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = d + Mid(s, i, 1) * w&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    w = 4 - w &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Alternate between 3 and 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;d = (10 - d &lt;span style=&#34;color:#00f&#34;&gt;Mod&lt;/span&gt; 10) &lt;span style=&#34;color:#00f&#34;&gt;Mod&lt;/span&gt; 10&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bCheck &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  sbEAN = Right(s, 1) = d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ElseIf&lt;/span&gt; bFullEAN &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  sbEAN = s &amp;amp; d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  sbEAN = d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbSpellNumber (VBA)</title>
      <link>https://www.sulprobil.de/sbspellnumber_en/</link>
      <pubDate>Mon, 25 May 2026 06:43:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbspellnumber_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Number rules the universe.&amp;rdquo; [Pythagoras]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes you need to spell numbers in English words with Dollars/Cents or&#xA;British Pound Sterling/Pence or European Euro/Cent. 12.31 would result in&#xA;Twelve Dollars and Thirtyone Cents, for example.&lt;/p&gt;&#xA;&lt;p&gt;Note: There are many faulty spellnumber versions circulating in the web.&#xA;I suggest to test your preferred version with the inputs listed below:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbSpellNumber.png&#34; alt=&#34;sbSpellNumber&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--sbspellnumber--sbinworten-code&#34;&gt;Appendix – sbSpellNumber / sbInWorten Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Private&lt;/span&gt; sNWord(0 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; 28) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Private&lt;/span&gt; sHWord(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; 4) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbInWorten(&lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; sNumber &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sbInWorten = sbSpellNumber(sNumber, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;German&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;EUR&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbSpellNumber(&lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; sNumber &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; sLang &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;English&amp;#34;&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; sCcy &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;USD&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Template was Microsoft&amp;#39;s limited version:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;https://support.microsoft.com/de-de/help/213360/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;how-to-convert-a-numeric-value-into-english-words-in-excel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;This version informs the user about its limits.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbspellnumber_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbinworten_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff  02-Mar-2018 PB V1.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; Euros &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;, cents &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; Result &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;, Temp &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; DecimalPlace &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Integer&lt;/span&gt;, Count &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Integer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; Place(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; 6) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dNumber &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; prefix &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;, suffix &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sLang&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;English&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(1) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(2) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Thousand &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(3) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Million &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(4) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Billion &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(5) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Trillion &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(6) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Mantissa not wide enough for this number &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sHWord(1) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Error (Absolute amount &amp;gt; 999999999999999)! &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sHWord(2) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; (rounded)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sHWord(3) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Minus &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sHWord(4) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;and&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(0) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;zero&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(1) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;one&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(2) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;two&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(3) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;three&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(4) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;four&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(5) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;five&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(6) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;six&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(7) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;seven&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(8) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;eight&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(9) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;nine&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(10) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;ten&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(11) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;eleven&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(12) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;twelve&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(13) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;thirteen&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(14) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;fourteen&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(15) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;fifteen&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(16) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;sixteen&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(17) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;seventeen&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(18) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;eighteen&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(19) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;nineteen&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(20) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;twenty&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(21) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;thirty&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(22) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;fourty&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(23) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;fifty&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(24) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;sixty&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(25) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;seventy&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(26) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;eighty&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(27) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;ninety&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(28) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;hundred&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;German&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(1) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(2) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Tausend &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(3) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Millionen &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(4) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Milliarden &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(5) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Billionen &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Place(6) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Die Mantisse ist nicht groß genug für diese Zahl &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sHWord(1) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Fehler (Absolutbetrag &amp;gt; 999999999999999)! &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sHWord(2) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; (gerundet)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sHWord(3) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Minus &amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sHWord(4) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;und&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(0) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;null&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(1) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;ein&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(2) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;zwei&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(3) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;drei&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(4) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;vier&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(5) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;fünf&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(6) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;sechs&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(7) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;sieben&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(8) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;acht&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(9) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;neun&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(10) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;zehn&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(11) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;elf&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(12) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;zwölf&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(13) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;dreizehn&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(14) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;vierzehn&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(15) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;fünfzehn&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(16) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;sechzehn&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(17) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;siebzehn&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(18) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;achtzehn&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(19) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;neunzehn&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(20) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;zwanzig&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(21) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;dreißig&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(22) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;vierzig&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(23) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;fünfzig&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(24) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;sechzig&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(25) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;siebzig&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(26) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;achtzig&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(27) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;neunzig&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNWord(28) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;hundert&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Empty string = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; = sNumber &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNumber = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dNumber = sNumber + 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;If we cannot cope with it, tell the user!&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Abs(dNumber) &amp;gt; 999999999999999# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sbSpellNumber = sHWord(1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;If we have to round we present a suffix &amp;#34;(rounded)&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Abs(dNumber - Round(dNumber, 2)) &amp;gt; 1E-16 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   dNumber = Round(dNumber, 2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   suffix = sHWord(2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Negative numbers get a prefix &amp;#34;Minus&amp;#34;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dNumber &amp;lt; 0# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   prefix = sHWord(3)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   dNumber = -dNumber&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNumber = Right(sNumber, Len(sNumber) - 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sNumber = Trim(Str(sNumber))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Left(sNumber, 1) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNumber = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &amp;amp; sNumber&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;DecimalPlace = InStr(sNumber, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;.&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; DecimalPlace &amp;gt; 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   cents = GetTens(Left(Mid(sNumber, DecimalPlace + 1) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;00&amp;#34;&lt;/span&gt;, 2), _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               sLang, sCcy)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNumber = Trim(Left(sNumber, DecimalPlace - 1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Count = 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;While&lt;/span&gt; sNumber &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = GetHundreds(Right(sNumber, 3), sLang, sCcy)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Temp &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Euros &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; sLang = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;German&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = Temp &amp;amp; Place(Count) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                   sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; Euros&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = Temp &amp;amp; Place(Count) &amp;amp; Euros&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Len(sNumber) &amp;gt; 3 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       sNumber = Left(sNumber, Len(sNumber) - 3)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       sNumber = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Count = Count + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sCcy&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;EUR&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; Euros&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = sNWord(0) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Euros&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sNWord(1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = sNWord(1) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Euro&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = Euros &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Euros&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; cents&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sNWord(0) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Cents&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sNWord(1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sNWord(1) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Cent&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; cents &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Cents&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;GBP&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; Euros&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = sNWord(0) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Pounds&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sNWord(1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = sNWord(1) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Pound&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = Euros &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Pounds&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; cents&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sNWord(0) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Pence&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sNWord(1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sNWord(1) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Penny&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; cents &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Pence&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;USD&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; Euros&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = sNWord(0) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Dollars&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sNWord(1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = sNWord(1) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Dollar&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Euros = Euros &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Dollars&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; cents&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sNWord(0) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Cents&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sNWord(1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sNWord(1) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Cent&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           cents = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; sHWord(4) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt; &amp;amp; cents &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Cents&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Temp = UCase(Replace(Euros &amp;amp; cents, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;  &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sLang&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;English&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Application.WorksheetFunction.Proper(Temp)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; And &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; and &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;German&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Application.WorksheetFunction.Proper(Temp)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Ein Millionen&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Eine Million&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Ein Milliarden&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Eine Milliarde&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Ein Billionen&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Eine Billion&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Dollars&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Dollar&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Cents&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Cent&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Pounds&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Pfund&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Pound&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Pfund&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Euros&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Euro&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Pence&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Pennies&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   Temp = Replace(Temp, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; Und &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; und &amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sbSpellNumber = prefix &amp;amp; Temp &amp;amp; suffix&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Private&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; GetHundreds(&lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; sNumber, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; sLang &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;English&amp;#34;&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; sCcy &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;USD&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; Result &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Val(sNumber) = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   sNumber = Right(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;000&amp;#34;&lt;/span&gt; &amp;amp; sNumber, 3)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Mid(sNumber, 1, 1) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       Result = GetDigit(Mid(sNumber, 1, 1)) _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               &amp;amp; sNWord(28)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Mid(sNumber, 2, 2) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;00&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Result = Result &amp;amp; sHWord(4)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Mid(sNumber, 2, 1) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       Result = Result &amp;amp; GetTens(Mid(sNumber, 2), sLang, sCcy)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;ElseIf&lt;/span&gt; Mid(sNumber, 3, 1) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       Result = Result &amp;amp; GetDigit(Mid(sNumber, 3))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   GetHundreds = Result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Private&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; GetTens(TensText &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; sLang &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;English&amp;#34;&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; sCcy &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;USD&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; Result &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Result = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Val(Left(TensText, 1)) = 1 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;   &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;10-19...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Val(TensText) &amp;gt; 9 &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; Val(TensText) &amp;lt; 20 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       GetTens = sNWord(Val(TensText))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Else                               &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;20-99...&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Val(Left(TensText, 1)) &amp;gt; 1 &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       Val(Left(TensText, 1)) &amp;lt; 10 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       Result = sNWord(18 + Val(Left(TensText, 1)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       Result = GetDigit(Right(TensText, 1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Right(TensText, 1) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; Left(TensText, 1) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sLang&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;German&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Result = GetDigit(Right(TensText, 1)) &amp;amp; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       sHWord(4) &amp;amp; Result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;English&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           Result = Result &amp;amp; GetDigit(Right(TensText, 1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;       &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GetTens = Result&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Private&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; GetDigit(Digit &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Val(Digit) &amp;lt; 10 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   GetDigit = sNWord(Val(Digit))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   GetDigit = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Optimal Usage of Vacation Days (VBA)</title>
      <link>https://www.sulprobil.de/sboptimalvacationdays_en/</link>
      <pubDate>Mon, 25 May 2026 06:42:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sboptimalvacationdays_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;I need a vacation.&amp;rdquo; [Arnold Schwarzenegger as T-800 in Terminator 2]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Each year we members of the working population are asking ourselves&#xA;when we should take our vacation.&lt;/p&gt;&#xA;&lt;p&gt;This program shows you the maximal achievable number of free days&#xA;for your given vacation days:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbOptimalVacationDays.png&#34; alt=&#34;sbOptimalVacationDays&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Example: With the given bank holidays in 2024 and just 7 days of vacation&#xA;you can get 16 free days from 14-Dec-2024 until 29-Dec-2024.&#xA;You cannot achieve more in 2024, as the second best solution proves&#xA;(that will result in 14 free days only).&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbTasklist (VBA)</title>
      <link>https://www.sulprobil.de/sbtasklist_en/</link>
      <pubDate>Mon, 25 May 2026 03:25:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbtasklist_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Patience has its limits. Take it too far, and it is cowardice.&amp;rdquo; [George Jackson]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If your team runs many different manual tasks,&#xA;not all of them on each working day but only on specified weekdays or days of a month,&#xA;then this tasklist creator might be of help to you.&lt;/p&gt;&#xA;&lt;p&gt;In sheet Param enter your team name or other reference which&#xA;will be put into the footer of each page, and enter ther valuation day:&lt;/p&gt;</description>
    </item>
    <item>
      <title>RoundToSum (VBA)</title>
      <link>https://www.sulprobil.de/roundtosum_en/</link>
      <pubDate>Mon, 25 May 2026 03:14:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/roundtosum_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Every fool can know. The point is to understand.&amp;rdquo; [Albert Einstein]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;rounding-values-preserving-their-sum&#34;&gt;Rounding Values Preserving Their Sum&lt;/h2&gt;&#xA;&lt;p&gt;Rounded values do not always sum up to their original total, as demonstrated in this article.&#xA;How can you ensure that the sum of rounded percentages equals exactly 100%?&#xA;Is it possible to guarantee that, for accounting purposes,&#xA;the distribution of overhead costs precisely matches the original total?&#xA;These challenges are well-known and have been studied extensively.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbZip (VBA)</title>
      <link>https://www.sulprobil.de/sbzip_en/</link>
      <pubDate>Sun, 24 May 2026 08:04:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbzip_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You can easily create a zip file via VBA.&lt;/p&gt;&#xA;&lt;p&gt;This is the variant I like to use:&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--sbzip-code&#34;&gt;Appendix – sbZip Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#Const&lt;/span&gt; SBZIP_LOG = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Use sbZip with logging (True) or not (False)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Sub&lt;/span&gt; sbZip(&lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; vSourceFullPathName &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; vDestinationZipFullPathName &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; bCreate &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt; = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; bUse7zip &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt; = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Create zip file vDestinationZipFullPathName and insert zipped file or folder vSourceFullPathName.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;This sub is using LibFileTools, https://github.com/cristianbuse/VBA-FileTools.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;If bUse7zip:=True then 7zip needs to be installed at C:\Program Files\7-Zip\7z.exe.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Version When        Who   What&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;     14 08-May-2025 Bernd Overwrite zip constituent (by moving it to Temp)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;                          without warning message that it already exists&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;     15 25-Dec-2025 Bernd Use #If SBZIP_LOG&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; iFile     &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Integer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; lItems    &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; lRepeat   &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; sBasename &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; sLine     &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; sShellCmd &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; sPath     &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; v         &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; oExec     &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; oOutput   &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; oShell    &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Object&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; GLogger   &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; clsLog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If MEASURE_RUNTIME Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; cPerf     &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; clsPerf &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;See: https://jkp-ads.com/Articles/performanceclass.asp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Set&lt;/span&gt; cPerf = &lt;span style=&#34;color:#00f&#34;&gt;New&lt;/span&gt; clsPerf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cPerf.SetRoutine &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;sbZip&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Set&lt;/span&gt; GLogger = &lt;span style=&#34;color:#00f&#34;&gt;New&lt;/span&gt; clsLog&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;g_log_params.log_sub_name = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;sbZip&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GLogger.info &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Started with vSourceFullPathName = &amp;#39;&amp;#34;&lt;/span&gt; &amp;amp; vSourceFullPathName &amp;amp; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#39;, vDestinationZipFullPathName = &amp;#39;&amp;#34;&lt;/span&gt; &amp;amp; vDestinationZipFullPathName &amp;amp; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#39;, bCreate = &amp;#34;&lt;/span&gt; &amp;amp; bCreate &amp;amp; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#39;, bUse7zip = &amp;#34;&lt;/span&gt; &amp;amp; bUse7zip&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bCreate &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; IsFile(&lt;span style=&#34;color:#00f&#34;&gt;CStr&lt;/span&gt;(vDestinationZipFullPathName)) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; DeleteFile(&lt;span style=&#34;color:#00f&#34;&gt;CStr&lt;/span&gt;(vDestinationZipFullPathName)) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      GLogger.warn &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Could not delete file &amp;#39;&amp;#34;&lt;/span&gt; &amp;amp; vDestinationZipFullPathName &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bUse7zip &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; IsFile(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;C:\Program Files\7-Zip\7z.exe&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Set&lt;/span&gt; oShell = CreateObject(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;WScript.Shell&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sShellCmd = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;C:\Program Files\7-Zip\7z.exe a &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt; &amp;amp; vDestinationZipFullPathName &amp;amp; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&amp;#34; &amp;#34;&amp;#34;&amp;#34;&lt;/span&gt; &amp;amp; vSourceFullPathName &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&amp;#34;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Set&lt;/span&gt; oExec = oShell.exec(sShellCmd)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Set&lt;/span&gt; oOutput = oExec.StdOut&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;While&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; oOutput.AtEndOfStream&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      sLine = oOutput.ReadLine&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; sLine &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; GLogger.info &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;STDOUT &amp;#34;&lt;/span&gt; &amp;amp; sLine&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Set&lt;/span&gt; oOutput = oExec.StdErr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;While&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; oOutput.AtEndOfStream&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      sLine = oOutput.ReadLine&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; sLine &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; GLogger.warn &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;STDERR &amp;#34;&lt;/span&gt; &amp;amp; sLine&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;While&lt;/span&gt; oExec.Status = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      Application.Wait (Now + TimeValue(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0:00:01&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    GLogger.info vSourceFullPathName &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#39; zipped into &amp;#39;&amp;#34;&lt;/span&gt; &amp;amp; vDestinationZipFullPathName &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    GLogger.fatal &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;C:\Program Files\7-Zip\7z.exe doesn&amp;#39;t exist. Cannot zip &amp;#39;&amp;#34;&lt;/span&gt; &amp;amp; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vSourceFullPathName &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bCreate &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sPath = GetLocalPath(ThisWorkbook.Path)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Right(sPath, 1) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;\&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; sPath = sPath &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;\&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; IsFile(sPath &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Zip_Template.zip&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Workaround in case print sequence in Else clause does not work&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;      CopyFile sPath &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Zip_Template.zip&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#00f&#34;&gt;CStr&lt;/span&gt;(vDestinationZipFullPathName)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; IsFile(&lt;span style=&#34;color:#00f&#34;&gt;CStr&lt;/span&gt;(vDestinationZipFullPathName)) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        GLogger.warn &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Could not copy template file &amp;#39;&amp;#34;&lt;/span&gt; &amp;amp; vDestinationZipFullPathName &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#39;&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      iFile = FreeFile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      Open vDestinationZipFullPathName &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; Output &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; #iFile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      Print #iFile, Chr&lt;span style=&#34;&#34;&gt;$&lt;/span&gt;(80) &amp;amp; Chr&lt;span style=&#34;&#34;&gt;$&lt;/span&gt;(75) &amp;amp; Chr&lt;span style=&#34;&#34;&gt;$&lt;/span&gt;(5) &amp;amp; Chr&lt;span style=&#34;&#34;&gt;$&lt;/span&gt;(6) &amp;amp; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;(18, 0)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      Close #iFile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Set&lt;/span&gt; oShell = CreateObject(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Shell.Application&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lItems = oShell.Namespace(vDestinationZipFullPathName).Items.Count&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; GetAttr(vSourceFullPathName) = vbDirectory &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    oShell.Namespace(vDestinationZipFullPathName).CopyHere _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    oShell.Namespace(vSourceFullPathName).Items, 16&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lRepeat = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; Until oShell.Namespace(vDestinationZipFullPathName).Items.Count = _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lItems + oShell.Namespace(vSourceFullPathName).Items.Count &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; lRepeat &amp;gt; 5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      Application.Wait (Now + TimeValue(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0:00:01&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lRepeat = lRepeat + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lItems &amp;gt; 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      sBasename = Right(vSourceFullPathName, InStr(StrReverse(vSourceFullPathName), &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;\&amp;#34;&lt;/span&gt;) - 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Each&lt;/span&gt; v &lt;span style=&#34;color:#00f&#34;&gt;In&lt;/span&gt; oShell.Namespace(vDestinationZipFullPathName).Items&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; v.Name = sBasename &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          oShell.Namespace(Environ(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Temp&amp;#34;&lt;/span&gt;)).MoveHere (v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          DeleteFile Environ(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Temp&amp;#34;&lt;/span&gt;) &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;\&amp;#34;&lt;/span&gt; &amp;amp; sBasename&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    oShell.Namespace(vDestinationZipFullPathName).CopyHere vSourceFullPathName, 16&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lRepeat = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; Until oShell.Namespace(vDestinationZipFullPathName).Items.Count = _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lItems + 1 &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; lRepeat &amp;gt; 3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      Application.Wait (Now + TimeValue(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;0:00:01&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lRepeat = lRepeat + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If SBZIP_LOG Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;GLogger.info &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Beendet ohne Fehler&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Sub&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Krabat (Excel)</title>
      <link>https://www.sulprobil.de/krabat_en/</link>
      <pubDate>Sun, 24 May 2026 04:06:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/krabat_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;(External link!) &lt;a href=&#34;https://en.wikipedia.org/wiki/Krabat_(novel)&#34; title=&#34;Krabat&#34;&gt;Krabat&lt;/a&gt; is a fantasy novel written by Otfried Preußler.&lt;/p&gt;&#xA;&lt;p&gt;I found the story fascinating, albeit quite illogical:&#xA;12 apprentices work at the mill.&#xA;Each year one dies, each year a new one appears with a start age of 14,&#xA;each year all of them age by 3 years.&lt;/p&gt;&#xA;&lt;p&gt;After 30 years there can be an apprentice who is 101 years old:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Krabat_The_Satanic_Mill_Screen.png&#34; alt=&#34;Krabat_The_Satanic_Mill_Screen&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Krabat_The_Satanic_Mill_Formulas.png&#34; alt=&#34;Krabat_The_Satanic_Mill_Formulas&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sulprobil.de/Krabat_The_Satanic_Mill.xlsx&#34;&gt;Krabat_The_Satanic_Mill.xlsx&lt;/a&gt; [15 KB Excel file, open and use at your own risk]&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbNRN (VBA)</title>
      <link>https://www.sulprobil.de/sbnrn_en/</link>
      <pubDate>Sun, 24 May 2026 03:26:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbnrn_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;God made the integers, all the rest is the work of man.&amp;rdquo; [Leopold Kronecker]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Which rational number is a good proxy of π (3.1415926&amp;hellip;)? Enter in cell A1 ‘=pi()&amp;rsquo;,&#xA;in cell B1 your maximal denominator (for example 10), and in cells C1:D1 ‘=sbNRN(A1,B1)&#39;&#xA;as array formula (with CTRL + SHIFT + ENTER). You will get in C1:D1 22 and 7.&#xA;That means: 22/7 is the nearest rational number to π with a denominator not higher than 10.&#xA;For 1000 in B1 you would get 355/113.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Excel VBA A Collection (Excel / VBA)</title>
      <link>https://www.sulprobil.de/excel_vba_a_collection_en/</link>
      <pubDate>Sat, 23 May 2026 07:12:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/excel_vba_a_collection_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Spreadsheets are probably among the most dangerous inventions of recent decades.&amp;rdquo; [Rolf Dobelli]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;excel-vba-a-collection&#34;&gt;Excel VBA A Collection&lt;/h2&gt;&#xA;&lt;p&gt;This is a collection of Excel VBA programs and of some Excel spreadsheet formulas which I found reasonable.&lt;/p&gt;&#xA;&lt;p&gt;Note: I successfully tested the applications and formulas presented here with Excel 2024.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Table of Contents                                                               &#xA;                                                                                &#xA;Excel / VBA – A Collection                                                      1&#xA;  Abstract                                                                      2&#xA;  Excel Learning Path                                                           2&#xA;The Excel / VBA Programming Environment                                        11&#xA;  Abstract                                                                     11&#xA;  Basics                                                                       11&#xA;    Variables                                                                  11&#xA;      Types of Variable                                                        11&#xA;      Scope                                                                    12&#xA;    During Editing                                                             12&#xA;    During Program Execution                                                   13&#xA;      Breakpoints                                                              13&#xA;      Error Handling                                                           13&#xA;    Environment Variables                                                      15&#xA;    Good Programming Practices                                                 15&#xA;      Be a Good Programmer                                                     15&#xA;      Good Excel and VBA Knowledge                                             15&#xA;      Programming Conventions                                                  16&#xA;      Clean Up Macro Recordings                                                16&#xA;      Document Your Program Adequately                                         16&#xA;      Test Your Program Thoroughly                                             16&#xA;      Log Your Program Execution                                               16&#xA;  Speed up Your Program (Profiling)                                            17&#xA;    Modules                                                                    17&#xA;      Normal                                                                   17&#xA;    Class Modules                                                              19&#xA;  System Status Save and Restore – SystemState Class                           20&#xA;    System Status Variables                                                    20&#xA;    SystemState Program Code                                                   21&#xA;  Documenting Program Flow – Logging Class                                     23&#xA;    Pros and Cons                                                              23&#xA;    Parameters                                                                 24&#xA;    Sample Output                                                              25&#xA;    Modules                                                                    26&#xA;    Class Modules                                                              31&#xA;  Start / Stop OneDrive Synchronization                                        33&#xA;  Export a Range as Picture – sbExportRange2Picture                            35&#xA;  List Named Ranges – sbNamedRanges                                            38&#xA;  Number of Dimensions of an Array – ArrayDim                                  38&#xA;  Show Excel Version – ApplicationVersion                                      39&#xA;  Retrieve Cell Information – sbGetCell                                        40&#xA;  Next Floating Point Number – sbNextFloat                                     46&#xA;  Calling Other Windows Programs Using the Example sbZip                       47&#xA;  Excel Don’t’s – What You Should not be Doing with Excel                      49&#xA;    A table of what you should avoid                                           49&#xA;Number Systems, Formats, and Transformations                                   50&#xA;  Abstract                                                                     50&#xA;  Transformations and Calculations of Numbers                                  50&#xA;    Spell Numbers in English Words – sbSpellNumber                             50&#xA;    Convert Decimal into Binary Numbers – sbDec2Bin / sbBin2Dec                54&#xA;    Identify German Bank Holidays – IstFeiertag                                59&#xA;    Present the Full-Length Number – sbNum2Str                                 63&#xA;    Significant Digits of a Number – sbNSig                                    64&#xA;    Return the Number for a Month’s Name – sbMonthNumber                       65&#xA;    Calculation of the Circle Constant π                                       68&#xA;      First 1,000 Digits of π                                                  71&#xA;    Calculation of Euler&amp;#39;s Number e                                            72&#xA;      First 1,000 Digits of e                                                  73&#xA;    Literature                                                                 74&#xA;    Shorten a Number Sequence Representation – sbParseNumSeq                   74&#xA;  Rational Numbers = Fractions                                                 76&#xA;    Nearest Rational Number to a Given Floating Point Number – sbNRN           76&#xA;    Linear Equations with Rational Coeffizients                                79&#xA;    Present Quota Changes as Fractions                                         82&#xA;    Monthly Fractions                                                          83&#xA;  Linear Combination of Integers                                               84&#xA;    Extended Euklidean Algorithm – sbEuklid                                    84&#xA;  Time Representations                                                         86&#xA;    Calculate Working Hours Between Two Time Points – sbTimeDiff               86&#xA;    Add Working Hours to a Time Point – sbTimeAdd                              89&#xA;    Convert a Time to a Different Time Zone – ConvertTime                      92&#xA;  Check Digits                                                                 92&#xA;    Calculate or Check a European Article Number – sbEAN                       92&#xA;  Ordinal Numbers                                                              93&#xA;Simple Math with Formulas                                                      94&#xA;  How to Analyze Spreadsheet Formulas                                          94&#xA;  Testing Date Formulas                                                        95&#xA;  First or last Weekday of a Month                                             97&#xA;  Same Weekday and Calendarweek last year                                      98&#xA;  Budget Control                                                               99&#xA;  Increment Lowest Significant Digit                                          100&#xA;  Linear Breakdown                                                            101&#xA;  Merge two columns justified into one                                        104&#xA;  Minimum Truck Load Problem                                                  105&#xA;  Count Trailing Zeros                                                        106&#xA;  Minimax Interpolation                                                       106&#xA;  Interpolation with PERCENTILE / PERCENTRANK                                 108&#xA;  Interpolation with TREND                                                    110&#xA;  REFA Time Slicing                                                           111&#xA;  Roles and Rights                                                            112&#xA;  Rounding is Fun                                                             113&#xA;  Tip Distribution                                                            114&#xA;  Smoothing Inner Period Values                                               116&#xA;  Cell Based Charts                                                           117&#xA;Simple VBA Programs                                                           119&#xA;  Abstract                                                                    119&#xA;  Sum up Numbers with same Number Format – sbSumMyFormat                      119&#xA;  Count Cells with Certain Color – sbCountMyColor                             120&#xA;  Allocate Assets to a Portfolio – sbAllocate                                 121&#xA;  Eliminate Outliers – sbORB                                                  122&#xA;  Fair Distribution of a Limited Budget – sbDistBudget                        124&#xA;  Compute Collatz Length – sbCollatz                                          126&#xA;  Rank Item Uniquely – sbUniqRank                                             127&#xA;  Eliminate Points of a Graph with Small Slope Changes – sbReducePoints       129&#xA;  Birthday List – sbBirthdayList                                              131&#xA;  Accumulated Trade Blotter – sbAccumulatedTadeBlotter                        133&#xA;  Most Frequent Pairs – sbMostFrequentPairs                                   135&#xA;  Interpolate – sbInterp                                                      137&#xA;  Combinations with Subsets k of n                                            139&#xA;  Lookup Variants                                                             141&#xA;  Minimal Number of Banknotes and Coins – sbMinCash                           144&#xA;  Rebalance AssetClass Weights of a Portfolio – sbRebalancedReturn            147&#xA;  Optimal Pitstops                                                            149&#xA;  Optimal Usage of Vacation Days                                              151&#xA;  Create a Round Robin Tournament – sbRondRobin                               153&#xA;  Test Access Rights                                                          156&#xA;Advanced VBA Programs                                                         159&#xA;  Abstract                                                                    159&#xA;  Employee Revenue Shares                                                     159&#xA;  Keeping Track of extreme Cell Values – sbCellWatermarks                     165&#xA;  A Task List – sbTaskList                                                    167&#xA;  Accounts Receivable Problem                                                 170&#xA;  Data Analysis – sbDatastats                                                 173&#xA;    System Handbook                                                           173&#xA;      Overview                                                                173&#xA;      Parameters in Sheet Param                                               174&#xA;    User Handbook                                                             174&#xA;      Summary                                                                 174&#xA;      Config File FileSpecs.csv                                               175&#xA;      Numstats Output                                                         175&#xA;      Numstats Move Output                                                    176&#xA;      Textstats Output                                                        176&#xA;      Textstats Move Output                                                   176&#xA;      Output Limits File                                                      177&#xA;      Output Limits Move File                                                 178&#xA;  Lottery k-Tuples                                                            208&#xA;  Mini Calculator                                                             211&#xA;  Mortality Annuities                                                         218&#xA;    Complex Array Formula (Worst)                                             218&#xA;    Simple user defined function in VBA (Better)                              219&#xA;    Pre-calculated Table plus an NPV Formula (Maybe Best)                     219&#xA;  Financial Mathematics – Options                                             220&#xA;    The binomial Method                                                       220&#xA;    Trinomial Trees and Finite Difference Methods                             226&#xA;    Monte Carlo Simulation                                                    232&#xA;  Generate all Permutations of an Array – Quickperm                           242&#xA;  A maintenance-free Database                                                 244&#xA;    Limitations                                                               244&#xA;    Responsibilities                                                          244&#xA;    System Documentation                                                      245&#xA;    User Documentation                                                        245&#xA;      Super User with Read/Write Access                                       245&#xA;      Normal User with Read-Only Access                                       245&#xA;    Appendix – SQL Code                                                       246&#xA;    Appendix – VBA Code                                                       249&#xA;Rounding Values Preserving Their Sum with RoundToSum                          252&#xA;  Abstract                                                                    252&#xA;  Rounding Values Preserving Their Sum                                        252&#xA;    Percentage Example                                                        252&#xA;    Example with Absolute Values                                              253&#xA;  The User-Defined VBA Function RoundToSum                                    253&#xA;  RoundToSum Program Code                                                     254&#xA;  Round2Sum Lambda Expression                                                 255&#xA;  Rounding Values Alters Their Sum                                            256&#xA;  How many numbers do you need to round into the wrong direction?             258&#xA;  Usage Examples of RoundToSum                                                260&#xA;    Allocation of Overheads                                                   260&#xA;    Example of an Exact Relation of Random Numbers                            262&#xA;      The User-Defined VBA Function sbExactRandHistogrm                       263&#xA;    Fair Staff Selection Based on Team Size – sbFairStaffSelection            265&#xA;    Distribute a Sample Normally                                              267&#xA;    Distribution of Budgets Among Remaining Staff                             272&#xA;      A Simple Approach                                                       272&#xA;      A Correct Calculation                                                   272&#xA;    Take Vacation When Less is Going on                                       273&#xA;      Simple Example                                                          273&#xA;      More Complex Example                                                    274&#xA;    Assign Work Units Adjusted by Delivered Output                            275&#xA;  RoundToSum Versus Other Methods                                             276&#xA;    RoundToSum Versus Other &amp;#34;Simple&amp;#34; Methods                                  276&#xA;    RoundToSum Compared to the D’Hondt Approach                               279&#xA;  Literature                                                                  279&#xA;Random Number Generation (Excel / VBA)                                        280&#xA;  Abstract                                                                    280&#xA;  Random Integers                                                             280&#xA;    Natural Random Numbers – UniqRandInt                                      280&#xA;    Random Integers – sbRandInt                                               282&#xA;    Random Numbers with a Specified Sum                                       284&#xA;      Minimum of Random Numbers given – sbLongRandSumN                        284&#xA;      Minimum and Maximum of Random Numbers given – sbRandIntFixSum           285&#xA;  Usage Examples for Random Integers                                          287&#xA;    Krabat, the Satanic Mill – How old can the apprentices become?            287&#xA;    Generate a Math Test with Random Integer Inputs – Generate_Math_Test      288&#xA;    Monte Carlo Simulation to Generate Teams Fairly – sbGenerateTeams         290&#xA;    Monte Carlo Simulation for a Regatta Flight Plan – sbRegattaFlightPlan    294&#xA;    Chances at Board Game Risk                                                297&#xA;    A Simple Monte Carlo Simulation                                           301&#xA;  Random Floating Point Numbers                                               303&#xA;    Generate an Ideal Normal Distribution – sbGenNormDist                     303&#xA;    Generate Random Numbers with a Sum of 1 – sbRandSum1                      305&#xA;    Distributions of Random Floating Point Numbers                            307&#xA;      sbRandGeneral                                                           307&#xA;      sbRandHistogrm                                                          310&#xA;      sbRandTriang                                                            313&#xA;      sbRandTrigen                                                            314&#xA;      sbRandCauchy                                                            318&#xA;      sbRandCDFInv                                                            319&#xA;      sbRandPDF                                                               320&#xA;      sbRandCumulative                                                        321&#xA;    Brownian Bridges                                                          323&#xA;      sbGrowthSeries                                                          323&#xA;      Fix Sum from Random Corridors                                           325&#xA;  Correlated Random Numbers                                                   327&#xA;    Cholesky Decomposition                                                    327&#xA;    Iman-Conover Method                                                       329&#xA;  Practical Applications of General Random Numbers                            336&#xA;    Generating Test Data – sbGenerateTestData                                 336&#xA;    Random Numbers which do not reappear too soon – sbRandomNoRepeatBeforeN   346&#xA;  Excursus                                                                    348&#xA;    Calculating Probabilities – Drawing Cards With and Without Replacement    348&#xA;Fun without Practical Relevance for Advanced Learners                         349&#xA;  A Simple VBA Pivot Table – sbMiniPivot                                      349&#xA;  Round-Robin Tournament Pairings with Excel Worksheet Functions              352&#xA;    Developing a Formula-Based Solution for a Round-Robin Tournament          352&#xA;  TEXTJOIN                                                                    356&#xA;Index                                                                         357&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbCollatz (VBA)</title>
      <link>https://www.sulprobil.de/sbcollatz_en/</link>
      <pubDate>Sat, 23 May 2026 06:57:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbcollatz_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Mathematics is not yet ready for such problems.&amp;rdquo; [Paul Erdös]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;The Collatz conjecture states for positive integers:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;If the number is even, halve it&#xA;If the number is odd, triple it and add one&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you apply above rules repetitively, you will always reach 1.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;&#xA;&lt;p&gt;If you start with 5, you will get 5, 16, 8, 4, 2, 1 which results in the Collatz length of 6.&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--sbcollatz-code&#34;&gt;Appendix – sbCollatz Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbDec2Bin (VBA)</title>
      <link>https://www.sulprobil.de/sbdec2bin_en/</link>
      <pubDate>Sat, 23 May 2026 06:56:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbdec2bin_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;What is the binary representation (bitlength = 256) of the decimal&#xA;number -872362346234627834628734627834627834628?&#xA;Don&amp;rsquo;t ask Excel&amp;rsquo;s built-in function &lt;em&gt;DEC2BIN&lt;/em&gt;.&#xA;It can only deal with numbers between -512 and 511.&#xA;If you want to get the correct answer&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1111111111111111111111111111111111111111111111111111111111111111111111111111&#xA;1111111111111111111111111111111111111111111111111101011011111011010100011111&#xA;1001110111100101111001000010000111010110010010100110011010001001100111101010&#xA;0001010101001011110011111100&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;then have a look at the function &lt;em&gt;sbDec2Bin&lt;/em&gt; listed below.&lt;/p&gt;&#xA;&lt;p&gt;Please note that fractional parts are supported for positive decimals only.&#xA;The decimal 0.5 is in binary format equal to 0.1, for example.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Extended Euklidean Algorithm (VBA)</title>
      <link>https://www.sulprobil.de/sbeuklid_en/</link>
      <pubDate>Sat, 23 May 2026 06:55:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbeuklid_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You need to represent a number as a non-negative linear combination of two&#xA;positive integers?&lt;/p&gt;&#xA;&lt;p&gt;You can achieve this with the (external link!) &lt;a href=&#34;https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm&#34;&gt;extended Euklidean Algorithm&lt;/a&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbEuklid_en.png&#34; alt=&#34;sbEuklid_en&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note: If your desired result is a multiple of the greatest common divisor of the inputs&#xA;then there will always be an integer solution, but not necessarily a non-negative one.&#xA;Example: You can represent 1 with the inputs 5 and 3 because 1 is the GCD of 3 and 5: 1 = 2 * 5 + (-3) * 3.&#xA;But you cannot achieve this with non-negative integers only.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbMinCash (VBA)</title>
      <link>https://www.sulprobil.de/sbmincash_en/</link>
      <pubDate>Fri, 22 May 2026 05:49:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbmincash_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You need to find the right banknotes and coins to make up a given cash amount?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbmincash.png&#34; alt=&#34;sbmincash&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The function below might return with an error value, though:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;xlErrNum -   The input amount or a face value of a banknote or a coin has more than 2 decimal places&lt;/li&gt;&#xA;&lt;li&gt;xlErrValue - A face value of a banknote or a coin is negative or not valid&lt;/li&gt;&#xA;&lt;li&gt;xlErrNull -  No banknotes nor coins given&lt;/li&gt;&#xA;&lt;li&gt;xlErrNA -    There is no solution&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Known limitation: In some less fortunate cases such as banknotes with&#xA;face values 1, 6, and 10 the cash amount 13 will come out as 10, 1, 1, 1,&#xA;and not as 6, 6, 1.&#xA;Good message: This will not happen for &lt;em&gt;normal&lt;/em&gt; cases of face values 1000,&#xA;500, 200, 100, 50, 20, 10, 5, 2, 1, 0.50, 0.20, 0.10, 0.05, 0.02, and 0.01.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Accounts Receivable Problem (VBA)</title>
      <link>https://www.sulprobil.de/accounts_receivable_problem_en/</link>
      <pubDate>Fri, 22 May 2026 05:48:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/accounts_receivable_problem_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;It&amp;rsquo;s not that I&amp;rsquo;m so smart, it&amp;rsquo;s just that I stay with problems longer.&amp;rdquo; [Albert Einstein]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Mr Excel&amp;rsquo;s challenge of the month of August 2002 stated:&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;An accounts receivable department receives a check from a customer for $4,556.92.&#xA;Upon looking in the accounting system, there are 54 unpaid invoices, ranging from&#xA;$77.74 to $5,465.45. The payment must be for some exact combination of entire invoices,&#xA;but we don&amp;rsquo;t know which invoices are being paid.&amp;rdquo;&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbInterp (VBA)</title>
      <link>https://www.sulprobil.de/sbinterp_en/</link>
      <pubDate>Thu, 21 May 2026 01:52:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbinterp_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Write what you know. That should leave you with a lot of free time.&amp;rdquo; [Howard Nemerov]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you have a given set of known (x, y) points and you need to know y-parts of other given x parts then you need to interpolate. It is similar to filling gaps of a table:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbInterp_01_Screen.png&#34; alt=&#34;Robin&amp;rsquo;s Forest Tax&#34;&gt;&#xA;&lt;img src=&#34;https://www.sulprobil.de/sbInterp_02_Screen.png&#34; alt=&#34;Interpolate&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--sbinterp-code&#34;&gt;Appendix – sbInterp Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbInterp(vX &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, vY &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           vT &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; sType &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Linear&amp;#34;&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; bExtrapolate &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt; = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;           &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; sExtraType &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Interpolates y-values for target values vT with known&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;y-values vY and known x-values vX with type sType.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;sType can be:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Const or C&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Linear or L&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;LinearInVariance or LIV&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Extrapolation will be done if bExtrapolate is TRUE.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Extrapolation type sExtraType defaults to sType if empty.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Values in vX must be in ascending order. #VALUE! error&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;indicates illegal sType, #NUM! error indicates that&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;extrapolation has been switched off and #N/A tells you&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;that x-values are not given in increasing order, or&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;y-value count differs from x-value count.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbinterp_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbinterp_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 25-Dec-2023 PB V0.7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, iX &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, iY &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, iT &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, k &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; vTk, vXi&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; sT &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Type of inter- or extrapolation&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; sEType &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Extrapolation type&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt; Application&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iX = vX.Count&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iX = UBound(vX)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iY = vY.Count&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iY = UBound(vY)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iT = vT.Count&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iT = UBound(vT)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; iX &amp;lt;&amp;gt; iY &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbInterp = CVErr(xlErrNA)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;k = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; vX1(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; iX) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, vY1(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; iX) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; iX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vX(i) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; vY(i) &amp;lt;&amp;gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        k = k + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vX1(k) = vX(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vY1(k) = vY(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;iX = k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; Preserve vX1(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; iX) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; Preserve vY1(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; iX) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; iX &amp;lt; 2 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sType = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Const&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sExtraType = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Const&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 2 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; iX&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vX1(k) &amp;lt;= vX1(k - 1) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            sbInterp = CVErr(xlErrNA)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; vR(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; iT) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; sExtraType = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sEType = sType &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Same as interpolation type&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sEType = sExtraType&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; iT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vTk = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vXi = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i = .Match(vT(k), vX1, 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vTk = vT(k)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vXi = vX1(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; bExtrapolate &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        (i = 0 &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; (i = iX &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; vTk &amp;lt;&amp;gt; vXi)) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vR(k) = CVErr(xlErrNum)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        sT = sType &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Set to interpolation type&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; i = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            i = 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            sT = sEType &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Set to extrapolation type&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; i = iX &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            i = i - 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vTk &amp;lt;&amp;gt; vXi &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                sT = sEType &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Set to extrapolation type&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; sT = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; sT = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Const&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; i = i + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;C&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Const&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            vR(k) = .Index(vY1, i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;L&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Linear&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            vR(k) = .Index(vY1, i) + (vTk - .Index(vX1, i)) _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                * (.Index(vY1, i + 1) - .Index(vY1, i)) _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                / (.Index(vX1, i + 1) - .Index(vX1, i))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;LIV&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;LinearInVariance&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            vR(k) = Sqr(.Index(vY1, i) ^ 2# + (vTk - .Index(vX1, i)) _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                * (.Index(vY1, i + 1) ^ 2# - .Index(vY1, i) ^ 2#) _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                / (.Index(vX1, i + 1) - .Index(vX1, i)))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            sbInterp = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        End &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; TypeName(vT) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Range&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vT.Rows.Count &amp;gt; vT.Columns.Count &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vR = .Transpose(vR)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ElseIf&lt;/span&gt; TypeName(.Caller) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Range&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; .Caller.Rows.Count &amp;gt; .Caller.Columns.Count &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vR = .Transpose(vR)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sbInterp = vR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Options (VBA)</title>
      <link>https://www.sulprobil.de/options_en/</link>
      <pubDate>Wed, 20 May 2026 04:38:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/options_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;A classic on implementing option models is&lt;/p&gt;&#xA;&lt;p&gt;Les Clewlow and Chris Strickland: &lt;em&gt;Implementing Derivatives Models&lt;/em&gt; (ISBN 0471966517)&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately this book suffers from quite a few typos,&#xA;and the 8 pages list of errata from November 23, 2000 does not seem to be publicly available anymore.&lt;/p&gt;&#xA;&lt;p&gt;Some error corrections of the first edition:&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th style=&#34;text-align: right&#34;&gt;Page&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Row&lt;/th&gt;&#xA;          &lt;th style=&#34;text-align: left&#34;&gt;Correction&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;xvi&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;9, column 3&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;0v should be C&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;12&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;15&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Si,j = Su^jd^(&lt;strong&gt;n&lt;/strong&gt;-j)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;24&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2 from top in figure 2.12&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;set coeffi&lt;strong&gt;c&lt;/strong&gt;ients&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;70&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;4 from bottom in figure 3.13&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;for j =Nj-2 downto -N&lt;strong&gt;j+1&lt;/strong&gt; do&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;70&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Insert before last row of figure 3.13&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;C[1,-Nj] = C[1,-Nj + 1] - lambda_L&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;75&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;4 from bottom in figure 3.16&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;for j =Nj-2 downto -N&lt;strong&gt;j+1&lt;/strong&gt; do&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;75&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Insert before last row of figure 3.16&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;C[1,-Nj] = C[1,-Nj + 1] - lambda_L&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;85&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2 from bottom in figure 4.2&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;SD = sqrt( (-sum_CT2 + sum_CT * sum_CT / M ) &lt;strong&gt;)&lt;/strong&gt; * exp(-2&lt;em&gt;r&lt;/em&gt;T) / (M - 1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;89&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;2 from bottom in figure 4.5&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;SD = sqrt( (-sum_CT2 + sum_CT * sum_CT / M ) &lt;strong&gt;)&lt;/strong&gt; * exp(-2&lt;em&gt;r&lt;/em&gt;T) / (M - 1)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;99&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Delete row 9 from top&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;lnS = ln(S) = 4.6052 &lt;strong&gt;&amp;lt;- delete this row&lt;/strong&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;113&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;13 from top in figure 4.19&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Insert before for j loop&lt;/strong&gt; V1 = sig1*sig1; V2 = sig2*sig2&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;113&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;18 from top in figure 4.19&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;&lt;strong&gt;Insert before for i loop&lt;/strong&gt; Vt1 = V1; Vt2 = V2&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;118&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;Last row&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;a = &lt;strong&gt;m/N *&lt;/strong&gt; ln(Gt) &amp;hellip;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td style=&#34;text-align: right&#34;&gt;120&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;11 from bottom in figure 4.24&lt;/td&gt;&#xA;          &lt;td style=&#34;text-align: left&#34;&gt;G = productSt &lt;strong&gt;^(1&lt;/strong&gt;/N)&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;I started to implement some of the algorithms with Excel VBA.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mortality Annuities (Excel, VBA)</title>
      <link>https://www.sulprobil.de/mortality_annuities_en/</link>
      <pubDate>Wed, 20 May 2026 04:37:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/mortality_annuities_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you like to calculate annuities of a mortality table you have a bunch of choices:&lt;/p&gt;&#xA;&lt;h3 id=&#34;complex-array-formula-worst&#34;&gt;Complex Array Formula (Worst)&lt;/h3&gt;&#xA;&lt;p&gt;Apply a complex one-cell array formula:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbAnnuity_ArrayFormula.png&#34; alt=&#34;sbAnnuity_ArrayFormula&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The names are defined as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbAnnuity_Names.png&#34; alt=&#34;sbAnnuity_Names&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;simple-user-defined-function-in-vba-better&#34;&gt;Simple user defined function in VBA (Better)&lt;/h3&gt;&#xA;&lt;p&gt;A better way by far is a simple VBA function:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbAnnuity_VBA.png&#34; alt=&#34;sbAnnuity_VBA&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; LiveAnnuityPV(lYears &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, dInterestRate &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rMortalityTable &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; Range) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/mortality_annuities_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/mortality_annuities_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 22-Mar-2014 PB V0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; j &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dSum &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dProd &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dPV &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dProd = 1#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dPV = 1#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; rMortalityTable.Count - lYears&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dPV = dPV / (1# + dInterestRate)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dProd = dProd * (1# - rMortalityTable(j + lYears))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dSum = dSum + dPV * dProd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;LiveAnnuityPV = dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;pre-calculated-table-plus-an-npv-formula-maybe-best&#34;&gt;Pre-calculated Table plus an NPV Formula (Maybe Best)&lt;/h3&gt;&#xA;&lt;p&gt;The fastest and maybe best approach seems to be a pre-calculated table and an NPV formula:&lt;/p&gt;</description>
    </item>
    <item>
      <title>QuickPerm (Excel / VBA)</title>
      <link>https://www.sulprobil.de/quickperm_en/</link>
      <pubDate>Wed, 20 May 2026 04:36:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/quickperm_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you need to generate all permutations of an array&#xA;I suggest to use the algorithm (external link!) &lt;a href=&#34;https://www.quickperm.org&#34;&gt;Quickperm&lt;/a&gt;.&#xA;It is one of the most efficient permutation algorithms.&#xA;It is based on swaps of single array elements and inspired by Heap sort.&lt;/p&gt;&#xA;&lt;p&gt;The version presented here is the CountDown variant.&#xA;For the Excel / VBA implementation all indices were increased by one&#xA;so that arrays start with index 1.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;&#xA;&lt;p&gt;Input:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Combinations with Subsets k of n (Excel / VBA)</title>
      <link>https://www.sulprobil.de/combinations_with_k_subsets_of_n_en/</link>
      <pubDate>Wed, 20 May 2026 04:35:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/combinations_with_k_subsets_of_n_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This algorithm generates all subsets of n with k elements.&lt;/p&gt;&#xA;&lt;p&gt;The Excel function &lt;em&gt;COMBIN(n, k)&lt;/em&gt; shows the count of all combinations, but the algorithm&#xA;presented here lists all combinations individually so that you can examine them if necessary.&#xA;The program is fast - you can compare to the formula solutions you can find below under &lt;strong&gt;Other Links&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;example&#34;&gt;Example&lt;/h3&gt;&#xA;&lt;p&gt;Input:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/combinations_with_k_subsets_of_n_input.png&#34; alt=&#34;combinations_with_k_subsets_of_n_input&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Output:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/combinations_with_k_subsets_of_n_output.png&#34; alt=&#34;combinations_with_k_subsets_of_n_output&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;literature&#34;&gt;Literature&lt;/h2&gt;&#xA;&lt;p&gt;Reingold, Nievergelt, Deo: Combinatorial Algorithms, 1977, Algorithm 5.9, p. 186, ISBN 0-13-152447-X&lt;/p&gt;</description>
    </item>
    <item>
      <title>Fix Sum from Random Corridors (Excel)</title>
      <link>https://www.sulprobil.de/sbfixsumfromrandomcorridors_en/</link>
      <pubDate>Wed, 20 May 2026 04:34:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbfixsumfromrandomcorridors_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You want seven random numbers with different border values to add up to 100 exactly?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbfixsumfromrandomcorridors.png&#34; alt=&#34;sbfixsumfromrandomcorridors&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbfixsumfromrandomcorridors_formulas.png&#34; alt=&#34;sbfixsumfromrandomcorridors_formulas&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Important note: There will be no solution if the sum of the lower borders exceeds 100 or if&#xA;the sum of the upper borders is less than 100. This is being checked in cells K2:K3.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-distribution-of-the-random-numbers&#34;&gt;The Distribution of the Random Numbers&lt;/h2&gt;&#xA;&lt;p&gt;The generated random numbers from above example are quite equally distributed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>PF_Allocate (VBA)</title>
      <link>https://www.sulprobil.de/pf_allocate_en/</link>
      <pubDate>Wed, 20 May 2026 04:33:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/pf_allocate_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you need to generate random portfolios with a given total sum and lower boundaries and upper&#xA;boundaries for each asset, you can take the function PF_Allocate() shown below.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/PF_Allocate.png&#34; alt=&#34;PF_Allocate&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--pf_allocate-code&#34;&gt;Appendix – PF_Allocate Code&lt;/h2&gt;&#xA;&lt;p&gt;Please note that this program needs (calls) &lt;a href=&#34;https://www.sulprobil.de/uniqrandint_en/&#34; title=&#34;UniqRandInt&#34;&gt;UniqRandInt&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; PF_Allocate(db &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vlb &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vub &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Generate a portfolio of assets x1..xN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;x1..xN being random numbers (double) with:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;x1+x2+..xN = db &amp;#39;budget&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;xi &amp;gt;= vlb(i)    &amp;#39;lower bound vector&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;xi &amp;lt;= vub(i)    &amp;#39;upper bound vector&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/pf_allocate_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/pf_allocate_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 26-Jul-2020 PB V0.11&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dcumx &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dcumlb &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dcumub &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dxlb &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dxub &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Application.Volatile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;dcumlb = Application.WorksheetFunction.Sum(vlb)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dcumub = Application.WorksheetFunction.Sum(vub)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dcumlb &amp;gt; db &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; dcumub &amp;lt; db &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    PF_Allocate = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;n = vlb.Count&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; dR(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dcumx = 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;For i = 1 To n &amp;#39;Old biased solution&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Each&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;In&lt;/span&gt; VBUniqRandInt(n, n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/uniqrandint_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vlb(i) &amp;gt; vub(i) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        PF_Allocate = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dcumlb = dcumlb - vlb(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dcumub = dcumub - vub(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dxlb = db - dcumx - dcumub&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dxlb &amp;lt; vlb(i) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; dxlb = vlb(i) &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;dxlb = Min(..)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    dxub = db - dcumx - dcumlb&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dxub &amp;gt; vub(i) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; dxub = vub(i) &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;dxub = Max(..)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    dR(i) = dxlb + Rnd() * (dxub - dxlb)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dcumx = dcumx + dR(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PF_Allocate = dR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linear Equations with Rational Coefficients (VBA)</title>
      <link>https://www.sulprobil.de/linear_equations_en/</link>
      <pubDate>Wed, 20 May 2026 04:32:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/linear_equations_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Linear equations of the form A * x = b with the non-singular quadratic&#xA;matrix A and the result vector b have a unique solution because the&#xA;determinant of A is not zero.&#xA;If the coefficients of A and of b are rational numbers then&#xA;the solution is also rational.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Linear_Equations_with_rational_coefficients.png&#34; alt=&#34;Linear_Equations_with_rational_coefficients&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;see-also&#34;&gt;See also&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sulprobil.de/sbnrn_en/&#34; title=&#34;sbNRN&#34;&gt;sbNRN&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;literature&#34;&gt;Literature&lt;/h2&gt;&#xA;&lt;p&gt;(External Link!) &lt;a href=&#34;https://www.sciencedirect.com/science/article/pii/0771050X7890027X/pdf?md5=b667c7b5a79db140f4b1e10319c6ba89&amp;amp;pid=1-s2.0-0771050X7890027X-main.pdf&#34;&gt;Oliver Aberth, A method for exact computation with rational numbers,  JCAM, vol 4, no. 4, 1978&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Create statistics for weighted values (VBA)</title>
      <link>https://www.sulprobil.de/sbswv_en/</link>
      <pubDate>Wed, 20 May 2026 04:31:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbswv_en/</guid>
      <description>&lt;h2 id=&#34;statistics-for-weighted-values&#34;&gt;Statistics for Weighted Values&lt;/h2&gt;&#xA;&lt;p&gt;Here I provide statistics for weighted values:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Average&lt;/li&gt;&#xA;&lt;li&gt;Correlation&lt;/li&gt;&#xA;&lt;li&gt;Covariance&lt;/li&gt;&#xA;&lt;li&gt;Kurtosis&lt;/li&gt;&#xA;&lt;li&gt;Mode&lt;/li&gt;&#xA;&lt;li&gt;Median&lt;/li&gt;&#xA;&lt;li&gt;Skewness (whole statistical population)&lt;/li&gt;&#xA;&lt;li&gt;Standard Deviation (sample and whole statistical population)&lt;/li&gt;&#xA;&lt;li&gt;Variance&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Please notice that the prerequisite here is that the weights are natural numbers, i.e. positive integers.&lt;/p&gt;&#xA;&lt;h2 id=&#34;example&#34;&gt;Example&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbSWV_Screen.png&#34; alt=&#34;sbSWV_Screen&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix---sbswv-code&#34;&gt;Appendix - sbSWV Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#Const&lt;/span&gt; SORTED = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbSWV(sStat &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;ParamArray&lt;/span&gt; vInput() &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate some statistical measures of weighted values&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbswv_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbswv_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 20-Aug-2024 PB V0.81&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; d &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, d2 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dSum &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, j &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, k &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, m &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; vV, vV2, vV3, vW &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Variants&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt; Application.WorksheetFunction&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vV = .Transpose(vInput(0))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sStat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;COVAR&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;CORREL&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vV2 = .Transpose(vInput(1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vW = .Transpose(vInput(2))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vW = .Transpose(vInput(1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; errhdl&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;i = vV(1) &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Force error in case of vertical arrays&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; UBound(vV) &amp;lt;&amp;gt; UBound(vW) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Arrays of values and of weights must have same dimension&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    sbSWV = CVErr(xlErrNum)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; UCase(sStat)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;AVERAGE&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = .SumProduct(vV, vW) / .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;CORREL&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vV3 = vV&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dSum = .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = .SumProduct(vV, vW) / dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d2 = .SumProduct(vV2, vW) / dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = LBound(vV) &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vV)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vV3(i) = vW(i) * (vV(i) - d) * (vV2(i) - d2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vV(i) = vW(i) * (vV(i) - d) ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vV2(i) = vW(i) * (vV2(i) - d2) ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = .Sum(vV3) / Sqr(.Sum(vV) * .Sum(vV2))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;COVAR&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dSum = .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = .SumProduct(vV, vW) / dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d2 = .SumProduct(vV2, vW) / dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = LBound(vV) &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vV)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vV(i) = vW(i) * (vV(i) - d) * (vV2(i) - d2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = .Sum(vV) / dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;KURT&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    n = .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; dV(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    k = 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; vW(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        dV(k) = vV(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        k = k + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = .Kurt(dV)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;MODE&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    k = .Max(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; k &amp;lt; 2 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        sbSWV = CVErr(xlErrNA)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = vV(.Match(.Max(vW), vW, &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;MEDIAN&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; .Min(vW) &amp;lt; 1 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        sbSWV = CVErr(xlErrNA)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    k = 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    j = .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    m = j &lt;span style=&#34;color:#00f&#34;&gt;Mod&lt;/span&gt; 2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = LBound(vW) &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vW(i) &lt;span style=&#34;color:#00f&#34;&gt;Mod&lt;/span&gt; 1 &amp;lt;&amp;gt; 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            sbSWV = CVErr(xlErrNum)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;#If Not SORTED Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Ensure ascending values in case input is unsorted.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;This simple bubble sort leads to a quadratic runtime&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;but it&amp;#39;s still quicker on 50 input values or more than&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Lorimer Miller&amp;#39;s nifty worksheet function approach&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;=LOOKUP(2,1/FREQUENCY(SUM(B1:B50)/2,SUMIF(A1:A50,&amp;#34;&amp;lt;=&amp;#34;&amp;amp;A1:A50,B1:B50)),A1:A50)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;BTW: Lorimer&amp;#39;s approach is different from Excel&amp;#39;s MEDIAN&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(see below); and his other elegant array formula&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;=MEDIAN(IF(TRANSPOSE(ROW(A1:A1000))&amp;lt;=B1:B50,A1:A50))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;calculates like Excel&amp;#39;s MEDIAN but IMHO it&amp;#39;s way too slow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; n = i + 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vV(n) &amp;lt; vV(i) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    d = vV(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    vV(i) = vV(n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    vV(n) = d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    d = vW(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    vW(i) = vW(n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    vW(n) = d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        k = k + vW(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 2 * k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; j + m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; m = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#00f&#34;&gt;#If Not SORTED Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Ensure vV(i + 1) is next greater value&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;                    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; n = i + 2 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vV(n) &amp;lt; vV(i + 1) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            vV(i + 1) = vV(n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Here Lorimer&amp;#39;s function mentioned above would&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;                &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;return vV(i), the lower value&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;                sbSWV = (vV(i) + vV(i + 1)) / 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                sbSWV = vV(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Case &lt;span style=&#34;color:#00f&#34;&gt;Is&lt;/span&gt; &amp;gt; j + m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            sbSWV = vV(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        End &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;SKEW.P&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    n = .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; dV(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    k = 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; vW(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        dV(k) = vV(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        k = k + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = .Skew_p(dV)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;STDEV&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dSum = .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = .SumProduct(vV, vW) / dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = LBound(vV) &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vV)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vV(i) = Abs(vV(i) - d) ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = Sqr(.SumProduct(vV, vW) / (dSum - 1#))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;STDEV.P&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dSum = .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = .SumProduct(vV, vW) / dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = LBound(vV) &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vV)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vV(i) = Abs(vV(i) - d) ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = Sqr(.SumProduct(vV, vW) / dSum)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;VAR&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dSum = .Sum(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = .SumProduct(vV, vW) / dSum&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = LBound(vV) &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vV)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vV(i) = vW(i) * (vV(i) - d) ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = .Sum(vV) / (dSum - 1#)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbSWV = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;errhdl:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Transpose variants to be able to address them&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;with vV(i), not vV(i,1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;vV = .Transpose(vV)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vW = .Transpose(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; sStat&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;COVAR&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;CORREL&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vV2 = .Transpose(vV2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ApplicationVersion (VBA)</title>
      <link>https://www.sulprobil.de/applicationversion_en/</link>
      <pubDate>Wed, 20 May 2026 04:30:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/applicationversion_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;{Sturgeon&amp;rsquo;s Law} &amp;ldquo;Sure, 90% of all software is crap.&#xA;That&amp;rsquo;s because 90% of everything is crap.&amp;rdquo; [Mary Shaw, Carnegie-Mellon University]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Microsoft has decided in its eternal wisdom not to increase &lt;em&gt;Application.Version&lt;/em&gt;&#xA;beyond 16 from Excel 2016 on.&lt;/p&gt;&#xA;&lt;p&gt;My function &lt;em&gt;ApplicationVersion&lt;/em&gt; fixes this and returns a human readable version string.&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--applicationversion-code&#34;&gt;Appendix – ApplicationVersion Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; ApplicationVersion(&lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; bShowBuild365 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt; = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;String&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Returns MS Excel&amp;#39;s version - with a little kludge&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/applicationversion_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/applicationversion_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 20-Oct-2024 PB V0.61&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Integer&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt; Application&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;n = Val(.Version)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 16&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2016&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;We know what we are doing&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Excel 2024 (LTSC) introduced ValueToText&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;  n = Val(.ValueToText(19))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; n = 19 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; .Build = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;17932&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2024&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bShowBuild365 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;When all of them are 365 you might want to know the build.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;        ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 365 (Build &amp;#34;&lt;/span&gt; &amp;amp; .Build &amp;amp; &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;)&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 365&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Excel 2021 (LTSC) introduced RandArray&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    n = .RandArray(1, 1, 18, 18, &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;)(1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; n = 18 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2021&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Excel 2019 introduced TextJoin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;      n = Val(.TextJoin(&lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34; &amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;, &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;17&amp;#34;&lt;/span&gt;))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; n = 17 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2019&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 15&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2013&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 14&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2010&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 12&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2007&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 11&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2003&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 10&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2002&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 9&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 2000&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 97&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 7&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 7/95&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; 5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Excel 5&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Case&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ApplicationVersion = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;[Error]&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Select&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRebalancedReturn (VBA)</title>
      <link>https://www.sulprobil.de/sbrebalancedreturn_en/</link>
      <pubDate>Wed, 20 May 2026 04:29:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbrebalancedreturn_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Portfolio rebalancing is the process of bringing the different asset classes back&#xA;into proper relationship following a significant change in one or more assets.&#xA;You return your portfolio to the proper mix of stocks, bonds, cash or other assets&#xA;when they no longer conform to your plan/limits.&lt;/p&gt;&#xA;&lt;p&gt;An example:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Example_Rebalanced_Portfolio.PNG&#34; alt=&#34;Example_Rebalanced_Portfolio&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--sbrebalancedreturn-code&#34;&gt;Appendix – sbRebalancedReturn Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Const&lt;/span&gt; CMaxDouble = 1.79769313486231E+308&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbRebalancedReturn(rARM &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; Range, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rIWV &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; Range, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; lRF &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt; = 0, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; dDT &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt; = CMaxDouble) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;RebalancedReturn calculates balanced returns for a&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;portfolio with given&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;rARM - asset return matrix (columns show different&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       assets, rows show returns per asset over time)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;rIWV - initial weight vector for the assets&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;lRF  - rebalancing frequency (in time steps = rows)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       If lRF &amp;gt; 0 then each lRF time step rebalancing&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       will take place&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       If lRF = 0 then no rebalancing will take place&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       If lRF &amp;lt; 0 then each -lRF time step after last&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       rebalance portfolio will be rebalanced again&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;dDT  - drift tolerance %, if any asset has drifted by&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       by more than dDT (relative measure) then the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       portfolio will be rebalanced AND the internal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;       rebalancing frequency count will be reset&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;The output matrix shows portfolio returns % in first&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;column, then end-of-period asset weights and finally&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;boolean output values in last column, showing whether&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;a rebalance happened.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;This function has been inspired by Andreas Steiner&amp;#39;s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;similar function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbrebalancedreturn_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbrebalancedreturn_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 19-Mar-2011 PB V0.2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, j &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, k &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, m &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; bDrifted &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt;, bForceRB &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;n = rARM.Rows.Count &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Number of observations&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;m = rARM.Columns.Count &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Number of assets&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; m &amp;lt;&amp;gt; rIWV.Columns.Count &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    rIWV.Rows.Count &amp;lt;&amp;gt; 1 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbRebalancedReturn = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; w0(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, x(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; r(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n, 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lRF = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; lRF = n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lRF &amp;lt; 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lRF = -lRF&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bForceRB = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    bForceRB = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; vR(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n, 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m + 2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    x(i) = rIWV(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    w0(i) = x(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        r(j, i) = rARM(j, i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;k = 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Model rebalancing tolerance&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bDrifted &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; bForceRB &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; k = i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate period start weights&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    vR(i, m + 2) = (i - k) &lt;span style=&#34;color:#00f&#34;&gt;Mod&lt;/span&gt; lRF = 0 &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; bDrifted&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vR(i, m + 2) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            x(j) = w0(j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            x(j) = vR(i - 1, 1 + j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate portfolio return&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vR(i, 1) = vR(i, 1) + x(j) * r(i, j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate period end weights &amp;amp; check for drift&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    bDrifted = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vR(i, 1 + j) = x(j) * (1# + r(i, j)) / (1# + vR(i, 1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        bDrifted = bDrifted &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; Abs(vR(i, 1 + j) - w0(j)) &amp;gt; dDT&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sbRebalancedReturn = vR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ArrayDim (VBA)</title>
      <link>https://www.sulprobil.de/arraydim_en/</link>
      <pubDate>Wed, 20 May 2026 04:28:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/arraydim_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;How do you determine the number of dimensions of an array?&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--arraydim-code&#34;&gt;Appendix – ArrayDim Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; ArrayDim(v &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Returns number of dimensions of an array or 0 for&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;an undimensioned array or -1 if no array at all.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/arraydim_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/arraydim_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 10-May-2010 PB V0.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ArrayDim = -1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; IsArray(v) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;On &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Err.Clear &amp;#39;Not necessary&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;While&lt;/span&gt; IsNumeric(UBound(v, i + 1))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Err.Number &amp;lt;&amp;gt; 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  i = i + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ArrayDim = i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Sub&lt;/span&gt; test()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Expected output: -1, 0, 1, 3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; v&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; w()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; x(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; 2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; y(1, 2, 3)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Debug.Print ArrayDim(v)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Debug.Print ArrayDim(w)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Debug.Print ArrayDim(x)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Debug.Print ArrayDim(y)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Sub&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Quota Change as Fraction (Excel/VBA)</title>
      <link>https://www.sulprobil.de/quota_change_as_fraction_en/</link>
      <pubDate>Wed, 20 May 2026 04:27:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/quota_change_as_fraction_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes you need to present quota changes in a simple way.&#xA;You can achieve this with fractions:&lt;/p&gt;&#xA;&lt;p&gt;Example: Miller, Smith, and Schulz form a joint heirship.&#xA;Smith dies without an heir. His quota will be distributed.&#xA;Schulz also dies. His widows will receive 2/3 of his quota,&#xA;his only child will get 1/3. Please note that you need to enter&#xA;this as &lt;em&gt;=1/3 * 2/3&lt;/em&gt; resp. &lt;em&gt;=1/3 * 1/3&lt;/em&gt; whereby the first &lt;em&gt;1/3&lt;/em&gt;&#xA;represents Schulz&amp;rsquo; original quota.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Distribute a Sample normally (VBA)</title>
      <link>https://www.sulprobil.de/distribute_sample_normally_en/</link>
      <pubDate>Wed, 20 May 2026 04:26:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/distribute_sample_normally_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You have 11.256 christmas trees in stock. A customer wants to purchse 1.500 of them,&#xA;with one condition: the average height of the trees must be 6.50 meters.&lt;/p&gt;&#xA;&lt;p&gt;Your goal is to keep the remaining trees as close to a normal distribution as possible.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/distribute_sample_normally_diagram.png&#34; alt=&#34;distribute_sample_normally_diagram&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;How can you achieve this?&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-sample-calculation&#34;&gt;A Sample Calculation&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/distribute_sample_normally.png&#34; alt=&#34;distribute_sample_normally&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Let’s assume the count and distribution of trees are as shown in the diagram above.&lt;/p&gt;</description>
    </item>
    <item>
      <title>ManageOneDriveSync (VBA)</title>
      <link>https://www.sulprobil.de/manageonedrivesync_en/</link>
      <pubDate>Sun, 17 May 2026 07:08:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/manageonedrivesync_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Microsoft Microsoft OneDrive is a file hosting service provided by Microsoft.&#xA;With the help of this service, files can be uploaded and also retrieved and edited from other services.&lt;/p&gt;&#xA;&lt;p&gt;However, this service requires some time to synchronize files.&#xA;The VBA subroutine &lt;em&gt;Check_OneDrive_Sync&lt;/em&gt; checks whether a program has already been fully synchronized (i.e. is ready to run).&lt;/p&gt;&#xA;&lt;p&gt;When creating or editing many files, it is sometimes advisable to temporarily disable OneDrive synchronization.&#xA;This is made possible by the VBA subroutine &lt;em&gt;ManageOnedriveSync&lt;/em&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Write-Log (PowerShell)</title>
      <link>https://www.sulprobil.de/write-log_en/</link>
      <pubDate>Sun, 17 May 2026 06:52:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/write-log_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Knowing is not enough; we must apply. Willing is not enough; we must do.&amp;rdquo; [Johann Wolfgang von Goethe]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;PowerShell is a Microsoft Windows based object orientated script / programming language.&#xA;It has its own command line interface.&lt;/p&gt;&#xA;&lt;p&gt;Normally I would prefer a platform independent language like Python.&#xA;But within a Windows environment you can do almost anything with PowerShell.&#xA;And sometimes I just do not like to perform all tasks with Excel / VBA.&#xA;PowerShell can perform tasks in background mode, at a scheduled time, etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Allocation of Overheads (Excel / VBA)</title>
      <link>https://www.sulprobil.de/allocation_of_overheads_en/</link>
      <pubDate>Sat, 16 May 2026 10:44:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/allocation_of_overheads_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;When allocating overhead costs to products you often encounter the fact that&#xA;the resulting sum of allocated overheads does not equal the original cost sum.&#xA;Due to rounding differences you frequently face a little cent difference.&#xA;In this case the user defined function&#xA;&lt;a href=&#34;https://www.sulprobil.de/roundtosum_en/&#34; title=&#34;RoundToSum&#34;&gt;RoundToSum&lt;/a&gt; can help.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-real-life-example&#34;&gt;A real-life Example&lt;/h2&gt;&#xA;&lt;p&gt;We present an allocation of overheads where all individual cent values accurately add up&#xA;to their intermediate or final sums.&lt;/p&gt;&#xA;&lt;p&gt;First you define how the overheads have to be allocated to support cost centres:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Excel Don&#39;ts</title>
      <link>https://www.sulprobil.de/excel_donts_en/</link>
      <pubDate>Sat, 16 May 2026 10:43:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/excel_donts_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;ldquo;Always listen to experts. They&amp;rsquo;ll tell you what can&amp;rsquo;t be done and why. Then do it.&amp;rdquo; [Robert Heinlein]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Criticism should be constructive - in general I try to show how things could or should positively be done.&#xA;But during more than 30 years of Excel practice I encountered some examples which could and maybe&#xA;should be avoided.&lt;/p&gt;&#xA;&lt;h2 id=&#34;a-table-of-what-you-should-avoid&#34;&gt;A table of what you should avoid&lt;/h2&gt;&#xA;&lt;p&gt;Please look at this list as an intellectual challenge and take it with a grain of salt.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cell Based Charts (Excel)</title>
      <link>https://www.sulprobil.de/cell_based_charts_en/</link>
      <pubDate>Sat, 16 May 2026 05:40:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/cell_based_charts_en/</guid>
      <description>&lt;p&gt;Dietmar P. came up with a nice cell based chart.&#xA;I applied some changes and enhancements like introducing auto-scaling and adding two parameters:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A number format to allow for a general format change if necessary&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;A Boolean parameter to control whether to switch the green and red colouring of the chart.&#xA;If you hire a contractor then you might like to show staying below the budget with a green colour,&#xA;but if you like to present sales figures then it might be the other way round&lt;/p&gt;</description>
    </item>
    <item>
      <title>Budget Control (Excel)</title>
      <link>https://www.sulprobil.de/budget_control_en/</link>
      <pubDate>Fri, 15 May 2026 13:01:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/budget_control_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;If you want creativity, take a zero off your budget. If you want sustainability, take off two zeros.&amp;rdquo; [Jaime Lerner]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This is a simple budget planning and control table.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/budget_control.png&#34; alt=&#34;budget_control&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Enter into cells B5:E5 your departments&amp;rsquo; annual budget.&lt;/p&gt;&#xA;&lt;p&gt;In cells G7:J18 should be the corresponding seasonal weights for each department.&#xA;As an example please see festive articles (Easter and Christmas) as well as summer articles.&#xA;The purchase department will have corresponding costs 2 months in advance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Linear Breakdown (Excel)</title>
      <link>https://www.sulprobil.de/linear_breakdown_en/</link>
      <pubDate>Fri, 15 May 2026 13:00:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/linear_breakdown_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;I&amp;rsquo;m not such a big fan of having a linear answer to things.&amp;rdquo; [Adam Driver]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;How can you break down annual data such as:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Linear_Breakdown_Annual_Data.png&#34; alt=&#34;Linear_Breakdown_Annual_Data&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;to monthly data which is piece-wise linear:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Linear_Breakdown_Monthly_Data.png&#34; alt=&#34;Linear_Breakdown_Monthly_Data&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;?&lt;/p&gt;&#xA;&lt;p&gt;In cells A2:B5 you enter your annual input data.&#xA;In cells A8:A56 you enter the chronological month ends.&#xA;For a start you can enter into B8: &lt;em&gt;=B2/12&lt;/em&gt;.&#xA;In B9 you enter &lt;em&gt;=VLOOKUP(DATE(YEAR($A9)-1,12,31),A$8:B8,2)+(MONTH($A9))*(VLOOKUP(YEAR($A9),$A$2:$B$5,2)-VLOOKUP(DATE(YEAR($A9)-1,12,31),A$8:B8,2)*12)/(12*(12+1)/2)&lt;/em&gt;&#xA;and copy down.&#xA;In D8 enter &lt;em&gt;=STDEV(B9:B56)&lt;/em&gt;&#xA;In case you need EXACT numbers rounded to the cent, preserving the original sum,&#xA;enter into C9 &lt;em&gt;=ROUND(B9,2)&lt;/em&gt;&#xA;and into D10 &lt;em&gt;=ROUND(SUM(B$9:B10),2)-SUM(C$9:C9)&lt;/em&gt; and copy down.&#xA;This is just a pragmatic rounding method without VBA. If you like to perform this&#xA;correctly, look up &lt;a href=&#34;https://www.sulprobil.de/roundtosum_en/&#34; title=&#34;roundtosum&#34;&gt;RoundToSum&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRandGeneral (VBA)</title>
      <link>https://www.sulprobil.de/sbrandgeneral_en/</link>
      <pubDate>Thu, 14 May 2026 16:01:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbrandgeneral_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;It pays to be obvious, especially if you have a reputation for subtlety.&amp;rdquo; [Isaac Asimov]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you want to create a step-wise linear random number distribution - and you can approximate&#xA;any distribution with a given accuracy with such one - then you can use my user defined&#xA;function sbRandGeneral.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbRandGeneral_01_Screen.png&#34; alt=&#34;sbRandGeneral&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;documentation&#34;&gt;Documentation&lt;/h2&gt;&#xA;&lt;p&gt;The documentation for this application you can open and read here:&lt;/p&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sulprobil.de/080102_PB_01_General_Doc.pdf&#34;&gt;080102_PB_01_General_Doc.pdf&lt;/a&gt; [30 KB PDF file, download, open, and use at your own risk]&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRandTrigen (VBA)</title>
      <link>https://www.sulprobil.de/sbrandtrigen_en/</link>
      <pubDate>Thu, 14 May 2026 15:47:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbrandtrigen_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Please notice that sbRandTrigen needs and calls&#xA;&lt;a href=&#34;https://www.sulprobil.de/sbrandtriang_en/&#34; title=&#34;sbRandTriang&#34;&gt;sbRandTriang&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbRandTrigen_01_Screen.png&#34; alt=&#34;sbRandTrigen&#34;&gt;&#xA;&lt;img src=&#34;https://www.sulprobil.de/sbRandTrigen_02_Screen.png&#34; alt=&#34;sbRandTrigen&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;documentation&#34;&gt;Documentation&lt;/h2&gt;&#xA;&lt;p&gt;The documentation for this application you can open and read here:&lt;/p&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sulprobil.de/071228_PB_02_Trigen_Doc.pdf&#34;&gt;071228_PB_02_Trigen_Doc.pdf&lt;/a&gt; [38 KB PDF file, download, open, and use at your own risk]&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--sbrandtrigen-code&#34;&gt;Appendix – sbRandTrigen Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbRandTrigen(dBottom &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dMode &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dTop &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dBottomPerc &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dTopPerc &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; dRandom = 1#) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Generates dMin random number, Triang distributed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;with given first and last decile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;[see Vose: Risk Analysis, 2nd ed., p. 129]&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbrandgeneral_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbrandgeneral_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 19-Nov-2011 PB V0.32&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Similar to @RISK&amp;#39;s (C) RiskTrigen function.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;sbRandTrigen(bottom, mode, top, bottom percentile, top percentile)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;specifies a triangular distribution with three points — one&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;at the mode and two at the specified bottom and top percentiles.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;The bottom percentile and top percentile are values between&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;0 and 100. Each percentile value gives the percentile of the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;total area under the triangle that is on the left side of the&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;given point.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Example:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;sbRandTrigen(1,8,10,20,95) will call&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;sbRandTriang(-6.13212712795534, 8, 11.8648937411641).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Please ensure that you execute Randomize before you call &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;this function for the first time.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; dBottomLast &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; dModeLast &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; dTopLast &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; dBottomPercLast &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; dTopPercLast &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; dMin &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; dMax &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dMaxNew &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; da0 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, da1 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, da2 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; da3 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, da4 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dfe &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, df1e &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dBottomPerc2 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dTopPerc2 &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dBottom = dBottomLast &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; dMode = dModeLast &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; dTop = dTopLast _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; dBottomPerc = dBottomPercLast &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; dTopPerc = dTopPercLast _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; IsError(dMin) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbRandTrigen = sbRandTriang(dMin, dMode, dMax, dRandom)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dBottomLast = dBottom&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dModeLast = dMode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dTopLast = dTop&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dBottomPercLast = dBottomPerc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dTopPercLast = dTopPerc&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dBottomPerc2 = dBottomPerc / 100#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dTopPerc2 = 1# - dTopPerc / 100#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dMode &amp;lt;= dBottom &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; dTop &amp;lt;= dMode &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dMin = CVErr(xlErrValue) &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Trigger rerun next time&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    sbRandTrigen = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dBottomPerc2 &amp;lt; 0# &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; dTopPerc2 &amp;lt; 0# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dMin = CVErr(xlErrDiv0) &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Trigger rerun next time&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    sbRandTrigen = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dTopPerc2 = 0# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dBottomPerc2 = 0# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        sbRandTrigen = sbRandTriang(dBottom, dMode, dTop, dRandom)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbRandTrigen = sbRandTrigen(dBottom, dMode, dTop, dBottomPerc2, dTopPerc2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;da4 = dBottomPerc2 * dTopPerc2 - dBottomPerc2 + 1# - 2# * dTopPerc2 + dTopPerc2 ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;da3 = -2# * dBottomPerc2 * dTopPerc2 * dTop - 2# * dBottomPerc2 * dTopPerc2 * dMode - _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      4# * dTop + 4# * dBottomPerc2 * dTop + 2# * dTopPerc2 * dMode + 4# * dTopPerc2 * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dTop + 2# * dTopPerc2 * dBottom - 2# * dTopPerc2 ^ 2# * dMode - _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      2# * dTopPerc2 ^ 2# * dBottom&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;da2 = dBottomPerc2 * dTopPerc2 * dTop ^ 2# + 4# * dBottomPerc2 * dTopPerc2 * dMode * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dTop + dBottomPerc2 * dTopPerc2 * dMode ^ 2# - 6# * dBottomPerc2 * dTop ^ 2# + _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      6# * dTop ^ 2# - 4# * dTopPerc2 * dMode * dTop - 2# * dTopPerc2 * dTop ^ 2# - 2# * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dTopPerc2 * dBottom * dMode - 4# * dTopPerc2 * dBottom * dTop + dTopPerc2 ^ 2# * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dMode ^ 2# + 4# * dTopPerc2 ^ 2# * dBottom * dMode + dTopPerc2 ^ 2# * dBottom ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;da1 = -2# * dBottomPerc2 * dTopPerc2 * dMode * dTop ^ 2# - 2# * dBottomPerc2 * dTopPerc2 * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dMode ^ 2# * dTop + 4# * dTop ^ 3# * dBottomPerc2 - 4# * dTop ^ 3# + 2# * dTopPerc2 * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dMode * dTop ^ 2# + 4# * dTopPerc2 * dBottom * dMode * dTop + 2# * dTopPerc2 * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dBottom * dTop ^ 2# - 2# * dTopPerc2 ^ 2# * dBottom * dMode ^ 2# - 2# * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dTopPerc2 ^ 2# * dBottom ^ 2# * dMode&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;da0 = dBottomPerc2 * dTopPerc2 * dMode ^ 2# * dTop ^ 2# - dBottomPerc2 * dTop ^ 4# + dTop ^ 4# - _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      2# * dTopPerc2 * dBottom * dMode * dTop ^ 2# + dTopPerc2 ^ 2# * dBottom ^ 2# * dMode ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dMax = dTop + (dTop - dMode) / (1# - dTopPerc2) ^ 2#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Newton iteration&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;While&lt;/span&gt; Abs(dMaxNew - dMax) &amp;gt; 0.000000000001&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i = i + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; i &amp;gt; 30 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Abs(dfe) &amp;gt; 0.000000000001 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            dMin = CVErr(xlErrDiv0) &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Trigger rerun next time&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            sbRandTrigen = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        Else&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dMaxNew = dMax&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dfe = da4 * dMaxNew ^ 4# + da3 * dMaxNew ^ 3# + da2 * dMaxNew ^ 2# + da1 * dMaxNew + da0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    df1e = 4# * da4 * dMaxNew ^ 3# + 3# * da3# * dMaxNew ^ 2# + 2# * da2 * dMaxNew + da1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dMax = dMax - dfe / df1e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dMin = dMax - (dMax - dTop) ^ 2# / dTopPerc2 / (dMax - dMode)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sbRandTrigen = sbRandTriang(dMin, dMode, dMax, dRandom)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRandTriang (VBA)</title>
      <link>https://www.sulprobil.de/sbrandtriang_en/</link>
      <pubDate>Thu, 14 May 2026 14:47:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbrandtriang_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;The triangular distribution is a continuous probability distribution with&#xA;a probability density function shaped like a triangle.&#xA;It is a simple distribution because you only need its mininimum, its median,&#xA;and its maximum value:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbRandTriang_01_Screen.png&#34; alt=&#34;sbRandTriang&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;This distribution is sometimes also called the &lt;strong&gt;distribution of missing data&lt;/strong&gt;&#xA;because you can use it with a minimal given amount of information.&#xA;It is often used to simulate expert opinions or when it is too difficult or too expensive&#xA;to gather more data.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRandSum1 (VBA)</title>
      <link>https://www.sulprobil.de/sbrandsum1_en/</link>
      <pubDate>Thu, 14 May 2026 12:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbrandsum1_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;We present an example of a random number generation with a side condition.&#xA;The sum of all created random numbers should be 1.&#xA;This can be achieved by many different approaches.&lt;/p&gt;&#xA;&lt;p&gt;Three possible approaches are:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Reduce grade of freedom successively: create first random number,&#xA;then the second one in range[0,1-first), the third one in [0,1-first-second), &amp;hellip;, the last will be 1-sum of all others&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Create n random numbers and divide them by their sum&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRandIntFixSum (VBA)</title>
      <link>https://www.sulprobil.de/sbrandintfixsum_en/</link>
      <pubDate>Thu, 14 May 2026 11:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbrandintfixsum_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You want to create &lt;em&gt;lCount&lt;/em&gt; random integers between a lower boundary &lt;em&gt;lMin&lt;/em&gt; and an&#xA;upper boundary &lt;em&gt;lMax&lt;/em&gt;, and they need to sum up to exactly &lt;em&gt;lSum&lt;/em&gt;?&lt;/p&gt;&#xA;&lt;p&gt;This function is similar to &lt;a href=&#34;https://www.sulprobil.de/sblongrandsumn_en/&#34; title=&#34;sbLongRandSumN&#34;&gt;sbLongRandSumN&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Please note that you need to include the program &lt;a href=&#34;https://www.sulprobil.de/sbrandtriang_en/&#34; title=&#34;sbRandTriang&#34;&gt;sbRandTriang&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix-sbrandintfixsum-code&#34;&gt;Appendix sbRandIntFixSum Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Option&lt;/span&gt; Explicit&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbRandIntFixSum(lSum &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, lMin &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lMax &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; lCount &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt; = 0, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; bUseRandTriang &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt; = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; bVolatile &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt; = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Returns lCount (or selected cell count in case a range is select when&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;called as a matrix formula) random integers between lMin and lMax&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;which sum up to lSum. If bUseRandTriang the sbRandTriang distribution&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;is used to &amp;#34;bias&amp;#34; the randomness to be &amp;#34;less extreme&amp;#34;.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Error values:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;#NUM!   - No solution exists&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;#VALUE! - lCount is less than 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbrandintfixsum_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbrandintfixsum_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 05-Aug-2020 PB V0.3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; lRnd &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, lMinPrev &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; lRow &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, lCol &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt; Application&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; TypeName(.Caller) = &lt;span style=&#34;color:#a31515&#34;&gt;&amp;#34;Range&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; lCount = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lCount = .Caller.Count&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; lR(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; .Caller.Rows.Count, 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; .Caller.Columns.Count) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ElseIf&lt;/span&gt; lCount &amp;lt; 1 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    sbRandIntFixSum = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Else&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; lR(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; lCount, 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; 1) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Randomize&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bVolatile &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; .Volatile&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; lRow = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(lR, 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; lCol = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(lR, 2)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lMinPrev = lMin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lMin = .RoundUp(.Max(lMin, .Min(lSum / lCount, lSum / lCount _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               - (lCount - 1) * (lMax - lSum / lCount))), 0)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lMax = .RoundDown(.Min(lMax, .Max(lSum / lCount, lSum / lCount _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;               + (lCount - 1) * (lSum / lCount - lMinPrev))), 0)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lMin &amp;gt; lMax &lt;span style=&#34;color:#00f&#34;&gt;Or&lt;/span&gt; lSum / lCount &amp;lt;&amp;gt; .Median(lMin, lMax, lSum / _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            lCount) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;No solution exists&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;            sbRandIntFixSum = CVErr(xlErrNum)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; bUseRandTriang &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lMin = lMax &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                lRnd = lMin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                lRnd = Int(sbRandTriang(&lt;span style=&#34;color:#00f&#34;&gt;CDbl&lt;/span&gt;(lMin), _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                       lSum / lCount, &lt;span style=&#34;color:#00f&#34;&gt;CDbl&lt;/span&gt;(lMax)) + 0.5)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            lRnd = Int(Rnd() * (lMax - lMin + 1) + lMin)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lR(lRow, lCol) = lRnd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lSum = lSum - lRnd&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        lCount = lCount - 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; lCol&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; lRow&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sbRandIntFixSum = lR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Sub&lt;/span&gt; GenerateRandIntFixSum()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;[E7:E27].FormulaArray = sbRandIntFixSum([B1], [B2], [B3], [B4], &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;, &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Sub&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbGrowthSeries (VBA)</title>
      <link>https://www.sulprobil.de/sbgrowthseries_en/</link>
      <pubDate>Thu, 14 May 2026 10:47:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbgrowthseries_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You can generate random data with a compound growth rate &lt;em&gt;dblRate&lt;/em&gt;, with&#xA;a maximal relative change rate per step of &lt;em&gt;dblMaxRatePerStep&lt;/em&gt;&#xA;and with an optional start value &lt;em&gt;dblStartVal&lt;/em&gt;. The number of periods&#xA;is implicitly chosen by the number of selected cells which&#xA;call this function as an array formula (entered with&#xA;CTRL + SHIFT + ENTER). This is sort of a brownian bridge.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbGrowthSeries.png&#34; alt=&#34;sbGrowthSeries&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--sbgrowthseries-code&#34;&gt;Appendix – sbGrowthSeries Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Iman Conover (Excel / VBA)</title>
      <link>https://www.sulprobil.de/iman_conover_en/</link>
      <pubDate>Thu, 14 May 2026 10:41:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/iman_conover_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;When your work speaks for itself, don&amp;rsquo;t interrupt.&amp;rdquo; [Henry J. Kaiser]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you need to generate correlated random numbers, the Iman Conover approach is a good method&#xA;which is to be preferred to the Cholesky decomposition.&lt;/p&gt;&#xA;&lt;p&gt;In 1982 Iman and Conover published their original article (external link!)&#xA;&lt;a href=&#34;https://www.researchgate.net/publication/243048186_A_Distribution-Free_Approach_to_Inducing_Rank_Correlation_Among_Input_Variates&#34; title=&#34;ImanConover&#34;&gt;&amp;ldquo;A distribution-free approach to inducing rank correlation among input variables&amp;rdquo;&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Rick Wicklin wrote in 2021 on  (external link!)&#xA;&lt;a href=&#34;https://blogs.sas.com/content/iml/2021/06/14/simulate-iman-conover-transformation.html&#34; title=&#34;RickWicklin&#34;&gt;&amp;ldquo;Simulate correlated variables by using the Iman-Conover transformation&amp;rdquo;&lt;/a&gt;. His article includes&#xA;a SAS implementation of the Iman Conover approach.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbGenerateTeams (VBA)</title>
      <link>https://www.sulprobil.de/sbgenerateteams_en/</link>
      <pubDate>Thu, 14 May 2026 09:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbgenerateteams_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;For many people my software is something that you install and forget. I like to keep it that way.&amp;rdquo; [Wietse Venema]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You and your 15 friends want to play in teams of 4 and you wonder how to come&#xA;up with a fair distribution of teams, because each player has an individual&#xA;skill level?&lt;/p&gt;&#xA;&lt;p&gt;Here you go:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbGenerateTeams_4Teams.png&#34; alt=&#34;sbGenerateTeams_4Teams&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;This program combines several features which I like to use:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;The class &lt;a href=&#34;https://www.sulprobil.de/systemstate_en/&#34; title=&#34;SystemState&#34;&gt;SystemState&lt;/a&gt; helps to reduce runtime.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbGenerateTestData (VBA)</title>
      <link>https://www.sulprobil.de/sbgeneratetestdata_en/</link>
      <pubDate>Thu, 14 May 2026 08:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbgeneratetestdata_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;It is practically impossible to teach good programming style to students&#xA;that have had prior exposure to BASIC. As potential programmers, they are&#xA;mentally mutilated beyond hope of regeneration.&amp;rdquo; [E. W. Dijkstra]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;The application below is meant to help people who want to test properly.&lt;/p&gt;&#xA;&lt;p&gt;You want to create six Boolean values, 50% True and 50% False, once in generated&#xA;order and once shuffled? Here you are:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbGenerateTestData_Bool_Screen.png&#34; alt=&#34;sbGenerateTestData_Bool_Screen&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Or you need to create 4 money values in GBP, the first series between GBP 10 and&#xA;GBP 20, the second should have an average of 6 and a standard deviation of 2?&lt;/p&gt;</description>
    </item>
    <item>
      <title>UniqRandInt (VBA)</title>
      <link>https://www.sulprobil.de/uniqrandint_en/</link>
      <pubDate>Thu, 14 May 2026 07:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/uniqrandint_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Few things are harder to put up with than the annoyance of a good example.&amp;rdquo; [Mark Twain]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Sometimes you need to create random integers without repetition (or with a limited number of repetitions).&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/uniqrandint.png&#34; alt=&#34;uniqrandint&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/uniqrandint_formula.png&#34; alt=&#34;uniqrandint_formula&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--uniqrandint-code&#34;&gt;Appendix – UniqRandInt Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;If lRange &amp;gt;&amp;gt; n then set LATE_INITIALISATION to true. For example,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;if lRange=1,000,000 and if 1,000 cells are selected (n=1000).&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#Const&lt;/span&gt; LATE_INITIALISATION = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;If random integers may occur more than once, allow repetitions&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#Const&lt;/span&gt; ALLOW_REPETITION = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If ALLOW_REPETITION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; UniqRandInt(n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, &lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; lRange &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; lMaxOccurence &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt; = 1) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; UniqRandInt(n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, &lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; lRange &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Returns n unique (=non-repeating) random integers within 1..lRange,&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;lRange &amp;gt;= n. Set ALLOW_REPETITION = True and call with&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;lMaxOccurences &amp;gt; 1 if random integers may occur more than once.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.com/uniqrandint_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.bplumhoff.de/uniqrandint_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 30-Oct-2024 PB V1.04&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; bRandomized &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; vA             &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; vR             &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i              &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; j              &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; lr             &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; bRandomized &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Randomize&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  bRandomized = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If ALLOW_REPETITION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lMaxOccurence &amp;lt; 1 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    UniqRandInt = CVErr(xlErrNum)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lRange = lRange * lMaxOccurence&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; n &amp;gt; lRange &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  UniqRandInt = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; vR(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; vA(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; lRange)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#If Not LATE_INITIALISATION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; lRange&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;#If ALLOW_REPETITION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      vA(i) = Int((i - 1) / lMaxOccurence) + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;#Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      vA(i) = i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;i = 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(vR, 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lr = Int(((lRange - i + 1) * Rnd) + 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;#If LATE_INITIALISATION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vA(lr) = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;#If ALLOW_REPETITION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vR(j) = Int((lr - 1) / lMaxOccurence) + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;#Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vR(j) = lr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      vR(j) = vA(lr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;#If LATE_INITIALISATION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vA(lRange - i + 1) = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;#If ALLOW_REPETITION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vA(lr) = Int((lRange - i + 1 - 1) / lMaxOccurence) + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;#Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        vA(lr) = lRange - i + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      vA(lr) = vA(lRange - i + 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;#If LATE_INITIALISATION Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;#End If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  i = i + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;UniqRandInt = vR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRandHistogrm (VBA)</title>
      <link>https://www.sulprobil.de/sbrandhistogrm_en/</link>
      <pubDate>Thu, 14 May 2026 06:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbrandhistogrm_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbRandHistoGram.png&#34; alt=&#34;sbRandHistoGram&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix-sbrandhistogrm-code&#34;&gt;Appendix sbRandHistogrm Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbRandHistogrm(dmin &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dMax &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            vWeight &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;, &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; dRandom = 1#) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Specifies a histogram distribution with range dmin:dmax.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;This range is divided into vWeight.count classes. Each&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;class has weight vWeight(i) reflecting the probability&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;of occurrence of a value within the class.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Similar to @Risk&amp;#39;s function RiskHistogrm.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbrandhistogrm_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbrandhistogrm_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff 18-Oct-2020 PB V1.01&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, vW &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; dRand &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dR &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;, dSumWeight &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt; Application.WorksheetFunction&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vW = .Transpose(.Transpose(vWeight))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;n = UBound(vW)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; dSumWeightI(0 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dSumWeight = 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dSumWeightI(0) = 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; vW(i) &amp;lt; 0# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;A negative weight is an error&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;        sbRandHistogrm = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dSumWeight = dSumWeight + vW(i) &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate sum of all weights&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    dSumWeightI(i) = dSumWeight     &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Calculate sum of weights till i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dSumWeight = 0# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Sum of weights has to be greater than zero&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    sbRandHistogrm = CVErr(xlErrValue)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dRandom = 1# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dRand = Rnd()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dRand = dRandom&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;dR = dSumWeight * dRand&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;i = n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Do&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;While&lt;/span&gt; dR &amp;lt; dSumWeightI(i)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i = i - 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sbRandHistogrm = dmin + (dMax - dmin) * _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     (&lt;span style=&#34;color:#00f&#34;&gt;CDbl&lt;/span&gt;(i) + (dR - dSumWeightI(i)) / vW(i + 1)) / &lt;span style=&#34;color:#00f&#34;&gt;CDbl&lt;/span&gt;(n)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbLongRandSumN (VBA)</title>
      <link>https://www.sulprobil.de/sblongrandsumn_en/</link>
      <pubDate>Thu, 14 May 2026 05:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sblongrandsumn_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You need to generate 20 non-negative random integers which sum up to 100?&#xA;Then I suggest to use my UDF below. You can generate an arbitrary number&#xA;of integers which sum up to a specified amount, and all generated integers&#xA;are not smaller than another specified number:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbLongRandSumN_Screen.png&#34; alt=&#34;sbLongRandSumN_Screen&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Please notice that this function is a relative of&#xA;&lt;a href=&#34;https://www.sulprobil.de/sbrandintfixsum_en/&#34; title=&#34;sbRandIntFixSum&#34;&gt;sbRandIntFixSum&lt;/a&gt;&#xA;(for which you need to provide non-optional minimum and maximum values to be generated),&#xA;the brownian bridge&#xA;&lt;a href=&#34;https://www.sulprobil.de/sbgrowthseries_en/&#34; title=&#34;sbGrowthSeries&#34;&gt;sbGrowthSeries&lt;/a&gt;, and of&#xA;&lt;a href=&#34;https://www.sulprobil.de/sbrandsum1_en/&#34; title=&#34;sbRandSum1&#34;&gt;sbRandSum1&lt;/a&gt;&#xA;which generates numbers of type Double which sum up to one exactly.&#xA;This function is used in my application&#xA;&lt;a href=&#34;https://www.sulprobil.de/sbgeneratetestdata_en/&#34; title=&#34;sbGenerateTestData&#34;&gt;sbGenerateTestData&lt;/a&gt;, for example.&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbExactRandHistogrm (VBA)</title>
      <link>https://www.sulprobil.de/sbexactrandhistogrm_en/</link>
      <pubDate>Thu, 14 May 2026 04:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbexactrandhistogrm_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Chance favours the prepared mind.&amp;rdquo; [Louis Pasteur]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;It is fairly easy to create a loaded die, let us say &lt;strong&gt;on average&lt;/strong&gt; the 6 should&#xA;appear twice as often as all the other numbers 1 thru 5:&#xA;Enter into A1: =MIN(INT(RAND()*7+1),6)&lt;/p&gt;&#xA;&lt;p&gt;But what if you want to create 7 rolls of this die and all numbers between 1 and&#xA;5 should appear &lt;strong&gt;exactly&lt;/strong&gt; once and 6 &lt;strong&gt;exactly&lt;/strong&gt; twice?&lt;/p&gt;&#xA;&lt;p&gt;Here is my general solution:&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRoundRobin (Excel / VBA)</title>
      <link>https://www.sulprobil.de/sbroundrobin_en/</link>
      <pubDate>Thu, 14 May 2026 03:33:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbroundrobin_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you need to organize a round robin tournament you can use this subroutine.&#xA;It implements the &lt;em&gt;circle method&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbRoundRobin_Principle.png&#34; alt=&#34;sbRoundRobin_Principle&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;An example for 6 players:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbRoundRobin_Pairings1.png&#34; alt=&#34;sbRoundRobin_Pairings1&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The VBA program - but not the worksheet function approach - also generates this kind of pairings table:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbRoundRobin_Pairings2.png&#34; alt=&#34;sbRoundRobin_Pairings2&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;further-reading&#34;&gt;Further Reading&lt;/h2&gt;&#xA;&lt;p&gt;Suksompong, W. (2018, April 11). Scheduling Asynchronous Round-Robin Tournaments.&#xA;(External link!) &lt;a href=&#34;https://arxiv.org/pdf/1804.04504.pdf&#34;&gt;https://arxiv.org/pdf/1804.04504.pdf&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Abel, Finizio, Greig, Lewis (2003). Generalized whist tournament designs.&#xA;(External link!) &lt;a href=&#34;https://www.researchgate.net/publication/222140264_Generalized_whist_tournament_designs&#34;&gt;https://www.researchgate.net/publication/222140264_Generalized_whist_tournament_designs&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Cholesky (VBA)</title>
      <link>https://www.sulprobil.de/cholesky_en/</link>
      <pubDate>Thu, 14 May 2026 02:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/cholesky_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You can generate correlated random variables easily with a Cholesky (pronounce “koleski”) decomposition.&#xA;I present a simple example here. For the better Iman Conover approach look &lt;a href=&#34;https://www.sulprobil.de/iman_conover_en/&#34; title=&#34;Iman_Conover&#34;&gt;here&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Cholesky.png&#34; alt=&#34;Cholesky&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Cholesky_Formula.png&#34; alt=&#34;Cholesky_Formula&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--cholesky-and-randcorr-code&#34;&gt;Appendix – Cholesky and RandCorr Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; Cholesky(vA &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;I suggest to use the Cholesky decomposition just for purposes of demonstration.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Better options are (in this order): tred2, tqli, eigsrt from Numerical Recipes.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;SVD also works but is computationally more expensive by far since it does not&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;make use of symmetry.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(Thanks to my former colleague Glen R.)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/cholesky_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/cholesky_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Bernd Plumhoff 02-Nov-2024 PB V1.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; d &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, j &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, k &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt; Application.WorksheetFunction&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Resume&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vA = .Transpose(.Transpose(vA))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;On&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Error&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;GoTo&lt;/span&gt; 0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;n = UBound(vA, 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; n &amp;lt;&amp;gt; UBound(vA, 2) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Cholesky = CVErr(xlErrRef)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; dR(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n, 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt; &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Zeroing all elements&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  d = 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; j - 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = d + dR(j, k) * dR(j, k)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  dR(j, j) = vA(j, j) - d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; dR(j, j) &amp;gt; 0# &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    dR(j, j) = Sqr(dR(j, j))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = j + 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      d = 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; j - 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        d = d + dR(i, k) * dR(j, k)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dR(i, j) = (vA(i, j) - d) / dR(j, j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Cannot continue with usual Cholesky&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Fill this column with zeros. Idea: Glen R.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = j &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      dR(i, j) = 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Cholesky = dR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; RandCorr(n &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, vVarCovar &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Returns Ubound(vVarCovar,1) correlated random number vectors of length n.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;vVarCovar is a square matrix containing the variance/covariance matrix.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Please notice that you will only get a &amp;#34;proxy&amp;#34; correlation, not an exact one.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Bernd Plumhoff 06-Nov-2009 PB V0.2&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; vA &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; d &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, j &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, k &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, m &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt; Application.WorksheetFunction&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vA = .Transpose(.Transpose(vVarCovar))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;m = UBound(vA, 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; m &amp;lt;&amp;gt; UBound(vA, 2) &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  RandCorr = CVErr(xlErrRef)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; Db(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m, 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Double&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  d = 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; j - 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = d + Db(j, k) * Db(j, k)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Db(j, j) = vA(j, j) - d&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; Db(j, j) &amp;lt;= 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    RandCorr = CVErr(xlErrNum)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  End &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  Db(j, j) = Sqr(Db(j, j))&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = j + 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d = 0#&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; j - 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      d = d + Db(i, k) * Db(j, k)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    Db(i, j) = (vA(i, j) - d) / Db(j, j)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; vR(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n, 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; n&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; j = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; m&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    vR(i, j) = .Norm_S_Inv(Rnd())&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;vR = .MMult(vR, Db)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RandCorr = vR&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;With&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Named Ranges Used in a Different Way (Excel)</title>
      <link>https://www.sulprobil.de/named_ranges_used_in_a_different_way_en/</link>
      <pubDate>Thu, 14 May 2026 02:33:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/named_ranges_used_in_a_different_way_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;In general you will use named ranges in Excel to avoid hard coded references&#xA;to input cells or to output cells. If you assign names to important cells,&#xA;the references to them will be automatically updated in case of insertions or&#xA;deletions of rows or columns.&lt;/p&gt;&#xA;&lt;p&gt;Here we like to use named ranges in Excel to efficiently implement a simple&#xA;solution with nested worksheet formulas which do not need future amendments:&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbRandInt (VBA)</title>
      <link>https://www.sulprobil.de/sbrandint_en/</link>
      <pubDate>Thu, 14 May 2026 01:46:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbrandint_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If you want to generate non-repeating (or repeating up to &lt;em&gt;lRept&lt;/em&gt; times) random integers between&#xA;two given values I suggest to use my UDF &lt;em&gt;sbRandInt&lt;/em&gt;:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbrandint.png&#34; alt=&#34;sbrandint&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/sbrandint_formula.png&#34; alt=&#34;sbrandint_formula&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;appendix--sbrandint-code&#34;&gt;Appendix – sbRandInt Code&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt; sbRandInt(&lt;span style=&#34;color:#00f&#34;&gt;ByVal&lt;/span&gt; lCount &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lMin &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  lMax &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, _&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Optional&lt;/span&gt; lRept &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt; = 1) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Variant&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Returns lCount random integers between lMin and lMax, each one&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;occurring zero to lRept times. lMax - lMin + 1 must be greater&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;or equal to lCount.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Error values:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;#NUM!   - lRept is less than 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;#REF!   - lCount is greater than (lMax - lMin + 1) * lRept&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;#VALUE! - lCount is less than 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (EN): https://www.sulprobil.de/sbrandint_en/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;Source (DE): https://www.berndplumhoff.de/sbrandint_de/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;(C) (P) by Bernd Plumhoff  30-Dec-2024 PB V1.02&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Static&lt;/span&gt; bRandomized &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Boolean&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; i &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, j &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, k &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Dim&lt;/span&gt; lRnd &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;, lRange &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Const&lt;/span&gt; CLateInitFactor = 50&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lCount &amp;lt; 1 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; sbRandInt = CVErr(xlErrValue): &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;If lRept &amp;lt; 1 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; sbRandInt = CVErr(xlErrNum): &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;If lCount &amp;gt; (lMax - lMin + 1) * lRept &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; sbRandInt = CVErr(xlErrRef): &lt;span style=&#34;color:#00f&#34;&gt;Exit&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lRange = (lMax - lMin + 1) * lRept&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; lr(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; lCount) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Not&lt;/span&gt; bRandomized &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; Randomize: bRandomized = &lt;span style=&#34;color:#00f&#34;&gt;True&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;ReDim&lt;/span&gt; lT(1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; lRange) &lt;span style=&#34;color:#00f&#34;&gt;As&lt;/span&gt; &lt;span style=&#34;color:#2b91af&#34;&gt;Long&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;If we have a huge range of possible random integers and a comparably&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;small number of draws, i.e. if (lMax - lMin) * lRept &amp;gt;&amp;gt; lCount&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;then we can save some runtime with late initialization.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lRange / lCount &amp;lt; CLateInitFactor &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; i = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; lRange&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lT(i) = Int((i - 1) / lRept) + lMin&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; i&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;i = 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lRange / lCount &amp;lt; CLateInitFactor &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(lr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lRnd = Int(((lRange - i + 1) * Rnd) + 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lr(k) = lT(lRnd)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lT(lRnd) = lT(lRange - i + 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i = i + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  j = lMin: &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lMin &amp;lt;= 0 &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; lMax &amp;gt;= 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt; j = 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(lr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    lRnd = Int(((lRange - i + 1) * Rnd) + 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lT(lRnd) = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lr(k) = Int((lRnd - 1) / lRept) + j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lr(k) = lT(lRnd)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lT(lRange - i + 1) = 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lT(lRnd) = Int((lRange - i) / lRept) + j&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Else&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lT(lRnd) = lT(lRange - i + 1)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    i = i + 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#008000&#34;&gt;&amp;#39;If lRange includes zero we need to shift result array&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#008000&#34;&gt;&lt;/span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt; lMin &amp;lt;= 0 &lt;span style=&#34;color:#00f&#34;&gt;And&lt;/span&gt; lMax &amp;gt;= 0 &lt;span style=&#34;color:#00f&#34;&gt;Then&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;For&lt;/span&gt; k = 1 &lt;span style=&#34;color:#00f&#34;&gt;To&lt;/span&gt; UBound(lr)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      lr(k) = lr(k) + lMin - 1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#00f&#34;&gt;Next&lt;/span&gt; k&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;If&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sbRandInt = lr&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#00f&#34;&gt;End&lt;/span&gt; &lt;span style=&#34;color:#00f&#34;&gt;Function&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>SystemState (VBA Class)</title>
      <link>https://www.sulprobil.de/systemstate_en/</link>
      <pubDate>Wed, 13 May 2026 14:30:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/systemstate_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;&amp;ldquo;Any sufficiently advanced technology is indistinguishable from magic.&amp;rdquo; [Arthur C. Clarke]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;My former colleague Jon T. created the smallest reasonable class module I have&#xA;seen so far: &lt;em&gt;SystemState&lt;/em&gt; provides an easy way to save and to restore system state&#xA;variables like Calculation, ScreenUpdating and others.&lt;/p&gt;&#xA;&lt;p&gt;To speed up your code you normally write at the beginning of a VBA macro&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#fff;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-VB.net&#34; data-lang=&#34;VB.net&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Application.Calculation = xlCalculationManual&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Application.ScreenUpdating = &lt;span style=&#34;color:#00f&#34;&gt;False&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and at the end of a macro&lt;/p&gt;</description>
    </item>
    <item>
      <title>Take Vacation when less is going on (Excel / VBA)</title>
      <link>https://www.sulprobil.de/take_vacation_when_less_is_going_on_en/</link>
      <pubDate>Wed, 13 May 2026 06:56:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/take_vacation_when_less_is_going_on_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;If your business fluctuates strongly seasonally,&#xA;you can plan the vacation of your staff accordingly and consider&#xA;hiring seasonal staff:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/take_vacation_simple_diagram.png&#34; alt=&#34;take_vacation_simple_diagram&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;Note: Of course you cannot force anybody when to take a&#xA;vacation and how many days are to be taken. These&#xA;calculations are just meant to be suggestions of&#xA;reasonable indicators.&lt;/p&gt;&#xA;&lt;h2 id=&#34;simple-example&#34;&gt;Simple Example&lt;/h2&gt;&#xA;&lt;p&gt;If you like to take the maximum sales values (here: 24,000) as a basis,&#xA;applying zero vacations to it, and scale the vacation days linearly to&#xA;the other sales values:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Tip Distribution (Excel)</title>
      <link>https://www.sulprobil.de/tip_distribution_en/</link>
      <pubDate>Wed, 13 May 2026 06:50:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/tip_distribution_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Flattery is nice but tips will suffice.&amp;rdquo;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;You want to split tips fairly between your employees?&#xA;They may keep 70% of all tips they get directly but 30%&#xA;should be distributed based on hours worked so that cleaners and&#xA;reception staff would receive a share, too?&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/tip_distribution_diagram.png&#34; alt=&#34;tip_distribution_diagram&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/tip_distribution.png&#34; alt=&#34;tip_distribution&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;The percentage of what everybody can keep:&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/tip_distribution_keep_percentage.png&#34; alt=&#34;tip_distribution_keep_percentage&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.sulprobil.de/Tip_Distribution.xlsx&#34;&gt;Tip_Distribution.xlsx&lt;/a&gt; [48 KB Excel file, open and use at your own risk]&lt;/p&gt;</description>
    </item>
    <item>
      <title>Compare Correlation Matrices (Perl)</title>
      <link>https://www.sulprobil.de/compare_correlation_matrices_en/</link>
      <pubDate>Sun, 10 May 2026 15:44:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/compare_correlation_matrices_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Remember, my friend, that knowledge is stronger than memory, and we should not trust the weaker.&amp;rdquo; [Bram Stoker]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Some years ago I developed a Perl program for an Algorithmics client.&#xA;Over time I enhanced this program and I made it read the &lt;em&gt;RMLinks.cfg&lt;/em&gt; file&#xA;so that new risk factors would be included automatically.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implementation-approach&#34;&gt;Implementation Approach&lt;/h2&gt;&#xA;&lt;p&gt;My implementation approach was:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;1. Read first matrix&#xA;    Checks:&#xA;    Matrix quadratic?&#xA;    Risk factor order left-&amp;gt;right (top row) == top-&amp;gt;bottom (leftmost column)?&#xA;    Diagonals == 1 (warning)?&#xA;    No NC category (warning if there is)?&#xA;    Matrix symmetric: M(i,j) == M(j,i) for all i,j?&#xA;    [Not for DC files because not given there.]&#xA;&#xA;2. Read second matrix&#xA;    Checks identical to above&#xA;&#xA;3. Risk factors in both matrices identical?&#xA;    Warn about risk factors which are in first matrix but not in second and vice versa&#xA;    Highlight outliers per category&#xA;    Highlight outliers per currency&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;parameters&#34;&gt;Parameters&lt;/h2&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;b - breaches: do not report differences between the two input matrices but breaches beyond tolerances.&#xA;d - debug [level] gives debugging information at detail level level&#xA;    level 1: -&#xA;    level 2: -&#xA;    level 3: Print all elements of matrices 1 and 2&#xA;f - read deviation file [-f needs to be followed by a valid filename]&#xA;    Reads min and max values for all slices for differences which should&#xA;    be ignored during comparison. See option -w to get format example&#xA;h - help: list parameters and their explanation&#xA;i -  ignore risk factors in a given file [-i needs to be followed by a valid filename]&#xA;m - set max rank index [default is 6 (=return highest 3&#xA;    and lowest 3 of each slice); m needs to be even and &amp;gt;= 4 !&#xA;n - tolerate risk factor category NC&#xA;r - set Algo risk factor category file [default is ./RMLinks.cfg&#xA;s - summarize findings, no detailed warnings or error messages&#xA;t - read file with tolerated changes for each matrix element and apply tolerance check&#xA;v - print version&#xA;w - write deviation file with min and max values of all slices.&#xA;    This file is comma-separated to be easily readable via Excel.&#xA;    It can be amended and used with option -f later&#xA;    [-w needs to be followed by a valid filename, preferrably ending with .csv&#xA;x - read translation table [-x needs to be followed by a valid filename].&#xA;    Risk factor names of matrix 1 will be translated by second name in comma-separated row&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id=&#34;program-call-example&#34;&gt;Program Call Example&lt;/h2&gt;&#xA;&lt;p&gt;A typical call of this program from a Shell script could look like:&lt;/p&gt;</description>
    </item>
    <item>
      <title>sbDataStats (VBA)</title>
      <link>https://www.sulprobil.de/sbdatastats_en/</link>
      <pubDate>Sun, 10 May 2026 15:44:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/sbdatastats_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Statistics are like bikinis. What they reveal is suggestive, but what they conceal is vital.&amp;rdquo; [Aaron Levenstein]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Of course you could write a data checking program for any specified input.&lt;/p&gt;&#xA;&lt;p&gt;But what if you would like to throw any arbitrary data (given in a csv file!)&#xA;into a general data analyzer?&lt;/p&gt;&#xA;&lt;p&gt;For numerical data a general analysis could easily produce minimum, average,&#xA;and maximum information and also warn if any extreme value differs from the&#xA;average by more than 2.5 standard deviations, for example. For text data an&#xA;analysis program could print text frequency and character frequency information.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Hugo (HTML)</title>
      <link>https://www.sulprobil.de/hugo_en/</link>
      <pubDate>Sun, 10 May 2026 13:33:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/hugo_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;I am always doing things I can&amp;rsquo;t do, that&amp;rsquo;s how I got to do them.&amp;rdquo; [Pablo Picasso]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;I do not run a web shop and I do not need a database to refresh dynamic web pages.&#xA;That&amp;rsquo;s why I use Hugo to run my web sites &lt;a href=&#34;https://www.sulprobil.de/about/impressum_en/&#34; title=&#34;sulprobil.de&#34;&gt;sulprobil.de&lt;/a&gt; and&#xA;(external link!) &lt;a href=&#34;https://www.berndplumhoff.de/&#34; title=&#34;BerndPlumhoff&#34;&gt;berndplumhoff.de&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Hugo is quite efficient. The web pages will be translated quickly.&#xA;The generated web pages will be loaded quickly, and they are well readable on a computer as well as on smart phones.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Successful Teams</title>
      <link>https://www.sulprobil.de/successful_teams_en/</link>
      <pubDate>Sun, 10 May 2026 13:22:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/successful_teams_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Teamwork is the secret that makes common people achieve uncommon results.&amp;rdquo; [Ifeanyi Onuoha]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;overview&#34;&gt;Overview&lt;/h2&gt;&#xA;&lt;p&gt;In homogeneous teams, members have similar personalities and strengths.&lt;br&gt;&#xA;There are few conflicts, but the results are often suboptimal.&lt;br&gt;&#xA;The more diverse the roles within a team, the more powerful the team becomes.&lt;br&gt;&#xA;If team members are aware of this distribution, it further improves outcomes.&lt;br&gt;&#xA;There are many different approaches to putting together successful working groups.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Adonis (BPM)</title>
      <link>https://www.sulprobil.de/adonis_en/</link>
      <pubDate>Wed, 06 May 2026 06:25:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/adonis_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Lack of documentation is becoming a problem for acceptance.&amp;rdquo; [Wietse Venema]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Adonis is a business process management tool.&#xA;It was developed at the University of Vienna in 1995.&#xA;Adonis offers documentation, analysis, and optimization functionality&#xA;for business processes.&lt;/p&gt;&#xA;&lt;h2 id=&#34;access-and-usage&#34;&gt;Access and Usage&lt;/h2&gt;&#xA;&lt;p&gt;Companies can aquire a regular (external link!) &lt;a href=&#34;https://www.boc-group.com/en/adonis&#34;&gt;Adonis&lt;/a&gt; license.&#xA;Private persons can use (external link!) &lt;a href=&#34;https://www.adonis-community.com/en/support-faqs/adonisce-classic&#34;&gt;Adonis:CE&lt;/a&gt; free of charge.&lt;/p&gt;&#xA;&lt;p&gt;(External Link!) &lt;a href=&#34;https://docs.boc-group.com/adonis/en/docs/18.0/user_manual&#34;&gt;Adonis User Manual&lt;/a&gt; is a detailed online user manual.&lt;/p&gt;&#xA;&lt;h3 id=&#34;limitations-of-the-free-adonisce&#34;&gt;Limitations of the free Adonis:CE&lt;/h3&gt;&#xA;&lt;p&gt;After 60 days without login your Adonis:CE account will be deactivated.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Pólya - How to Solve It</title>
      <link>https://www.sulprobil.de/polya_how_to_solve_it_en/</link>
      <pubDate>Fri, 10 Apr 2026 13:11:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/polya_how_to_solve_it_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;If there is a problem you can&amp;rsquo;t solve, then there is an easier problem you can solve: find it.&amp;rdquo; [George Pólya]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Anyone looking to solve problems in a structured way should start by reading &lt;em&gt;How to Solve It&lt;/em&gt; by George Pólya.&lt;/p&gt;&#xA;&lt;p&gt;While Pólya focused primarily on mathematical problems, his methods are broadly applicable to problem-solving in general.&lt;/p&gt;&#xA;&lt;h2 id=&#34;pólyas-principles&#34;&gt;Pólya&amp;rsquo;s Principles&lt;/h2&gt;&#xA;&lt;p&gt;In his book, Pólya outlines four basic phases of problem-solving.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Employee Revenue Shares (Excel / VBA)</title>
      <link>https://www.sulprobil.de/employee_revenue_shares_en/</link>
      <pubDate>Fri, 13 Mar 2026 14:14:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/employee_revenue_shares_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This application is a simple example of a revenue report.&#xA;It is using my&#xA;&lt;a href=&#34;https://www.sulprobil.de/excel_vba_a_collection_en/&#34; title=&#34;excel_vba_a_collection_en&#34;&gt;preferred programming elements&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Input:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Pic_Staff_Sales_Share_Input_EN.png&#34; alt=&#34;Pic_Staff_Sales_Share_Input_EN&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Output:&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;How to identify your most important clients and employees at a glance (see green background):&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;With the clients &lt;em&gt;GHI GmbH &amp;amp; Co KG&lt;/em&gt; and &lt;em&gt;DEF AG&lt;/em&gt;, you generate more than 50% of your total revenue.&lt;/li&gt;&#xA;&lt;li&gt;Your employees &lt;em&gt;Emp2&lt;/em&gt; and &lt;em&gt;Emp1&lt;/em&gt; generate more than 50% of your total revenue.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/Pic_Staff_Sales_Share_Output_EN.png&#34; alt=&#34;Pic_Staff_Sales_Share_Output_EN&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The goal was a simple and transparent reporting process:&#xA;Which employees had which revenue shares for which clients,&#xA;and who created which revenue report, when, and with what result.&lt;/li&gt;&#xA;&lt;li&gt;The scripting dictionaries &lt;code&gt;oStaff&lt;/code&gt;, &lt;code&gt;oStaffSum&lt;/code&gt;, &lt;code&gt;oClient&lt;/code&gt;,&#xA;&lt;code&gt;oClientSum&lt;/code&gt;, and &lt;code&gt;oSum&lt;/code&gt; allow for easy collection, storage,&#xA;and output of all numerical and non-numerical data using non-numeric keys.&lt;/li&gt;&#xA;&lt;li&gt;The output data is provided both in the worksheet &lt;em&gt;Output&lt;/em&gt; and&#xA;in the subdirectory &lt;em&gt;Reports&lt;/em&gt;, and is additionally zipped into an annual archive by the subroutine&#xA;&lt;a href=&#34;https://www.sulprobil.de/sbzip_en/&#34; title=&#34;sbZip&#34;&gt;sbZip&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;The function &lt;code&gt;RoundToSum&lt;/code&gt; ensures error-free rounding of employee shares.&lt;/li&gt;&#xA;&lt;li&gt;The enumeration &lt;em&gt;input_columns&lt;/em&gt; allows for understandable addressing&#xA;and easy future modification of the input columns.&lt;/li&gt;&#xA;&lt;li&gt;The &lt;code&gt;modLog&lt;/code&gt; module and &lt;code&gt;clsLog&lt;/code&gt; class module show&#xA;who created which revenue report, when, and with what result.&#xA;See the &lt;em&gt;Workflow&lt;/em&gt; worksheet and the &lt;em&gt;Logs&lt;/em&gt; subdirectory.&lt;/li&gt;&#xA;&lt;li&gt;The class module &lt;code&gt;SystemState&lt;/code&gt; sets the desired environment parameters at program start and resets them after execution.&lt;/li&gt;&#xA;&lt;li&gt;The application addresses the worksheets directly using VBA internal code names (&lt;code&gt;wsI&lt;/code&gt;, &lt;code&gt;wsO&lt;/code&gt;, &lt;code&gt;wsW&lt;/code&gt;).&lt;/li&gt;&#xA;&lt;li&gt;Invalid inputs and inconsistent output totals are highlighted in yellow and logged.&lt;/li&gt;&#xA;&lt;li&gt;The module (external link!) &lt;a href=&#34;https://github.com/cristianbuse/VBA-FileTools&#34;&gt;LibFileTools&lt;/a&gt; ensures this application also runs under SharePoint / OneDrive.&lt;/li&gt;&#xA;&lt;li&gt;The module (external link!) &lt;a href=&#34;https://stackoverflow.com/questions/3120915/get-timezone-information-in-vba-excel/20489651#20489651&#34;&gt;TimeZone&lt;/a&gt; provides conversions between time zones – the prerequisite is a properly installed MS Outlook.&lt;/li&gt;&#xA;&lt;li&gt;The modules (external links!) &lt;a href=&#34;https://jkp-ads.com/Articles/performanceclass.asp&#34;&gt;modPerf&lt;/a&gt; and &lt;a href=&#34;https://docs.microsoft.com/en-us/previous-versions/office/developer/office-2010/ff700515(v=office.14)?redirectedfrom=MSDN&#34;&gt;modTimer&lt;/a&gt;, along with the class module &lt;a href=&#34;https://jkp-ads.com/Articles/performanceclass.asp&#34;&gt;clsPerf&lt;/a&gt;, enable the measurement of the runtime of subroutines and functions – for this, the precompiler constant MEASURE_RUNTIME = True must be set.&lt;/li&gt;&#xA;&lt;li&gt;If another application can provide the input data (e.g., revenues per client, employee time tracking multiplied by their seniority as weights) as a file, this application should be extended with an &lt;em&gt;InputFiles&lt;/em&gt; subdirectory containing yearly subfolders (analogous to the existing output structure).&lt;/li&gt;&#xA;&lt;li&gt;Detailed documentation of this application is easily possible using the BPM system&#xA;&lt;a href=&#34;https://www.sulprobil.de/adonis_en/&#34; title=&#34;Adonis&#34;&gt;Adonis&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;download&#34;&gt;Download&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Competence at Work</title>
      <link>https://www.sulprobil.de/competence_at_work_en/</link>
      <pubDate>Sat, 27 Sep 2025 16:15:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/competence_at_work_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;There is only one proof of ability: doing it.&amp;rdquo; [Marie von Ebner-Eschenbach]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Do you want to convince your boss of your excellent performance? Or, as a boss, do you need to&#xA;allocate your staff to various teams based on their skills?&lt;/p&gt;&#xA;&lt;p&gt;The book &amp;ldquo;Competence at Work&amp;rdquo; by Lyle M. Spencer and Signe M. Spencer can help.&#xA;Originally intended to aid companies and HR departments in successful staff selection,&#xA;this book presents necessary competencies for different working profiles with scale values.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Risk Analysis</title>
      <link>https://www.sulprobil.de/risk_analysis_en/</link>
      <pubDate>Sat, 27 Sep 2025 16:12:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/risk_analysis_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Knowledge is the only instrument of production that is not subject to diminishing returns.&amp;rdquo; [John Clarke]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;This exercise was given by Nidal Sh., a former colleague of mine.&#xA;I think it is a very useful exercise to sharpen your understanding for data and for risk in general.&lt;/p&gt;&#xA;&lt;h3 id=&#34;scenario&#34;&gt;Scenario:&lt;/h3&gt;&#xA;&lt;p&gt;You are a fund manager (FX, Real Estate, Equities or Fixed Income). You need to perform two presentations:&lt;/p&gt;&#xA;&lt;p&gt;a) Show your CEO that your fund is very risky compared to the other ones.&#xA;You need more capital, budget and other resources to deal with that properly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Staff Task Matrix</title>
      <link>https://www.sulprobil.de/staff_task_matrix_en/</link>
      <pubDate>Sat, 27 Sep 2025 16:11:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/staff_task_matrix_en/</guid>
      <description>&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;In case you need to coordinate a team:&lt;/p&gt;&#xA;&lt;p&gt;Prioritize each task and give it a value due to necessary knowledge,&#xA;thinking, and responsibility involved.&lt;/p&gt;&#xA;&lt;p&gt;A responsible employee must be defined for each task. Insert 2 in corresponding row/column.&#xA;In case of normal ongoing business define a substitute, too. Insert 1 for any sub.&#xA;Substitutes can be omitted for project tasks or tasks which are rarely executed.&lt;/p&gt;&#xA;&lt;p&gt;In our example Antony is team head. He has the highest point sum. Cesare is Antony&amp;rsquo;s deputy.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Project Management (PRINCE2)</title>
      <link>https://www.sulprobil.de/project_management_en/</link>
      <pubDate>Sat, 27 Sep 2025 16:08:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/project_management_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;Assumption is the mother of all f***-ups.&amp;rdquo; [Everett McGill when playing Marcus Penn]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Project management is the discipline of organizing and managing resources&#xA;so that a project is completed within defined cost, quality, scope &amp;amp; time&#xA;constraints. A project is a temporary and one-time undertaking to create&#xA;a product or service which provides beneficial change or added value.&lt;/p&gt;&#xA;&lt;p&gt;The responsible person to organize and to control a project is called&#xA;project manager. There are some organizations which train necessary and&#xA;useful project management skills. See, for example for PRINCE2 (external link!):&lt;/p&gt;</description>
    </item>
    <item>
      <title>Book Leather Care</title>
      <link>https://www.sulprobil.de/book_leather_care_en/</link>
      <pubDate>Sat, 27 Sep 2025 16:05:00 +0100</pubDate>
      <guid>https://www.sulprobil.de/book_leather_care_en/</guid>
      <description>&lt;p&gt;&lt;strong&gt;&amp;ldquo;A truly great book should be read in youth, again in maturity and once more in old age.&amp;rdquo; [Robertson Davies]&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://www.sulprobil.de/pic_Brockhaus_1833.jpg&#34; alt=&#34;Brockhaus 1833&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;disclaimer&#34;&gt;Disclaimer&lt;/h2&gt;&#xA;&lt;p&gt;Please read my &lt;a href=&#34;https://www.sulprobil.de/about/disclaimer_en/&#34; title=&#34;Disclaimer&#34;&gt;Disclaimer&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;abstract&#34;&gt;Abstract&lt;/h2&gt;&#xA;&lt;p&gt;Leather bookbinding is sensitive. If not properly cared for, it dries out, becomes brittle, and cracks.&#xA;Every 4 years, it should be treated with a suitable leather care product.&#xA;The recipe presented here can be made at any pharmacy. It comes from a librarian of a library in Göttingen.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
