EXCEL97のワークシートでファイルを作成したのですが、データ数が膨大で動かない(計算終了まで時間がかかりすぎる)ため、ワークシート関数の代わりに、VBAのSub~End Subを作成し、計算結果(式ではなく数値)のみをセルに貼り付ける作業を行っています。

ワークシート関数のTRENDを使用しているのですが、これをVBA上で使用するためにどう入力すれば良いかわかりませんので、ご教授いただきたいと思います。

myCELL=Application.TREND(既知のy, 既知のx, 新しいx, 定数)

でmyCELLを計算させたいのですが、
配列の既知のyおよび既知のxがどのように入力すれば良いか判りません。
この数値をセル上において、例えばA1:A10、B1:B10という形にすることは
できますが、求めていますのは
X1,X2~X10 Y1,Y2~Y10の変数がVBAのプログラム上にある場合の配列の入力
(数値取込?)を教えていただきたいと思います。

TREND関数はVBAでも使用できる関数となっていますが、
私の求めるやり方は不可能である場合もその旨をお教えください。

よろしくお願い申し上げます。

このQ&Aに関連する最新のQ&A

A 回答 (1件)

VBA内でTrendを使ってみました。

らしき答えは出ました。
参考になる?(Excel97がないため、Excel2000で確認しています)

Sub Trend_Test()
  Dim y(10) As Double '既知のy
  Dim x(10) As Double '既知のx
  Dim newX As Double '新しいx

  '配列y()、x()に値を代入
  y(1) = 100: x(1) = 1
  y(2) = 200: x(2) = 2
  y(3) = 300: x(3) = 3
  y(4) = 400: x(4) = 4
  y(5) = 500: x(5) = 5
  y(6) = 600: x(6) = 6
  y(7) = 700: x(7) = 7
  y(8) = 800: x(8) = 8
  y(9) = 900.1: x(9) = 9

  '新しいx(例)
  newX = 5.5

  '試しに計算結果を出力
  Range("A1") = Application.Trend(y, x, newX, True)
  Range("A2") = Application.Trend(y, x, newX + 1, True)
  Range("A3") = Application.Trend(y, x, newX + 2, True)

End Sub

この回答への補足

このプロシージャーはExcel97でも動作いたしました。
入力形式はこれであっているはずなのですが、
私の計算方式にアレンジすると、ERROR2015で
計算できなく苦しんでいます。

もう少し考えてみます。ありがとうございます。

補足日時:2001/11/23 21:48
    • good
    • 0
この回答へのお礼

色々調べた結果、以下のような形にするとエラーが出なくなりました。

Sub TEST_Trend()
Dim x As Variant
Dim y As Variant
Dim NEWx As Double
x = Array(0.005479452, 0.019178082, 0.038356164, 0.082191781, 0.167123288 _
, 0.252054795, 0.328767123, 0.41369863, 0.495890411, 0.580821918, 0.663013699 _
, 0.747945205, 0.832876712, 0.915068493, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 15, 20)
y = Array(0.055, 0.055, 0.057, 0.064, 0.086, 0.086, 0.087, 0.096 _
, 0.099, 0.1, 0.1, 0.1, 0.01, 0.103, 0.106, 0.15, 0.233 _
, 0.347, 0.483, 0.64, 0.817, 0.995, 1.163, 1.31, 1.545, 1.797, 2.07)
NEWx = 0.05

Dim i As Integer
For i = 1 To 20
Cells(i, 1) = Application.Trend(y, x, NEWx + i - 1, True)
Next i

End Sub

Array関数を使用することで、エラーが出なくなりました。
できるということがわかったので、あきらめず考えることができました。
ありがとうございました。

お礼日時:2001/11/24 10:17

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセル 3-Dグラフ x,y,z軸の項目軸について

40×40の数値データを3-Dグラフで表示しています.

A行にx軸,1列にy軸,それぞれ項目軸として
使いたいのですが,
片方の軸を項目軸ラベルとして使うと
もう片方の軸を項目軸ラベルとして使う事が出来ません.

