人に聞けない痔の悩み、これでスッキリ >>

Excel等OfficeシリーズにPythonが搭載されるという噂が出ているので、AIとも相性が良いと言われているPythonを覚えようと考えています。

プログラマではないですが、VBAはほぼ不自由なく書けるレベルと思います。(業務アプリを開発できるレベル?です)

とりあえず、pythonをインストールしてみましたが、構文もあまりVBAと変わらずそこまで違和感も感じないのですが、なにかVBAからPythonに転向するにあたっておすすめの勉強法があれば教えてください。構文の比較等がまとめた書籍・サイト等を教えていただけると嬉しいです。

A 回答 (2件)

個人的にはVBAよりかはVC#の方がまだ違和感ないですし、Pythonは触る程度ですがVBAは眼中にないですよ。


それに構文を比較したサイトってならRubyとかPHP・JAVAなど(又はどれか)はどこかでか見た記憶はありますけど。

そもそもモジュールを追加していって使いやすくするPythonですからそれこそVBAとの比較なんて制作者も考えてもいないでしょうし、
意識してると考えが固着しちゃうんじゃないでしょうか?

と個人的な考えなので、質問者さんの考えを否定はしません。
業務アプリの開発においてクラスモジュール・WindowsAPIなどを使いこなされているのなら、私と考えが違っても当たり前とも思いますし。
    • good
    • 1

こんにちは。



お答えの趣旨とは違ってしまいすみません。

>Excel等OfficeシリーズにPythonが搭載されるという噂
オープンソースをMicrosoft 社が受け入れるということは、ビル・ゲイツが死なない限りはありえないでしょうね。Microsoft 社の経営陣の考え方は、私たちが想像する以上に、頑なで過激だというそうです。たぶん、Libre Office, Apache OpenOffice の反Microsoft 陣営に使われているので、そう思われたのかもしれません。Microsoft 社の経営陣が、「敵」のものをやすやすと組み入れるとは思えません。(敵という表現ではなく、「赤」言っているらしいです)

確かに、VBAは、もうVBAを搭載した時点から迷いはあったようです。だから、意味もないセキュリティとかいう装置をつけたわけですし、Office 2003標準搭載のVB6 Runtime を使えなくしたりして、だんだん外堀そのものは埋められつつあるようです。

しかし、もうすでに、VSTO(Visual Studio Tools for Office)では、C#と、VB.Net が採用されているわけですから、Python というものを民間レベルでインターフェイスを作る人は出てくるでしょうけれども、公式に認めることは、現行のMicrosoft Office がなくならない限りは、ありえないと思います。昔のDeveloper のVSTOのイメージしかない私が、VB2013 辺りから、VSTOの存在を急に知ったことで、愕然とした思いをしました。

Python をお選びなら、LibreOffice等 などので、お使いなられたら、即使えます。
この私などは、10数年にも経って、Excelの構造で知らないところか出るなどしている現状で、とても、恥ずかしく思いました。

とはいえ、世の中知らないことが一杯で、私の思わくとは違うところで動いているのかもしれません。VBAが、古臭いというのは否定できませんが、それでも、日本人でAriawase というツールを作った人の考え方などは、まだまだVBAは健在のような気がします。
    • good
    • 3

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

このQ&Aを見た人はこんなQ&Aも見ています

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

QVBとVBAの違い

お世話になります。

現在、ExcelVBAで機械設計の計算をさせようと思い勉強しているのですが、VBとVBAの違い(VBと比較したとき、VBAできること、できない事)の境目?がいまいち判りません。
まだまだ勉強中で困惑しております。このままExcelVBAを勉強していく物か、VBについて勉強していくか迷っています。このままExcelVBAを勉強してExcelVBAを理解すれば判断できるかと思うのですが、畑違いの勉強になってしまわないかと心配です。

やりたいことは、各種計算の簡略化です。
現在は、関数電卓で行っていますが、これをパラメータを入力すると計算結果が出る。このような物を作りたいと思っています。

長くなってしまったのでまとめると、
1、VBAとVBの違い
2、ExcelVBAで設計計算が可能か
あと、
プログラムにより計算させるときに、最適なプログラム(JavaとかPHPとかHTML等など・・・)お勧めのプログラムがありましたらアドバイス頂けたらと思います。

Aベストアンサー

1. VBAとVBの違い

VBは単体で動作するアプリケーションが作れますが、VBAはOfficeが必要です。
また、VBAはOfficeの環境が使えるので、Excel等を使った入出力の機能が既にできていますが、VBではある程度自分で作る必要があります。また、費用的な面でVBは購入しないと使えませんが、VBAはOfficeがあれば使えますので、既にExcelなどを導入されているならば、追加の費用が必要ありません。
もし、複数の人間で作ったプログラムを利用され、かつその中にOfficeを持っていない人が含まれるのであればVBAではできませんので、VBが必要です。

2. ExcelVBAで設計計算が可能か

可能です。また、多分VBAを使わなくてもExcelの関数でもある程度のことが可能だと思われます。お持ちの関数電卓の桁数にもよりますが、相当な高精度が必要でない限り大丈夫です。

文面からすると、プログラミング未経験のようですが、やりたいことが明確なので、Excelをお持ちであればVBAで始めてみてはいかがでしょうか。他の言語(Java, C, PHP...)でも可能でしょうが、中には環境を用意しなくてはならなかったり、本質である計算以外に気にしなくてはならないことが多く、初心者にはとっつきづらいのではないかと考えます。

VBAからVBへの移行、VBからVBAへの移行はどちらも可能ですし、VBAからVBへの移行は多少時間がかかるかもしれませんが、VBよりVBAから始める方が楽なので、どちらに優越があるとは一概に言えないと思います。一人でちょっと使う程度や勉強用なら、ExcelVBAをお勧めします。
しばらくすると、ExcelVBAの限界を感じるようになると思うので、そこからVBに移行するというのでも悪くないと思います。

1. VBAとVBの違い

VBは単体で動作するアプリケーションが作れますが、VBAはOfficeが必要です。
また、VBAはOfficeの環境が使えるので、Excel等を使った入出力の機能が既にできていますが、VBではある程度自分で作る必要があります。また、費用的な面でVBは購入しないと使えませんが、VBAはOfficeがあれば使えますので、既にExcelなどを導入されているならば、追加の費用が必要ありません。
もし、複数の人間で作ったプログラムを利用され、かつその中にOfficeを持っていない人が含まれるのであればVBAではで...続きを読む

QWebページ中の javascript をVBAから実行するには

VBAで objIE を使用して Webページ中の javascript を実行したいのですが、
onclick="~~" の記述がないケースがあり困っております。
例えば以下のような記述です。

<a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>

onclick の記述がない上記のようなケースでは、javascript の呼び出しはどのようにすればよいのでしょうか?
不可能でしょうか?

Aベストアンサー

ここを読んでみればよいのですが、だらだらと文章が長いですね。^^;
http://www.ken3.org/vba/backno/vba170.html
この内容のまとめは、この後でします。もし、ダメだったら、こちらも読んでください。

>onclick="~~" の記述がないケースがあり困っております。

最初に、ストレートな回答ではありませんが、私の場合、いくつかの方法を試しています。

>a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>
この場合は、id がありますから、確実のオブジェクトとして取得できますから、まず最初に、ダメ元で、
id名.Click を一度試してみます。もしくは、この行の上部のコードのオブジェクトのClass名のオブジェクトのひとつから、ヒットさせようとします。

そこでダメなら、ということで、ken3の内容に入るのですが、この著者の結論(正解)は、

ご質問に沿って書くと
For i =0 To objIE.Document.links.Length -1
If objIE.Document.links(i).href ="javascript:;" Then '文字の比較は、大文字・小文字がある
   objIE.Document.Links(i).Click
End if
Next i

ということになっています。私は、このコードは少し古臭く感じます。

ここで、ken3 の所では、Testサイトを用意してくれているので、試してみましたが、ダイレクトでサイトがとれている限りは、やはり、

