20170405

VBAで、pythonのrangeとか、np.linspaceみたいな連番を得る

VBAを頑張っている。

pythonは、どんな環境でも使えるわけではない。

  • Windows環境下で、
  • Excelなど、Officeは使える。
  • マクロも使える。
  • コマンドラインも使える。
  • でも、pythonは使えない。
  • というか、インストールしていいのか分からない。

「この際、VBAを覚えて、pythonで培った作図スキルを、excelのVBAで活かそう。」という考え方で、勉強している。
VBA(Visual Basic for Application(「アプリ内のマクロを、VBの文法で実現」という認識))

VBAをpythonの様に使えない

pythonでいう、rangeとか、np.linspaceみたいな関数が無いと困る。
作図の時に、頻繁に使用するので。

で、VBAには、実際無い。
rangeすら無い。
rangeに至っては、excelのセルの範囲を指定するときの言葉の様です。

VBAで、連番出す系の関数がほしい。
そんな時のために、類似した関数を作った。

renban(最初の数字、最後の数字、配列個数)

こんな感じで使う。Subプロシージャの中で…

Sub test()
b = renban(0, 1, 10000)
Debug.Print b(777)
End Sub

とすると、bに入れた変数の777番目が取り出されて、

0.0777

が返ってくる。

連番で配列が得られれば、それを変数として関数にバンバン代入して、どんどんデータがたまっていき、ぱっぱと作図できる。

コード全文

Function renban(start1 As Double, stop1 As Double, num As Integer)
'型は敢えて指定しない。
Dim grd
'変数cは、引数numによって、長さが指定される。
'プロシージャ内(Functionとか、Subとかの中)で動的な変数(配列の長さが可変長)には、Dimじゃなく、ReDimが必要
ReDim c(num)
'引数start1〜stop1までの傾きgrdを求める。

grd = (stop1 - start1) / num

For i2 = 0 To num
c(i2) = grd * i2
Next i2

renban = c

End
Function

Sub test()
b = renban(0, 1, 100)
Debug.Print b(77)
End Sub

使いたいなら、毎回、Function~End Function部分を書けば、いいと思うよ。面倒ですが…

何かいいやり方があるのだろうか。

posted by yuchan at 07:00 | Comment(0) | python
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: