連続データ重ね合わせ用・関数

こんばんは、皆様、三頌亭です。今日は小ネタ集の一つですw。以下の関数は縦に並んだデータを一定量シフトさせて足し合わせていく関数です。何に使うのかよくわからないという方が大半でしょうが、必要な人には自分でいうのもなんですが「便利」ですw。

 

Rem 連続データ重ね合わせ 配列として出力(配列数式使用)

Rem xtstp:繰り返しセルエリア(同一カラムで指定)

Rem deltax:シフトさせるセル数

Rem rep:シフトの繰り返し数

Rem addsh:シフトをスタートさせるセル位置(0が入力される)

 

Public Function multidoseadd(xtstp As Variant, deltax As Double, rep As Double, addsh As Double) As Variant

 

   Dim input1(8000, 1) As Variant

   Dim cnt As Double

   Dim result(8000, 1) As Variant

   cnt = 0

   deltax = Int(deltax)

   addsh = Int(Abs(addsh))

  

   Rem 指定範囲から順番にデータ用セルを取り出す(ゼロ時間から)

   For Each myCell In xtstp

      input1(cnt, 0) = myCell.Value

      cnt = cnt + 1

   Next

  

   Rem 重ね合わせ(deltax=シフト数)

    For n = 1 To rep

    For j = addsh To cnt - 1 + addsh

    result((n - 1) * deltax + j, 0) = result((n - 1) * deltax + j, 0) + input1(j - addsh, 0)

    Next j

    Next n

    multidoseadd = result

 End Function

 

注意書きです。

Microsoft 365用の2018年9月の更新プログラムから、複数の結果を返すことができるすべての数式は、自動的に下方向に、または隣接するセルにスピルされます。 この動作の変更には、いくつかの新しい 動的な配列関数も伴います。 既存の関数または動的な配列関数のどちらを使用している場合でも、1つのセルに入力するだけで、 enterキーを押すことで確定する必要があります。 以前の従来の配列数式では、最初に出力範囲全体を選択してから、 Ctrl + Shift + Enter を押して数式を確認する必要があります。 一般的に、 CSE 数式と呼ばれています。」

f:id:kms130:20201221225207p:plain

連続データ重ね合わせ用・関数・使用例