Testサイト:http://www.ken3.org/vba/test170f.html

 objIE.Navigate "javascript:xxxxx;"

が利くことが分かりました。ただし、実際は、ここで時間待ちをしなくてはならないでしょう。
解説は、フレームからですので、うまく行かなかったようです。

ここを読んでみればよいのですが、だらだらと文章が長いですね。^^;
http://www.ken3.org/vba/backno/vba170.html
この内容のまとめは、この後でします。もし、ダメだったら、こちらも読んでください。

>onclick="~~" の記述がないケースがあり困っております。

最初に、ストレートな回答ではありませんが、私の場合、いくつかの方法を試しています。

>a href="javascript:;" pnb="~~" scdaction="~~" bulkaction="~~" id="~~">~~</a>
この場合は、id がありますから、確実のオブジェクトとして取得できますか...続きを読む

QVBAをマスターしたくらい(VBAエキスパート)ではプログラマーにはなれないですか?

今事務の派遣で働いていますがVBAにはまりました。すごく楽しいのでプログラマーになりたいと思ったのですがVBAだけでは使えないのでしょうか?
よろしくお願い致します。

Aベストアンサー

VBAにはまったんなら、その調子で別の言語にもはまる可能性だってあるよ。要するに「プログラミングする」ということにはまったのかもしれない。VBAだけで他は一切やりたくないとなると無理だけど、これから他にいろいろ挑戦してみる気があるなら可能性はある。

VBAができるぐらいなら、例えばPHPあたりだって覚えられるだろう。そう複雑な言語じゃないから、大丈夫、がんばれば実用レベルには覚えられる。それなら仕事はあるよ。

それに、まぁぶっちゃけてしまえば、まったく何のプログラミングができないところからプログラマになる人だっているわけだし、あんまり、今の時点で何がどこまでできるかにこだわることないと思うよ。

問題は、年齢かな。30以上なら、まずプログラマの求人がないでしょ。20代なら、まぁ思い切って求人を見つけて転職してしまうのも一つの道。ただね、多くの場合、たぶん、今よりはるかに過酷な労働条件となる覚悟はしておいたほうがいいと思うよ。

(あと、Web系の開発なら、フリーで小さい案件から個人で受注するって道もある。ま、いろいろ道はあるってことで)

VBAにはまったんなら、その調子で別の言語にもはまる可能性だってあるよ。要するに「プログラミングする」ということにはまったのかもしれない。VBAだけで他は一切やりたくないとなると無理だけど、これから他にいろいろ挑戦してみる気があるなら可能性はある。

VBAができるぐらいなら、例えばPHPあたりだって覚えられるだろう。そう複雑な言語じゃないから、大丈夫、がんばれば実用レベルには覚えられる。それなら仕事はあるよ。

それに、まぁぶっちゃけてしまえば、まったく何のプログラミングができない...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

QOL vbaが出来たら、すごい事ですか?

時給1500円の一般事務のOLで、vbaが出来たら、すごい事ですか?
プロではないですが、エクセル・アクセスで作りたい物を作れる程度の知識です。

それとも今の時代、派遣のOLでもvbaは当たり前の知識ですか?

Aベストアンサー

こんにちは。

>時給1500円の一般事務のOLで、vbaが出来たら、すごい事ですか?
出来たとしても、時給1500円の一般事務の派遣OLでは、やめておいたほうがよいですね。
私は、経験的に、派遣の1500円の業務範囲は、十二分に分かっているつもりです。

信頼されているならともかく、正社員でないものが、変な責任を持たされて、万が一に失敗したら、元も子もありません。作業効率とか、生産性という話は、社員というか、マネージャークラスの話ですから、それを派遣社員側から口にするようなことはなかなか出来ません。

>それとも今の時代、派遣のOLでもvbaは当たり前の知識ですか?

いいえ、当たり前ではありませんが、プロでもない限りは、知っていても得にもならないと思います。
プロというのは、どんなことでも対応できるとか、困った時に対応できる力があるとか、ピンで仕事をするには、相当の実力が必要です。

