- 1 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 04:56:43 ]
- ExcelのVBAに関する質問スレです
前スレ pc11.2ch.net/test/read.cgi/tech/1228372971/ ★1 質問テンプレ(雛形)は用意しませんが、OSとExcelのバージョンは必ず書きましょう。 ★2 ExcelのVBA以外の部分に関する質問はNGです。 但し、VBA無しでも出来ることだが、あえてVBAでやりたいって物に関してはOK。 ★3 ExcelのVBE(Visual Basic Editor)を使うとしても、VBAの分野以外に関してはスレ違いです。 VBAとは、『Visual Basic for Application』の略で Application ├Workbooks |└Workbook | ├Worksheets | |└Worksheet というApplication以下のオブジェクトを、VB言語で操作するものを指します。 例えExcel付属のVBE(Visual Basic Editor)を利用しようとも、このApplication以下のブックやシート、 セルやオブジェクト等を操作するもの以外はVBA分野の話ではないので、ここでは聞かないでください。 ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。 ★6 わからなければとりあえず「マクロの記録」(Alt, T, M, R)
- 607 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 11:41:21 ]
- >>605
デフォルトプロパティを省略するなって議論が上の方にあったな だが実際問題、Cells.Item(2,1)なんて書かないなぁ デフォルトプロパティがインデクサとして作用するなら普通みんな書かないんじゃない まあ、そのせいで、Cells(2,1)はプロパティ取得じゃなくて、 Cellsというメソッドを2と1という引数で呼び出してると勘違いしてる時期があった VBAの入門書とか、そのへんちゃんと解説してるようなのはほとんどないと思う ちゃんとしたコード読まないと、ちゃんとしたコードかけるようにならないってことだな ただ、Range.RangeとかCells.Cellsとかは感覚的におかしいと思うんだが Range.Cellsは感覚的におかしいと思わないんだよなぁ
- 608 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 13:12:17 ]
- >>607
Excel95の頃はCellsはメソッドじゃなかった? 中身は実質変わってないのかな?
- 609 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:27:47 ]
- ソース見てRangeがオブジェクトかプロパティかわからない俺参上
Range("A1") = "abc" たとえばこれはオブジェクトでデフォルトプロパティのValueが省略、でいいの?
- 610 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:52:48 ]
- Rangeはオブジェクトを返すプロパティだよ
- 611 名前:デフォルトの名無しさん [2009/04/07(火) 17:35:05 ]
- EXCEL2003です
セルの書式設定の[表示形式]定義が[文字列]かどうか 判断する方法を教えて下さい。 やりたい事は「日付を表すデータ」([表示形式]が[日付]とは限らない)が 元々どのように入力されているか判断したいのです。 具体的には、 文字列で「3/1」、「2009/3」「2009/3/1」と入力されて いるのか、日付データで「2009/3」等と入力されているのかの 判断方法は、どうすれば良いかということです。 よろしくお願い致します。
- 612 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 17:40:30 ]
- >>611
NumberFormatLocal
- 613 名前:デフォルトの名無しさん [2009/04/07(火) 22:14:32 ]
- 文字列で"0.1"とか"1"をDoubleに変換したいです。
且つ、"abc"のようなものなら失敗して欲しいです。 CDbl()でよいと思うのですが、"abc"などを渡した場合どのように失敗を通知してくれるのでしょうか? 例外などですか?このときの例外の補足の仕方を教えていただけますか? 宜しくおねがいします
- 614 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:24:36 ]
- On Error GoTo xxxx
でエラートラップ Err.Numberでエラーの種類しらべてしかるべき処理 はっきりいってVBAのエラー処理はおまけみたいなもんだ 変換してエラーでる可能性があるとわかってるなら、 変換する前に変換元が数字かどうかぐらい自分でチェックするほうがいいと思うぞ
- 615 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:34:04 ]
- >>614
それは他の言語とどこが違うの?
- 616 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 23:41:15 ]
- >>614
ありがとうございます。m(_ _)m アドバイス助かります。自分でエラーチェックすべきか、 オブジェクトの例外スローに期待すべきかも悩んでました。 とりあえず試してみます。 例外が送出され、それを捕らえて上手くメッセージが出せたらそれに越したことはないものですから。。
- 617 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 03:42:55 ]
- >>615
エラー処理ルーチンにうつった場合の、それ以降の処理が非常にややこしくなるんだ まあ、詳しくは構造化エラー処理あたりでぐぐってみてくれ で、613はJava系のプログラマか? VBAで例外スロー、キャッチとか考えんほうがいいぞw
- 618 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 03:50:08 ]
- つーか、IsNumericじゃダメなの?
- 619 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 06:07:31 ]
- IsNumericかregexを使う
- 620 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 10:11:12 ]
- vbのエラー処理ってこんなかんじだったかな
1: on error resume next (処理) if err.number = xxx then 〜 end if on error goto 0 2: on error goto eh (処理) exit sub/function eh: (errで分岐したり処理したりする。resume next で戻ることも出来るが、大体はそのままプロシージャを抜ける。)
- 621 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 10:15:33 ]
- 負の日付を判断する関数ってあります?
もしくは負の日付か判断する方法があったら教えてください isDate(負の日付)や変数 = 負の日付とかするだけでエラーに飛んでしまって・・・
- 622 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:07:38 ]
- まず、負の日付の定義についておしえてくれ
- 623 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 13:45:02 ]
- 1899/12/29以前ってことか?
俺のとこじゃDate型の変数にCdate("1872/8/13")を入れてMsgBox IsDate(変数)とすりゃTrueだけどな。 直にMsgBox IsDate(-10000)だとFalseだが。 エラーにはならんな。
- 624 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:07:01 ]
- >>622-623
説明不足でもうしわけないです 表示形式が「日付」のセルに、例えば9999999999って値を打つと ####と表示され、マウスカーソルをあてると「負の日付または時間は####と表示されます。」 と出てきまして、そこの値をvbaの方で参照しようとして落ちているという状況です (日付型のとこには0〜2958465以外の数値だと日付シリアル対象外でこうなるようで・・・) 関数があれば〜と言いましたが、代入するにしろ引数にするにしろ、 参照した時点で落ちてるので関数があっても意味がないと思い、 結局エラーに行かせた先で判断するようにしました どうもありがとうございました
- 625 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:19:05 ]
- >>624
Value2プロパティが2958465以下かで判断する方法もあるかもね。 ValueプロパティだとオーバーフローのエラーだがValue2だとオーバーフローしないから。
- 626 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 14:59:38 ]
- >>625
知らないプロパティだったんで早速調べてみたんですがこれで行けそうです! >>625氏の言うとおりの方法で範囲外なら無効な日付とメッセージを出すようにしてみました 出来ればエラーに飛ばしたくないと考えていたので助かりました どうもありがとうございます!
- 627 名前:611 [2009/04/08(水) 17:37:10 ]
- >612
レスありがとうございます
- 628 名前:デフォルトの名無しさん [2009/04/09(木) 00:08:50 ]
- EXCELファイルがどのバージョン(EXCEL97、2000、2003)で
作成されたものか調べる方法を教えてくれ神ども。
- 629 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 05:48:16 ]
- 拡張子は?
|

|