S1,S2と表示してしまうので
任意の数値に変えて表示するには
どうしたらよいでしょうか?

Aベストアンサー

簡単な方法としては、あらかじめ項目軸ラベルを文字列にする
B行と2列目を項目軸ラベルとして挿入して、数値を文字列にする。
数字を文字列にする関数は TEXT(値、形式)を使います。
単位を付けたいときはTEXT() & "cm" のようにしたらいいと思います

または、面倒臭いですが
グラフウィザードで項目軸とデータ範囲をしっかり指定する
そして、各系列ごとに直していくという手もあります。

QFind系メソッド、Findメソッドに相当するワークシート関数または、VBA関数は?

Excelのワークシート関数または、VBA関数で、DAOのFind系メソッドやADOのFindメソッドに相当する機能はありますか?
(Forループで回せば似たようなことはできるのですが、非効率なので・・・)

# 表計算とRDBは別物ってツッコミはなしということで。(^^;

Aベストアンサー

こんにちは。maruru01です。

Rangeオブジェクトに対するFindメソッドがあります。
また、同条件の繰り返し用に、FindNext、FindPreviousメソッドもあります。
詳細はヘルプで。

Qエクセル:ワークシートを自動で生成&ワークシート名を自動で割り振り

こんにちは はじめまして

エクセルのワークシートを自動で生成するやり方を教えていただけますでしょうか。

やりたいことは以下の通りです。

何件かお店がありまして、毎日の売り上げ報告がファックスで本部に送られてきます。
そのファックスを見ながら、本部ではエクセルに入力し合計と累計を出すようにしています。

今現在は雛形ワークシートを一つ作り、手動でワークシートを30,31日分をコピーし、ブックには「店舗A2006年3月度分.xls」というようなブック名で保存してあります。
うちの会社は10日締めなので、3月で言うと、20060311から20060410(←数字は西暦)までのワークシートを作ります。

ワークシートのイメージとしてはこんな感じです。↓

シート名:店舗A.xls
ワークシート名:「雛形」
----------------------------
当日の日付
商品A 単価 ○個 小計
商品B 単価 ○個 小計
    ・
    ・ 
         当日の合計
----------------------------

そしてこれの「雛形」を、自動で一か月分ワークシートをコピーするようにしたいのです。(今は手動でやってます)
VBAの本を読んで、For~Next分を使うと、指定した枚数コピーできることはわかったのですが、ご承知の通り30日の月もあれば31日の月もありまして、これを計算で自動に判断するようにできないでしょうか?

欲を言えば、さらにそのワークシート名も自動で「A店舗20060311」というように日付ごとのワークシート名を入れられるようになると助かります。

もっと欲を言えば、各ワークシートの特定のセルに当日の日付を入れてるのですが(セル番地はどこでもいいです)、そこの日付も、ワークシート名と連動して自動で入れられると助かります。

長文になってしまいましたが、どなたか教えていただけると助かります。

よろしくお願いいたします。

こんにちは はじめまして

エクセルのワークシートを自動で生成するやり方を教えていただけますでしょうか。

やりたいことは以下の通りです。

何件かお店がありまして、毎日の売り上げ報告がファックスで本部に送られてきます。
そのファックスを見ながら、本部ではエクセルに入力し合計と累計を出すようにしています。

今現在は雛形ワークシートを一つ作り、手動でワークシートを30,31日分をコピーし、ブックには「店舗A2006年3月度分.xls」というようなブック名で保存してあります。
うちの会社は...続きを読む

Aベストアンサー

申し訳ありません。会社で、サンプルを作成して、帰宅時間になったので、あまり確認せずに、提示してしまいました。
今は、自宅で、再度確認し、修正版を提示いたします。