一般事務の立場では、力を見せないほうがよいと思います。できるかと言われれば、「まあまあ」というくらいでぼかします。派遣でも、マンパワーのように、VBAができるという技能付きの派遣なら、少しは違います。でも、その場合、時給1500円では安すぎます。派遣としてなら、最初から、業務内容を仕切りなおしたほうがよいです。

もともと、VBAというのは、Excelの場合は、部署の非定形業務の一貫としてなされるものですから、部署のベテランが作るならともかく、派遣の人が作ったところで、簡単なものならともかく、システム構築などは無駄になることも多いです。期間内で、まともなものが作れる自信があるならともかく、家に持ち帰ってまで、作業するなんていうことになれば最悪です。

Access というのは、よほどの力がないと、派遣社員の立場では、いろんな関係で無理だと思います。プログラマだとしても、ある程度の業務に対応していくものを構築していくのは無理があります。Excelでも、Accessでも、作ったら、それで終わりということにはなりません。

それと勘違いしている人もいるようですが、Excelが詳しくなくて、Access を主にされている方は、Accessは、Excel VBAとはレベルが違うというのかもしれませんが、基本的には、Excel とか、Access とか、レベルの違いなどはありません。焦点にするべきところが違うのです。

AccessにおけるVBAとは、データベース全体の中の一部であって、Excelのように、意図してVBAだけを切り離して、まるでVBもどき(←趣味が悪い)にして扱うことはありません。まして、COMアドインとなると、以前は、C++やVB6の知識が、今は、C# やVB.Net が完璧に使える必要が出てきます。

VBAという単位では、アプリケーションによって、その役割が大幅に違います。

Excel は、三次元の OLAP Cube なんていうシロモノもありますし、Access をインストールしなくても、Excelでも、ODBCのJET はインストールされています。また、Excel自体が、今どきは使いませんが、昔の名残で、データベースのデータ構造を有しています。MySQLで、Excelをインターフェースとして使う方法もあります。要は使い方次第です。

Excel VBAを軽視する人がいますが、VBAのコードを書かせてみると、初級のレベル以上は、おかしなコードを書く人も少なくありません。最近では、あまりExcel VBAの独特のテクニックを書く人はいなくなりましたが、現行のスタイルになったのが、Excel Ver.5 だとすると、かれこれ19年ですから、それはそれなりのことはあるでしょうね。だからといって、Excel VBAを、思ったように書けたところで、自慢できることではありませんが。

こんにちは。

>時給1500円の一般事務のOLで、vbaが出来たら、すごい事ですか?
出来たとしても、時給1500円の一般事務の派遣OLでは、やめておいたほうがよいですね。
私は、経験的に、派遣の1500円の業務範囲は、十二分に分かっているつもりです。

信頼されているならともかく、正社員でないものが、変な責任を持たされて、万が一に失敗したら、元も子もありません。作業効率とか、生産性という話は、社員というか、マネージャークラスの話ですから、それを派遣社員側から口にするようなことはなかなか出来...続きを読む

QvbaでIEの名前を付けて保存(A)をしたい

VBA で IEの通知バー を操作したいです。
SendKeys で 通知バーの 保存(S) はできたのですが、
保存(s)の右隣の ▼ をクリックするとでてくる、 名前を付けて保存(A) の方法がわかりません。

どのようなキーをおくればよいのでしょうか。


他の質問をみると、SendKeysではなく ○○がよいですよ みたいな内容しか見つからず、
回答をみつけることができなくて困っておりますのでよろしくお願いいたします。

Aベストアンサー

VBAでインターネット上のファイルをダウンロードする方法をまとめてみました。 | 初心者備忘録
http://www.ka-net.org/blog/?p=4855
とか。

QVBAは今後進化?衰退?現状維持?

Excelなどに搭載されているVBAの機能は、今後ますます進化していくのでしょうか?
それとも近いうちに別の技術(.NET、VSTO、SharePoint?)に取って代わられるのでしょうか?
それとも、特に変化なく、現状のままOfficeの次期バージョンにも搭載され続けていくのでしょうか。

