プロが教える店舗&オフィスのセキュリティ対策術

プロジェクトオイラーというサイトがあります。
https://projecteuler.net/
数学的なクイズを出題するサイトで、手計算だけでは解けずプログラム併用を必須とする問題ばかりです。しばらくは遊んで数十問ほど解きましたが。。。

Basic使用者はごく少数でC++やJavaが多く、正解すると他正解者のプログラム紹介等を見れるようになってますが、ごくごくシンプルなプログラムで解いてます。極端な例では2,3行、確かRuby。調べてみるとVBAは関数の数値範囲が狭く、他言語ではメモリ範囲内で無限なんていうのもありました。数列で値が1000桁に達する添え字を求めよとか、なかなか歯ごたえある問題ばかりだと思ってましたが、Basic以外ではすんなり解いてるようなのです。

要するにVBAの数値範囲が狭い、あるいは遅いがために工夫して解く部分が多過ぎるのです(これも楽しみと言えなくもありませんが)。この先、500問もの問題を解くというのに2桁レベルで躓いており、他言語ではこんなに簡単に解いてる、モチベーションが一気に下がりました。プログラム紹介見なけりゃよかったと後悔してます。

みなさんだったら、どうします?乗り換えますか?VBAだけで解けそうですか?
愚痴みたいな質問ですみません。

A 回答 (2件)

こんにちは。



別に、VBAを選択というよりも、使用環境が限定されているから、VBAを使っているという人がほとんどではありませんか?

>みなさんだったら、どうします?乗り換えますか?VBAだけで解けそうですか?

VBA使用者というのは、ド素人集団だから、仮に言語を換えても、やっぱりその換えた時点ではド素人そのものなんだと思います。もしVBAで、うまくないから、言語を換えて解決という話にはならないことだと思います。

>要するにVBAの数値範囲が狭い、あるいは遅いがために工夫して解く部分が多過ぎるのです
VBAというよりも、限定的ではあるけれども、VB6なのですよね。だから、VB6のいろんな諸問題をどう解決してきたかという記録からみて取れるのは、その言語に対する期待感からの構築された技術だと思うのです。つまり、大勢の人の努力による積重ねの無形の財産をだったわけです。

それで、逆に、言語換えて、解決していくかというと、まったく目処が立たないのではないかと思うのです。ただ、そもそも、VBAは、アプリの中で操作するものですから、臨時に、言語として単独で利用しているだけにすぎません。

>他言語ではこんなに簡単に解いてる、モチベーションが一気に下がりました。
これは、私自身の感覚的なこともしれませんが、たぶん分かる人は分かってくれると思います。

ひとつは、問題は情報量なのだと思います。
あえて、能力的な話はしませんが、様々な問題に対して、VBAまでサイズダウンしてまで、解法が降りてこないのです。昨今、VB6での解決方法というのは、一切情報として上がってこないので、私などは「VBレスキューの花ちゃん」ぐらいです。

もうひとつは、やはりアルゴリズムなどを利用した解法は、VBAユーザーには不慣れだということです。

もし、プログラミング言語をやりたいのでしたら、今すぐでも、中途半端なVBAなどやめて、本格的なプログラミング言語に挑戦すべきだと思います。

むろん、VBAには、VBAでしか解決しない問題はあるのは承知の上での見切りです。数学的な問題解決に、VBAが、使えれば使えばよいということにすぎないと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。
情報が乏しいことによる不利というのがあるのですね。やっぱりマイノリティだからですか?

>アルゴリズムなどを利用した解法は、VBAユーザーには不慣れ
私もVBA片手間プログラマですが、大部分はデータ読込、切り貼り、エクセル様様です。アルゴリズムが必要になることはほとんどありません。

サイトの方は、行けるところまで行きます。BASICユーザはランキング上位でも200問程度です。

お礼日時:2015/09/08 23:04

目的次第です。



単に結果が必要なだけなら、簡単に解けそうな機能やライブラリが用意されている言語を使います。
VBAで作ることが目的なら、乗り換えては本末転倒です。

値の範囲とありますが、 整数にLong、浮動小数点にDoubleを使えば、 Javaの int, double に相当します。
決してせまくはありません。

速度は、VBAを選択した時点で不利ですが、言語選択以上にアルゴリズムの選択が大きなウエイトを占めます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2015/09/08 07:05

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