[[20150304214316]] 『連続した数の計算結果を表示させるマクロ』(Sparkling) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『連続した数の計算結果を表示させるマクロ』(Sparkling)

 どうぞよろしくお願いします。

 シート1 A1 に 10
 シート2 B1 に シート1!A1+50 という式が入っています。
 A1の数を一定の数ずつ増やすと、たとえば10ずつであれば、
 答えは、60,70,80,90..... となります。
 これをいくつからいくつまでいくつずつ増えるかを指定すると
 自動で1つのセルごとに答えが出るマクロを作りたいのですが、助けていただけないでしょうか?
 答えを出すシートはシート3に表示させたいです。
 何卒どうぞよろしくおねがいします。


 マクロで処理せずとも、
 シート3のA1に=シート2!B1 といれて、シート3のA1を選択して、ホームタブのフィルグループで連続データの作成。
 でてきたダイアログで、範囲を列、増分値を10、停止値を、たとえば100 として実行すると、60から100までの結果が自動記入されます。

 必要なら、この操作をマクロ記録してみたらいかが?

(β) 2015/03/04(水) 23:33


 (β)様
 コメント誠にありがとうございました。
 すみません、説明の仕方が間違っていました。
 B1には、IRRを求める式が入っているので、シートA1の数が一定の数だけ増えていくときの結果を表示させたいです。

 具体的には、
 シート A1 10000 のとき
 シート B1  0.15

 シート A1 11000 のとき
 シート B1  0.18

 シート A1 12000 のとき
 シート B1  0.19

 とかこんな感じになります。
 わかりずらい説明で申し訳ありませんでした。このパターンでも可能でしょうか?
 マクロで、なくてもいいのですが、どうぞよろしくおねがいします。
(Sparkling) 2015/03/05(木) 10:05

 「IRRを求める式」が、どんな式なのかわからないので、とりあえず、シート1!A1+50 で。

 自分なら(手作業でやるなら)、

 ・シート3のどこかのセルに増分という名前をつけて、そこに好きな数値(10 でも 1000 でも)を入れる。
 ・シート3の A1 に シート2のB1にいれたのと「同じような式」をいれる。
 ・ただし、同じような だから同じじゃない。
   シート1!A1 にあたるところを	Sheet1!A$1+(ROW()-1)*増分
  シート1!A1+50 なら =(Sheet1!A$1+(ROW()-1)*増分)+50
 ・で、このセルを下に好きなだけフィルコピー

 どうしても、マクロがいいなら書くけど。

(β) 2015/03/05(木) 10:52


 実際の「IRRを求める式」が提示されれば、簡単に解決すると思うんですがねぇ。。

(半平太) 2015/03/05(木) 11:12


 半平太さんのコメント通り、ふつうに数式でしょりすればいいと思うけど、とりあえずコードを。
 (勘違いあればごめん。コードの中のシート名は、式の中のシート名含めて、実際のものに)
 Sheet3 に増分と回数という名前のセルをつくり、そこに値を入れてから以下を実行。

 Sub test()
    Dim incre As Double
    Dim init As Double
    Dim cnt As Long
    Dim fm As String
    Dim wk As String
    Dim v As Variant
    Dim i As Long

    init = Sheets("Sheet1").Range("A1").Value           '初期値
    incre = Sheets("Sheet3").Range("増分")              '増分
    cnt = Sheets("Sheet3").Range("回数")                '回数
    fm = Mid(Sheets("Sheet2").Range("B1").Formula, 2)  '計算式

    ReDim v(1 To cnt, 1 To 1)

    For i = 1 To cnt
        wk = fm
        wk = Replace(wk, "Sheet1!A1", "(" & init + (i - 1) * incre & ")")
        v(i, 1) = Evaluate(wk)
    Next

    Sheets("Sheet3").Range("A1").Resize(UBound(v, 1)).Value = v

 End Sub

(β) 2015/03/05(木) 11:20


 皆様、コメント、大変ありがとうございます。
 取り急ぎ、お礼のみ申し上げます。後程またコメント書きます。
 ありがとうございました。
(Sparkling) 2015/03/05(木) 13:12

 (β) 様
 お世話になります。
 ひとつ教えて下さい。手作業でやるのと、作ってくださったマクロは同じ結果になりますか?
 手作業の方はうまくいったのですが、マクロは、#VALUE!が並んでしまいます。
(Sparkling) 2015/03/05(木) 14:39

 手元の簡単な数式をベースにしたものでは問題なく、手作業とマクロが同じ結果になります。
 Sheet1のA1の値、Sheet2のB1の式、Sheet3の初期値セルの値、増分セルの値をアップしてもらえませんか?

(β) 2015/03/05(木) 15:04


(β)様:
 ありがとうございます。入力などの間違いかもしれないので、もう一度やってみます。
(Sparkling) 2015/03/05(木) 15:57

(β)様:
 同じ結果になりました。数件あるのでマクロで作業したいと思います。
 これから本来のワークシートでやってみます。
 もしわからなくなったら、また助けてください。
 この度はどうもありがとうございました。またよろしくお願いいたします。

(Sparkling) 2015/03/05(木) 17:50