VBAの今後についてご存知の方、またはこれに関する記事のURLをご存知の方、ご回答よろしくお願いします。

Aベストアンサー

こんにちは。

「これに関する記事」ということで、直接ではないのですが、"Changes in Excel 2007"という記事を、Microsoft のWebサイトで読んだことがあります。その時の、いわゆる、Office モニターとMicrosoft の開発部の攻防を読み取ることができます。Office モニターというのは、おそらく、かなりの猛者というか、プロで、どうも、一般ユーザーにそのままプログラミングを解放するのは、面白くないような雰囲気なのです。モニターというのは、多くは、いわゆる、MVPと言われる人たちだと思います。

今までの展開からしても、VBAに対して、ある意味、無意味なセキュリティを加えてきたのは事実です。その反面、今まで、COMアドインは野放しだったわけです。(たとえば、Google Desktop などは、何度、アドインを切っても、再び復活しています。ある意味、スパイウェア行為です。)これは、Wordに対しては、Excelよりも、二重のセキュリティがしてありますが、反面、利用者にとっての安全性はあまりありません。実際のセキュリティは、セキュリティソフトでないと守れないのです。

もうひとつは、.Net FrameWork の問題があります。これを有効利用していくということは、VBAでは役不足です。VBAの元のVB6 は、もう過去のものになってしまいました。次のバージョンには、C#とVB.Net つまり、VSTA (Visual Studio Tools for Application) が搭載されるとは言われています。しかし、C# にしろ、VB.Net にしろ、VBAユーザーが簡単に切り替えが利くかというと、一般のVBAユーザーには、手が付けなれないような気がします。VB.Net は、一見、VBAに似ているけれども、まったく違うものだということです。

次期バージョンにも、現状のVBAは搭載されるとは思います。「MSはユーザーを裏切る」という格言に近い言葉はありますが、それほど、大掛かりな変更をするということは、今の現状からすると広範囲のユーザーを失う危険性が高くなってきているからだと思います。だいぶ、MS-Office の批判は自国・米国の中でも高くなっているようにも思います。もちろん、直接には、MS-Office に関わる、多岐にわたる違法行為からが原因です。

最終的には、MS-Office に関しては、VBAを含め世界的に衰退すると私は考えています。ただ、表計算にしろ、ワープロソフトにしろ、Microsoft 社のみがすべてではありません。VBAも同じです。ただ、最後は、また、熱烈なMicrosoft 信者のいる、日本人ユーザーだけが使い続けることにならないとも限りませんが。反Microsoft 陣営の活動が活発になってきましたし、Microsoft 社自身が、墓穴を掘ることになりかねない状況だと思います。

本質的には、国自体が、このような市場原理主義を許していることが問題なのですが、さしあたっての問題は、Microsoft 社のMS-Office の販売のターゲットは、やはり、先進国の大企業のユーザーを対象にしているからだと思うのです。しかし、今回、総務省の今年(2007.7)の「政府調達のMS-Excelの新規購入しない」という発表は、省庁内でどういう状況から起きたかは分かりませんが、自治体や公共団体では、さすがに、Microsoft 製品のバージョンアップには、ついていけなくなっているような気がします。この発表で、Microsoft社からクレームが付いて弁明はしたものの、その方向性は変わらないと思います。

"Changes in Excel 2007"

参考URL:http://technet2.microsoft.com/Office/en-us/library/bee594b4-01b1-4d17-90ca-d43735a7382a1033.mspx?mfr=true

こんにちは。

「これに関する記事」ということで、直接ではないのですが、"Changes in Excel 2007"という記事を、Microsoft のWebサイトで読んだことがあります。その時の、いわゆる、Office モニターとMicrosoft の開発部の攻防を読み取ることができます。Office モニターというのは、おそらく、かなりの猛者というか、プロで、どうも、一般ユーザーにそのままプログラミングを解放するのは、面白くないような雰囲気なのです。モニターというのは、多くは、いわゆる、MVPと言われる人たちだと思います。

今...続きを読む

Qクラスモジュールを使わないとできないこと

