VBA初心者です。
例えば1次式y=mx+bのmとbを取得するために、
Selection.FormulaArray = "=LINEST(A2:C2,A3:C3)"
と記述した場合、例えば範囲A3:C3のC3を変数として指定する事はできるのでしょうか?
2次式の場合は、
Selection.FormulaArray = "=LINEST(A2:C2,A3:C4)"
3次式の場合は、
Selection.FormulaArray = "=LINEST(A2:C2,A3:C5)"
となるので,
If N次式 then
Selection.FormulaArray = "=LINEST(A2:C2,A3:C?)"
End If
の?に適切な値を変数を使って入れたいのですが・・・。
質問が解りにくくて申し訳ないですが、よろしくお願いします。
No.5ベストアンサー
- 回答日時:
mumu001様 #3 のWendy02です。
最初に、以下は、間違いでした。みなさんのコードとあわせるために、オンラインで訂正したのが、いけませんでした。
訂正前 7行目の
× Addr = Range("A3:C3").Resize(Cnt).Address(0, 0)
↓
Addr = Range("A3:C3").Resize(n).Address(0, 0)
となります。これは、説明する必要もありませんが、行の範囲を、次数で、Resizeで広げています。
Ret = Evaluate("LinEst(A2:C2," & Addr & ")")
このRet の解は、配列で出力されます。なぜ、WorksheetFunction で行わないかというと、そのまま、Rangeオブジェクトを入れたらエラーが出ました。おそらく、引数自体も、1次元配列を取るのではないでしょうか?そうすると、Rangeオブジェクトは、Value化しても、2次元配列ですから、1次元に戻す変換コードが必要になってしまいます。その手間を省くために、配列がそのままでもよい、Evaluate で、ワークシートの関数を使いました。
i = UBound(Ret) - LBound(Ret) + 1
これは、その配列を取り出すために、解の数を数えています。
通常は、UBoundで、添え字の上限に、「+1」を足せばよいのですが、場合によって、Option Base 1 の添え字の下限の数を変えている可能性がありますから、そのために、そのような式になっています。
ActiveCell.Resize(i).Value = Ret
Ret の中には、複数の解が入って、それは配列状態になっていますから、それを、1つずつセルに収めるには、その範囲を取って貼り付けてやらなくてはなりません。そのために、Resizeで、行の範囲を広げています。
これは、Excelのシートに書き出しているのですが、解が1つなら1行、解が2つなら2行というようにしています。
余計に話がややこしくなったかもしれませんね。
丁寧な説明ありがとうございました。
一読しただけでは、到底理解できそうもありませんのでじっくり調べてみたいと思います。ただ、Wendy02さんの理解の深さに驚くばかりです。(プログラミングをお仕事とされている方と想像します)
No.3
- 回答日時:
こんばんは。
VBAなら、そのまま、VBAで出力すればよいと思いますね。
目的が違うのでしょうか?ユーザー定義関数という手もないわけではありませんが・・・。
Sub LinestTest()
Dim Addr As String
Dim n As Integer
Dim Ret As Variant
Dim i As Long
n = 2 '次数
Addr = Range("A3:C3").Resize(Cnt).Address(0, 0)
Ret = Evaluate("LinEst(A2:C2," & Addr & ")")
i = UBound(Ret) - LBound(Ret) + 1
ActiveCell.Resize(i).Value = Ret
End Sub
お返事ありがとうございます。
なにぶん初心者なもので、処理のプロセスが理解できません。ヘルプ等で調べてみますが、お手数でなければ解説していただけませんでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 a1,a2, a3をベクトル空間Vのベクトルとする。a1+a2,a2+a3,a3+a1が一次独立のと 2 2022/10/02 15:55
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Excel(エクセル) EXCEL関数(数式)を教えてください 4 2023/05/08 17:19
- Excel(エクセル) エクセルのvlookupについて質問です 3 2023/01/05 15:15
- Excel(エクセル) ExcelのIF関数について 4 2023/05/24 12:54
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- Excel(エクセル) エクセルの当番表を作っていますが教えてください 4 2023/01/06 12:12
- Visual Basic(VBA) 他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の 8 2023/01/30 18:48
- Excel(エクセル) エクセルVBA 複数行にまたがっている選択を判定するには 2 2023/05/21 21:54
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
六角形のマスの作り方
-
ASP(VBS) ←→ JavaScript の変数...
-
JSPの処理の途中で、JavaScript...
-
JavaScriptで ブラウザの閉じる...
-
VB.NET2003 テキストボックスに...
-
〔Excel:VBA〕マクロの実行が異...
-
if(1){...}とはどういうことで...
-
VBScript から JavaScript を呼...
-
JavaScriptでショートカットキ...
-
1つのVBAコードをすべてのコア...
-
onload onunload onbeforeunloa...
-
ページを一回だけリロードさせ...
-
Vba SelStart、SelLen教えてく...
-
jsファイルを閲覧者がダウンロ...
-
フォルダを自動で開く
-
エクセルVBA/ Formatで文字列が...
-
ローカルのレジストリを読みたい
-
PowerPointで時計表示
-
セレクトで都道府県から市区町...
-
Webページ中の javascript をVB...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel vba 配列内の最大値を求...
-
VBA 多次元配列のクイックソー...
-
VB2008で数字の桁数を調べる...
-
delete[]と、delete演算子の明...
-
六角形のマスの作り方
-
どんなオブジェクトでも表示で...
-
VBA セル範囲をVariant変数に代入
-
CollectionとArrayの呼び出し順
-
コードの意味 ("Scripting.Dict...
-
[VB6/VBA] Variant型配列リテラ...
-
JSPの処理の途中で、JavaScript...
-
VB.NET2003 テキストボックスに...
-
JavaScriptで ブラウザの閉じる...
-
「終了していない文字列型の定...
-
gas 全角数字を半角数字に変換
-
if(1){...}とはどういうことで...
-
正整数の半角数字かどうか判定する
-
htmlのfileタグに自動で値を入...
-
Vba SelStart、SelLen教えてく...
-
デザイン時のVisible=Falseは実...
おすすめ情報