Dim tmp_dat5 As Date
Dim tmp_dat6 As Integer
Dim cnt As Integer
Dim max As Integer
Dim nen As Integer
Dim getu As Integer
Dim sname As String
Dim tmp_day As String
Dim tmp_getu As String
Dim shop As String
nen = Sheets("Work").Range("A1").Value
getu = Sheets("Work").Range("B1").Value
If getu = 12 Then
nen = nen + 1
getu = 1
Else
getu = getu + 1
End If
tmp_dat5 = DateValue(nen & "/" & getu & "/01")
tmp_dat5 = tmp_dat5 - 1
tmp_dat6 = Day(tmp_dat5)
shop = Sheets("Work").Range("A2").Value
nen = Sheets("Work").Range("A1").Value
getu = Sheets("Work").Range("B1").Value
tmp_getu = Right("0" & getu, 2)
For cnt = 11 To tmp_dat6
tmp_day = Right("0" & cnt, 2)
sname = shop & nen & tmp_getu & tmp_day
Sheets("雛形").Select
Sheets("雛形").Copy Before:=Sheets("雛形")
ActiveSheet.Name = sname
Sheets(sname).Range("L1").Value = nen & "/" & tmp_getu & "/" & tmp_day
Next cnt
nen = Sheets("Work").Range("A1").Value
getu = Sheets("Work").Range("B1").Value
If getu = 12 Then
nen = nen + 1
getu = 1
Else
getu = getu + 1
End If
tmp_getu = Right("0" & getu, 2)
For cnt = 1 To 10
tmp_day = Right("0" & cnt, 2)
sname = shop & nen & tmp_getu & tmp_day
Sheets("雛形").Select
Sheets("雛形").Copy Before:=Sheets("雛形")
ActiveSheet.Name = sname
Sheets(sname).Range("L1").Value = nen & "/" & tmp_getu & "/" & tmp_day
Next cnt

申し訳ありません。会社で、サンプルを作成して、帰宅時間になったので、あまり確認せずに、提示してしまいました。
今は、自宅で、再度確認し、修正版を提示いたします。


Dim tmp_dat5 As Date
Dim tmp_dat6 As Integer
Dim cnt As Integer
Dim max As Integer
Dim nen As Integer
Dim getu As Integer
Dim sname As String
Dim tmp_day As String
Dim tmp_getu As String
Dim shop As String
nen = Sheets("Work").Range("A1").Value
getu = Sheets("Work").Range("B1").Value
If getu = 12 T...続きを読む

Qy=F(x)で、yの値からxの値を求めたい

y=F(x)
の式でx=・・・の形にできれば問題ないのですが、できないときに、yの値でxの値を求めたいのですが、どうすればよいですか?

具体的には

y=F(x)=A1exp(-x/t1)+A2exp(-x/t2)+A3(-x/t3)
で、A1,t1などは、適当に入れる。
これでyの値を決めて、そのときのxの値を求めたいです。

Aベストアンサー

先の回答に訂正です。
while((f(x1-y)*(f(x1-y))>eps
ではなく
while (f(x1)-y)*(f(x1)-y)>eps
です。
久しぶりにVBAで書いたので文法ミスがほかにもあるかもしれません。あとCやFORTRANなら実装例が結構あるかと。

Qエクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1という

エクセルで同じA列の中に、1,2,3,4,5,6,2,3,4,2,1,3,2,2,2,3,1,3,1というような順番で数字が並んでいます。

その数字の中で、1→3と3→1になるものがいくつあるか求めたいのですが、出す関数・マクロがわかりません。
教えていただけないでしょうか?

よろしくお願いします。

Aベストアンサー

こんばんは!

>A列の中に
とは行方向に数値が入っている!というコトでしょうか?

そうであれば
表示したいセルに
=COUNTIFS(A1:A1000,1,A2:A1001,3)+COUNTIFS(A1:A1000,3,A2:A1001,1)
としてみてください。

「1」の次の行が「3」の場合と
「3」の次の行が「1」の場合をプラスしています。m(_ _)m


人気Q&Aランキング

おすすめ情報