エクセル、アクセスでvbaを利用しています。
現在はすべて標準モジュールに記載しているのですが
「クラスモジュールを使わないとできないこと」もあるのでしょうか?
クラスモジュールの使い方、必要性がいまいちわかりません。
まだ初心者な為複雑なコードは作っていません。
よろしくお願いします。

Aベストアンサー

こんにちは。

私は以前勉強がてらクラスモジュールを使ってドラクエのような
ゲーム(戦闘シーンのみ)を作りました。
これで他の方の回答にもあったインスタンスというのが
分かった気がしました。

クラスモジュールを使う私なりの解釈では
Excelに存在しない何かをExcelで使いたいときにクラスモジュールを
使います。
たとえば、Excelのオブジェクトに「車」というオブジェクトは
存在しません。
ExcelのプログラムでExcel上に車を存在させるには
車オブジェクトが必要になるので
それをクラスモジュールで定義します。
ここで車種や色、大きさといったプロパティを定義します。
そして進む、止まる、バックするといったメソッドを定義します。

これでオブジェクトができるので後は標準モジュールなどから
このオブジェクトを使います。
その時、オブジェクトをそのまま使うのではなく
オブジェクトのコピーのようなもの(インスタンス)を使います。
、、、と話は長くなるのですが、私はこんな形で解釈しています。

Qvbaがプログラマとして人気のない理由

よく、vbaでプログラムを組めてもプログラマーにはなれない、や
vbaは一流のプログラミング言語ではない、
と言われますが
それはvbaの需要がないからですか?
それとも他の言語に比べると簡単だからですか?

Aベストアンサー

こんばんは。

>vbaは一流のプログラミング言語ではない、と言われますが
私自身は、聞いたことはありません。昔のMicrosoft のパンフで、VBは、お遊びだなんていう書き方を読んだことがありますから、それと同じか、それ以下というべきなのでしょうか?

最初にいえるのは、Office というシステムに依存して、VBAに割り当てられたメモリは極端に少ないのです。ひとつのプロシージャで数千行ということは出来ません。

でも、VBAは、非常に需要は高いです。VBAをなくしますと言ったら、世界中のOffice ユーザーから非難轟々とでます。事実、それがあったので、VBAをなくすプランは、頓挫してしまいました。

現行のVBAでは、本格的なオブジェクト指向でプログラミングが出来ないだけで、全うなプログラム言語であるのは間違いありません。しかし、Office のアプリケーションに依存していますので、そのオブジェクトに依存してしまいます。WordとExcelの違い、Outlook とそれら二つとは、ほとんど共通性がありません。

Office VBAにもプロの世界がありますが、ほとんど知られていない世界です。Office VBAを専門に扱う人は、VB/C# などを使いこなせるはずです。また、ASP, WScript なども使いこなします。ふつうは、Office VBAの専門にしている人は、ひとつの会社で、構築した知識はあっても、普通は、独立したプログラマとしては、特殊すぎて存在しえないものだと思うのです。

Mougで掲示板に書いている、ある方のように、Office VBAの開発で、一件、数百万円も稼ぐそうですが、なかなか、そのような仕事をキープし続けるのは無理だと思います。むろん、Office VBAの開発と言ってはいても、Visual Basic for Application というだけのものではなく、様々な周辺知識がないと維持できないわけです。

Office VBAやその周辺を扱う技術というのは、入門レベルの底辺の人がものすごく広いということです。ところが、その入門レベルから、次のステップが限りなくレベルが高いし、次のステップに進むための橋渡しになるものがありません。それに、上級レベルまで覚えても、こんどは活かせる場所がほとんどありません。特に、Excelは、記録マクロ程度でも、VBAを使いこなせると宣言する人もいますから、全体的なレベルを押し下げていることには違いはありません。Access とは、ずいぶん印象が違います。Office VBAでも、ものすごく高度なことは出来ますが、そうしたものが、独立して存在しているわけではないのです。