(β)様:

 すみません。やっぱりもう一度教えてください。
 上の例でいうB1が、 シート2のL35にあたりまして、(=IRR(L34:AJ34,0.1)という式になっています。
 上記で教えていただきました、
 「シート1!A1+50 なら =(Sheet1!A$1+(ROW()-1)*増分)+50」
 ということですが、
 この式の場合だと、どこをどのように直したらいいのでしょうか?
 (半平太) さんにもコメントいただいたように、一番初めに出した例の式が悪くて申し訳ありません。
 どうぞよろしくお願いいたします。
 マクロでも自分で作業でもどちらでも構いません。よろしくおねがいします。

(Sparkling) 2015/03/05(木) 19:01


 【上の例でいうB1が、 シート2のL35にあたりまして】

 あぁ、そうですか・・・いいですけど・・・

 【(=IRR(L34:AJ34,0.1)という式になっています】

 この式の中で、

 「シート1 A1 に 10」
 「A1の数を一定の数ずつ増やすと」

 といっている A1 はどこですか?
 0.1(10%)のところですか?

 いずれにしてもマクロは不要ですね。
 シート3の A1 に =IRR(シート2!$L$34:$AJ$34,初期値+増分*(ROW()-1))
 こうして下にフィルコピーすればいいのでは?
 (初期値セルや増分セルには実際の値(0.1 等) をいれる)

(β) 2015/03/05(木) 19:39


 >(半平太) さんにもコメントいただいたように、一番初めに出した例の式が悪くて申し訳ありません。

 いえ、一番始めの式ではなく、実際のIRRの数式が分かれば
 前提が単純なので、数式一つで利回りは求まりますよ、と云う趣旨です。
 (つまり、わざわざデータを作る必要は無いですよ、と云うことです)
 (もっとも、実際にやってみたらかなり面倒な式になってしまった。まぁ、やっつけなので・・)

 例:
 J34セル =IRR((50+(ROW(INDIRECT("A1:A"&N34+1))-2)*M34)*(ROW(INDIRECT("A1:A"&N34+1))>1)+K34*N(ROW(INDIRECT("A1:A"&N34+1))=1),0.1)

 <結果図>
  行  _ J _  ___K___  ____ L ____  __M__  __N__
  33  IRR    投資額   初期回収額   増加   回数 
  34  6.74%   -1000           50     10     15 
  35  4.06%    -900           50      5     15 

(半平太) 2015/03/05(木) 20:12


(β) 様、(半平太)様
 コメント、大変ありがとうございます。取り急ぎお礼申し上げます。
 返信が遅くなりまして申し訳ありません。これからやってみます!

(Sparkling) 2015/03/06(金) 11:24


(β)様

 といっている A1 はどこですか? 0.1(10%)のところですか?

 @ A1 にあたるところは、0.1じゃないです。
 シート1のC5 になるのですが、C5には、シート2のE21 がリンクで張り付いています。
 C5は、入力用のシートという感じです。

 =IRR(シート2!$L$34:$AJ$34,初期値+増分*(ROW()-1))
 この式の初期値のところにC5の値を数字で入力すると
 フィルコピーすると、ちゃんと数字が表示されるのですが、
 最初の列はあっていますが、2列目から計算結果値が違うので、
 なにかちょこっとおかしいんだと思います。
 どこを直すといいと思われますか?

 わかりにくい説明ばかりでほんと何度も申し訳ありません<m(__)m>
 よろしくおねがいします。

(Sparkling) 2015/03/06(金) 16:32


 私は自他ともに認める(?)関数というかエクセル音痴ですので、半平太師匠のリコメンドされる方式
 つまり、増分を与えながらいくつか、結果を確認しなくても、条件を与えて一発で利回りが得られるという
 その線でいかれたらどうでしょう。

 一応、その「関数音痴」のβの思惑は、

 初期値セル(説明では Sheet1のC5 ないしは Sheet2のE21 ?) に 0.1、増分セルに 0.1 が入っていたとして
 Sheet3 の A1 から下に(つまり行に。 2列目から・・・といっておられるのがちょっと気になりますが)
 =IRR(シート2!$L$34:$AJ$34,初期値+増分*(ROW()-1)) を 書いたとしたら
 A1 は実際には =IRR(シート2!$L$34:$AJ$34,0.1+0.1*(1-1)) つまり =IRR(シート2!$L$34:$AJ$34,0.1)
 A2 は実際には =IRR(シート2!$L$34:$AJ$34,0.1+0.1*(2-1)) つまり =IRR(シート2!$L$34:$AJ$34,0.2)
 A3 は実際には =IRR(シート2!$L$34:$AJ$34,0.1+0.1*(3-1)) つまり =IRR(シート2!$L$34:$AJ$34,0.3)

 といったようなことになると・・・

 まぁ、βがわかっていないのだと思いますので、半平太師匠におまかせして撤退したほうがいいようで。

(β) 2015/03/06(金) 21:35


(β)様

 週末、返信することができなくて申し訳ありませんでした。
 取り急ぎ、お礼申し上げます。どうもありがとうございました。
 またご連絡いたします。
(Sparkling) 2015/03/10(火) 12:01

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.