エクセルにて、3次スプラインのマクロを組みました。
結果がところどころしか表示されません。
何度見直しても自分では間違いがわかりません。
どなたか、間違い箇所がわかりませんでしょうか。
A列には5行目から、0-720までの721個の少数値
0
1.005586592
2.011173184
B列には5行目から、721個の少数値
5.83
5.69
5.66
D列には5行目から、0-720まで、1ずつ増加の整数値
0
1
2
E列には補間値をマクロから代入
以下マクロです。
お手数をおかけしますが、目を通して指摘していただけませんでしょうか。
Sub 補間_3次スプライン()
Dim i As Long
Dim h(1000) As Double
Dim dif1(1000) As Double
Dim dif2(1000) As Double
Dim data_count As Long
Dim lngDataEnd As Long
Dim dataX(1000) As Double
Dim dataY(1000) As Double
Dim x, y, yy0, yy1, yy2, yy3 As Double
lngDataEnd = ThisWorkbook.Sheets("3次スプライン").Range("A65536").End(xlUp).Row
data_count = lngDataEnd - 5
For i = 1 To data_count
dataX(i) = ThisWorkbook.Sheets("3次スプライン").Cells(i + 4, 1)
dataY(i) = ThisWorkbook.Sheets("3次スプライン").Cells(i + 4, 2)
Next i
h(0) = 0
dif2(0) = 0
On Error Resume Next
For i = 1 To data_count
h(i) = dataX(i) - dataX(i - 1) '//間隔を計算
dif1(i) = (dataY(i) - dataY(i - 1)) / h(i) '//一次微分を計算
Next i
For i = 1 To data_count
'二次微分を計算
dif2(i) = (dif1(i + 1) - dif1(i)) / (dataX(i + 1) - dataX(i - 1))
Next i
i = 1
For x = 0 To 720
If x < dataX(i) Then
yy0 = dif2(i - 1) / (6 * h(i)) * (dataX(i) - x) * (dataX(i) - x) * (dataX(i) - x) '第1項
yy1 = dif2(i) / (6 * h(i)) * (x - dataX(i - 1)) * (x - dataX(i - 1)) * (x - dataX(i - 1)) '第2項
yy2 = (dataY(i - 1) / h(i) - h(i) * dif2(i - 1) / 6) * (dataX(i) - x) '第3項
yy3 = (dataY(i) / h(i) - h(i) * dif2(i) / 6) * (x - dataX(i - 1)) '第4項
y = yy0 + yy1 + yy2 + yy3
ThisWorkbook.Sheets("3次スプライン").Cells(x + 4, 5) = y
Else: i = i + 1
End If
Next x
End Sub
No.1ベストアンサー
- 回答日時:
3次スプラインの計算式は確認していないので、それは置いておくとして、
結果がところどころしか表示されない原因は、最後のほうの
If x < dataX(i) Then
の部分ではないでしょうか。
この方法では、「If x < dataX(i) Then」を満たさなければ、そのxの行は表示されません。
次のようにしてはどうですか。
i = 1
For x = 0 To 720
Do Until x < dataX(i)
i = i + 1
If i > data_count Then Exit Do
Loop
If i > data_count Then Exit For
yy1 = ・・・・・
・・・・・・・
ThisWorkbook.Sheets("3次スプライン").Cells(x + 4, 5) = y
Next x
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Visual Basic(VBA) 数字が「0」の列を削除するため、下記のコードを実行しましたが、コンパイルエラーSubまたはFunct 3 2022/12/04 00:00
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) Sheet3から2つの条件でオートフィルターで抽出した個数をSheet2へ入力するマクロで、一つ目の 4 2023/01/12 23:40
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたいの続き 5 2023/01/24 00:16
- Visual Basic(VBA) vba 重複データ合算 5 2023/07/05 18:55
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) エクセル マクロ(A1:A10)までの中で一番多く出た数字をB10に表示 6 2023/04/25 17:01
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フェラする時に、男に喉奥まで...
-
首吊りに使われる縄は太いほど...
-
性行為の時、女性の膣の奥にあ...
-
女性はなぜ喘ぐんですか?
-
女性は何歳頃まで感じることが...
-
我慢汁が出ない彼氏※下ネタです...
-
風俗には何歳ぐらいまで、行っ...
-
男はSEXを拒否されると、ど...
-
50代男性です。彼女も50代のW不...
-
レズじゃないけど女と性的な事...
-
女の子の体って何であんなにフ...
-
お互い初エッチてどのような流...
-
セフレと別れて後悔
-
どうして男性は、女性のパンテ...
-
結婚して10年近く経っている...
-
妻を抱きたいと思う時はいつ??
-
おじいちゃんとおばあちゃんで...
-
「ベサメムーチョ」の意味
-
あそこが大きい男性とSEXしたら...
-
姉に女装させられました。僕は...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フェラする時に、男に喉奥まで...
-
首吊りに使われる縄は太いほど...
-
女性は何歳頃まで感じることが...
-
性行為の時、女性の膣の奥にあ...
-
風俗には何歳ぐらいまで、行っ...
-
我慢汁が出ない彼氏※下ネタです...
-
お互い初エッチてどのような流...
-
50代男性です。彼女も50代のW不...
-
結婚して10年近く経っている...
-
女性はなぜ喘ぐんですか?
-
男はSEXを拒否されると、ど...
-
セフレと別れて後悔
-
女の子の体って何であんなにフ...
-
レズじゃないけど女と性的な事...
-
ソープに行った夫。私が取るべ...
-
どうして男性は、女性のパンテ...
-
太った男性は正常位でセックス...
-
学校の先生ってエロいこと考え...
-
おじいちゃんとおばあちゃんで...
-
ソープは基本ゴムあり挿入だと...
おすすめ情報