最後に、あくまでも、アプリケーションを操作するのが、VBAの主たる目的なので、そうすると、プログラム言語としての使用範囲が限られます。ただ、学ぶ言語としては、結果が早く分かるし、かなり明確な目的を持って使えますから、実用度は高いと言えます。ただ、いつまでも、アプリケーションの枠組みからは越えることが出来ないわけです。

こんばんは。

>vbaは一流のプログラミング言語ではない、と言われますが
私自身は、聞いたことはありません。昔のMicrosoft のパンフで、VBは、お遊びだなんていう書き方を読んだことがありますから、それと同じか、それ以下というべきなのでしょうか?

最初にいえるのは、Office というシステムに依存して、VBAに割り当てられたメモリは極端に少ないのです。ひとつのプロシージャで数千行ということは出来ません。

でも、VBAは、非常に需要は高いです。VBAをなくしますと言ったら、世界中のOffice ...続きを読む

Qフラグについて

loop文等で、よくフラグを立てろといわれるんですが、意味もわからないし、
何の為に、どのように使うんでしょうか?教えて下さい。

Aベストアンサー

まず、「フラグを立てろと」ということですが、
意味は、条件に対する結果だとおもってください。
すると「何の為に」が条件

Loop構文だと
ループ(繰り返し)を終わる条件を  満たよ/満たしていないよ(フラグ)
ということになります。

※注 Do Loop の場合は繰り返す条件または、繰り返しを終わる条件を指定できます。 

例題で考えます。

「例題1」
最初に入力した文字と同じ文字を入力するまで、何度でも再入力を要求するプログラムを作る。


「考え方」
最初に入力した文字と同じ場合にループを終わる。

ループ(繰り返し)を終わる条件 = 最初に入力した文字と同じ場合
満たよ/満たしていないよ(フラグ)= 最初に入力した文字と同じ場合

になる。

解答Aと解答Bを用意しました。解答Bの方が質問の解答に、あってますが
例題の解答としては、Aの方がシンプルです。解答Bの場合に、なる場合は
大抵終わる条件が複数ある場合です。


「解答A」

Private Sub Form_Load()

Dim sStr As String
Dim sLoopStr As String
Dim lCnt As String

sStr = InputBox("文字をいれてください。")


Do Until sStr = sLoopStr

sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目")

Loop

  End

End Sub


「解答B」

Private Sub Form_Load()

Dim sStr As String '最初
Dim sLoopStr As String '2回目以降
Dim lCnt As String '回数

Dim bFlg As Boolean 'フラグ

sStr = InputBox("文字をいれてください。")

bFlg = False
lCnt = 1

Do Until bFlg = True

sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目")

If sStr = sLoopStr Then
bFlg = True 'フラグを立てる
End If

    lCnt = lCnt + 1

Loop

End

End Sub

そこで、条件を複数にします。

「例題2」

例題1に回数制限をつけます。5回間違えたら入力した文字にかかわらず終了します。

解答は、以下のようにします。

Private Sub Form_Load()

Dim sStr As String '最初
Dim sLoopStr As String '2回目以降
Dim lCnt As String '回数

Dim bFlg As Boolean 'フラグ

sStr = InputBox("文字をいれてください。")

bFlg = False
lCnt = 1

Do Until bFlg = True

sLoopStr = InputBox(sStr & "と同じ文字を入力したらループを抜けます。" & lCnt & "回目")

If sStr = sLoopStr Then
bFlg = True 'フラグを立てる
End If

If lCnt = 5 then
bFlg = True 'フラグを立てる
End If

    lCnt = lCnt + 1

Loop

End

End Sub

まず、「フラグを立てろと」ということですが、
意味は、条件に対する結果だとおもってください。
すると「何の為に」が条件

Loop構文だと
ループ(繰り返し)を終わる条件を  満たよ/満たしていないよ(フラグ)
ということになります。

※注 Do Loop の場合は繰り返す条件または、繰り返しを終わる条件を指定できます。 

例題で考えます。

「例題1」
最初に入力した文字と同じ文字を入力するまで、何度でも再入力を要求するプログラムを作る。


「考え方」
最初に入力した文字と同じ場...続きを読む


人気Q&Aランキング