1 名前:デフォルトの名無しさん mailto:sage [2008/12/04(木) 15:42:51 ] ExcelのVBAに関する質問スレです 前スレ pc11.2ch.net/test/read.cgi/tech/1219673793/ ★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)
331 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 02:11:14 ] 明らかに分かってないのに、構造構造言いたがるのなんて、 情報系の一年生くらいだろ。
332 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 02:21:16 ] >>330-331 ゴメンね(´・ω・`) ついイライラしてたから
333 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 02:30:42 ] 厨とか言っちゃうやつは例外なくアホ
334 名前:デフォルトの名無しさん [2009/01/01(木) 13:53:37 ] 結局、Excel2008ではVBAが使えなくなるのですか? C#への布石ですか?
335 名前:デフォルトの名無しさん mailto:sage [2009/01/01(木) 17:12:57 ] Excel 2008でVBAが使えないのは事実らしいが、 Excel 2008はMac版。移行先は、C#ではなくAppleScript。 しかも、次のバージョンで復活することが発表済み。 www.microsoft.com/japan/presspass/detail.aspx?newsid=3439
336 名前:デフォルトの名無しさん mailto:age [2009/01/02(金) 08:30:00 ] このスレは、Excel の VBE で作るフォームについての質問はスレ違い? スレ違いでしたら誘導をお願いします。
337 名前:263 mailto:sage [2009/01/02(金) 09:22:34 ] >>336 もしかしてデザインの話か そんな誘導先ないだろ
338 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 09:23:06 ] 名前消し忘れた恥ずかしい
339 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 13:45:39 ] どうせなら、VSTA2.0の情報とかを書けばいいのに >>334-335
340 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 14:03:27 ] あれ本当にOfficeに乗っけるの?
341 名前:デフォルトの名無しさん [2009/01/02(金) 14:17:09 ] >>335 よく事情がわからんが、今必死で覚えてるEXCEL VBAが数年先に使えない、役に立たない言語になる可能性もあるってことですか?
342 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 15:03:36 ] そう言われ続けて何年も経つが、未だに無くなる気配すらないのがVBA。 この先もそれが続くと信じて安穏としているのは間違っているだろうが、 数年でなくなるような存在でもない。
343 名前:デフォルトの名無しさん [2009/01/02(金) 16:48:02 ] Excel VBAによるWin32 APIプログラミング入門 この本って絶版でもう購入不可ですか?
344 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 16:58:06 ] 絶版です
345 名前:336 mailto:sage [2009/01/02(金) 18:06:59 ] >>337 そうですか…了解です。 スレ違いを承知で 1 つだけ質問。 Excel のデザインで使うフォームのコントロールの仕様って VB6 と 同じなんですかね? (コンボボックスでダブルクリックのイベントが起きないので調べたら、 VB6 ではスタイルに 1 を設定しないと起きない、とあったので…。 ちなみに Excel VBA ではスタイルに 0 or 2 しか設定不可。 ダブルクリックのイベント絶対起きないじゃん…。)
346 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 00:31:02 ] ダブルクリックのイベントが発生しない が意味不明 で、絶版かどうかも、役に立つかも、全く見当が付かないが、折れの持っている 「Excel VBA はじめてのプログラミングレッスン1」 技術評論社 H12.8.21初版 に第10章 入力画面を使ってみよう を読んでみたwww ユーザーホームのデザインという用語が使われているが、この本では ダブルクリックをする場面は、VBE上コンボボックスのことで、 excelシート上のコンボボックスではないよ。シート上ではダブルクリックは 使わないものと思っている。
347 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 00:58:20 ] >>346 セルのダブルクリックでセルの値等をコピーする、といったマクロも組むから 別にユーザフォーム専用って訳でもないと思うが
348 名前:336 mailto:sage [2009/01/03(土) 02:30:30 ] >>346 コンボボックスを使いたい場所はユーザーフォーム上で、 ワークシート上ではありません。 というかワークシート上にもコントロールを置けたんですね。 で、試してみると…コンボボックスのプルダウンメニュー表示中のダブルクリックで ダブルクリックのイベントが発生しました。なんで? 目的はユーザーフォーム上にあるコンボボックスでダブルクリックのイベントを 取得することですが、無理そうなので、擬似的にダブルクリックを検知することにしました。 方法は下記です。 (1) マウスダウンのイベントが発生した時の時刻を Timer 関数で取得して モジュール変数に退避する。 (2) マウスダウンのイベント発生都度、退避した時刻と押した時刻を比較する。 (3) (2)の時刻差が 0.5 秒以下の場合にダブルクリックのイベントでしたかった 処理を実行する。 コンボボックスでダブルクリックのイベントを拾った後の使い道は、 (1) True ⇔ False の切り替え(VBE のプロパティ設定画面では出来る!) (2) コンボボックスより詳細なリストが表示できるフォームの呼び出し を考えていました。 上記を応用すれば、トリプルクリックや4回クリックなどにも対応できそうです。 解答してくださった方、ありがとうございました。
349 名前:デフォルトの名無しさん [2009/01/03(土) 03:55:36 ] トリプルクリックにまで対応できるのは素晴らしいけど コンボボックスをシングルクリックで 透明なアイテムが一番上に(コンボ上に)きて、その そのアイテムをシングルクリックってすると じゃ駄目なのかな
350 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 04:52:18 ] www.amazon.co.jp/VBA ユーザーのためのWin32-APIプログラミングガイド-大村-あつし/dp/4871936848/ref=sr_1_1?ie=UTF8&s=books&qid=1230925887&sr=1-1
351 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 04:53:58 ] オレのExcel、コンボボックスにダブルクリックイベント有るけど みんなのには付いてないの? バージョン Excel2003
352 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 06:03:46 ] たぶん コンボボックスのプルダウンメニューの部分のダブルクリックを言っているんだと思う
353 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 13:26:28 ] オリジナリティ溢れるUIほど迷惑なものはない
354 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 16:11:29 ] >トリプルクリックや4回クリックなどにも 何考えてんだ?
355 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 16:20:56 ] V2C には6回クリックまであるぜ
356 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 17:11:00 ] API使えば、ダブルクリックの認識の間隔を取得できるから、 0.5秒決め打ちよりそれを使ったほうがいいと思う。 そういう話をしている場合でないとは思いつつ。
357 名前:デフォルトの名無しさん [2009/01/03(土) 19:44:02 ] 質問です。 セル上で、右クリックをすると、編集ダイアログ?が出てくるのを出ないようにしたいのですが どう設定のマクロを書いたものか、よろしく。 右クリックイベントによってコピーモードにしているのに、余分な作業を するのを防止したいので。
358 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 21:18:27 ] マウスの右ボタンを殺す
359 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 02:39:56 ] BeforeRightClickイベントの第二引数にCancelがあるだろ
360 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:15:18 ] サーバサイドでの帳票の生成にVBAを検討していて、 安定性、処理性能、MSのライセンス違反等を懸念してますが、 何か懸念事項やアドバイス等ありますでしょうか?
361 名前:デフォルトの名無しさん [2009/01/04(日) 14:49:46 ] 論理で「Aでないか、Bでないか、Cでない」ならの類なのですが、 列5 列6 列9なら、イベント処理し、「そうでないなら」、exitする の 「そうでないなら」はどう書いたものでしょうか?
362 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:11:17 ] >>361 色々あるだろうけど 普通は if elseif elseif else
363 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:18:49 ] >>357 ワークブックのSheetBeforeRightClickイベントでcancel=trueにしないとだめだよ
364 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:21:38 ] >>361 >>362 だとイベント処理のコードが重複するから If 列5 Or 列6 Or 列9 Then イベント処理 Else Exit EndIf
365 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:41:35 ] まあOr使っちゃうのが一般的かつ簡単ではあるが 条件1つずつでネストした方が速い 何故なら、例えば列5に一致するならイベント処理は行うので 列6、列9に一致するか否かは判定する必要が無いのに >>364 では毎回全てを判定した上で論理演算してしまう 複数条件でAnd、Orを使わないのは、コード最適化の常套手段 逆に速度気にせず手を抜きたいなら、カンマ区切りで 複数条件指定できるSelect Case使う方がお手軽だろ Case 列5, 列6, 列9 イベント処理 Case Else Exit 因みに論理演算(>>364 )の処理時間を100とするなら、Ifのネストは70、Select Caseは105くらいだ とは言え最近のPCなら、ループで何十、何百、何千万回とやってコンマ何秒かの差が出る程度だけどな
366 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:56:00 ] あれ? VBって or で連結させた場合、順次判定して、hitしたら後の判定スキップじゃなかったっけ。 勘違いだったらごめん。
367 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 00:00:55 ] ショートサーキットはしないよ まあ,とりあえず素直に書いといて最適化は実際に支障が出てから,が基本だけど
368 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 12:09:49 ] >>365 Select Caseが105って一概には言えないだろ? >Case 列5, 列6, 列9 これショートサーキットだから列5がTrueなら列6と列9は評価しないし。 >>366 ショートサーキットするのはVB.NetのOrElseとかAndAlso 今はVB.Netって言わないんdっけ?
369 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 13:14:41 ] >>368 Select Caseが105ってのは、実際にカウンタ変数のMod 10に対する 条件分岐のみのループの処理時間を計った結果 それぞれ500万回*3回の平均から算出した値 そもそもが単一条件の場合でも、Select CaseはIfより遅いからね
370 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:13:14 ] セル、グラフ、フォーム等の情報を利用してフォーム形成することはできますか? 例えば 名前 値 ラジオボタン という行が連なるフォームを作る場合、 グラフの凡例数、セルの列数、フォームで入力した数分等、行が作成される感じにしたいのですが。 (フォームの大きさに入りきらない場合はスクロールバーを出す)
371 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:19:16 ] ユーザーフォーム上のコントロールを動的に生成したいってことなら出来るよ
372 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 14:22:53 ] >>371 調べ方が足りませんでした。すみません。 VBA 可変 フォームとかぐぐってました。 コントロール 動的 VBAでぐぐったらできそうな感じです。 ありがとうございました。
373 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 18:24:45 ] >>369 IfやELseIfのネストより遅いのは確かだが、Orより遅いわけねーって。 実測してみろよ。 Private Declare Function timeGetTime Lib "winmm.dll" () As Long Sub foo1() Dim i&, t1&, t2& t1 = timeGetTime For i = 1 To 5000000 Select Case i Mod 10 Case 5, 6, 9 Case Else End Select Next t2 = timeGetTime MsgBox t2 - t1 End Sub Sub foo2() Dim i&, j&, t1&, t2& t1 = timeGetTime For i = 1 To 5000000 j = i Mod 10 If j = 5 Or j = 6 Or j = 9 Then Else End If Next t2 = timeGetTime MsgBox t2 - t1 End Sub foo1がショートサーキットだって知らなかったんじゃないの? なんなら実証してみせるが、やり方くらい知ってるよな。
374 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 19:51:47 ] >>373 ・timeGetTimeではなく組込のTimerを使ったこと ・Select Caseでも平等にするためにi Mod 10の結果を変数に取っていること ・結果をMsgBoxではなくDebug.Printで出力したこと 以外は同じコードだよ ちなみに実証方法は知ってる Select Caseがカンマ区切りがショートサーキットなのは知ってるからわざわざ Select Caseでやったことは無いが、デバッグの一手法でもあるからな
375 名前:373 mailto:sage [2009/01/05(月) 21:26:44 ] >>374 i Mod 10の値を処理で使わないんなら>>373 が平等なコード。 仮にfoo1でi Mod 10を変数にとってもfoo1が速いぞ? おめーんとこじゃ遅いのか?
376 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:35:16 ] > i Mod 10の値を処理で使わないんなら>>373 が平等なコード。 そうでもない > おめーんとこじゃ遅いのか? うん
377 名前:373 mailto:sage [2009/01/05(月) 21:40:10 ] OrもSelect Caseもお互いに速さでベストをつくせばそうなるじゃん。 おまえは最速のコード書けないんだろ?
378 名前:373 mailto:sage [2009/01/05(月) 21:41:57 ] 後ろは読んでなかったが、おれのとこと逆になるらしいな。 俺のとこはSelect Caseが速い。
379 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:00:24 ] 実際の処理に置いて必ずModで算出した値を使うというわけではない以上 条件分岐のステートメントに入る前の時点で、条件となる値が変数に代入されているという 同じ状況を作ることが平等になる Modを使う場合に限定して、IfとSelect Caseのどちらを使った方が速いかを検証するなら、 君の言うとおりベストを尽くして最速コードを書くべきだけどね
380 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:12:28 ] なんか分かってないなぁ。 Modで算出した値を使わないなら>>373 になるんだよ。 まぁどこまで行っても平行線だからもういいが、他のやつらはどっちが速いんだろ? まぁ速さなんて俺はどっちでもいいけどな。 このような使い方なら普通の美意識を持ってたらSelect Caseだし。
381 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:19:50 ] >>380 foo1が速かった
382 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:24:07 ] >>381 トンクス j = i Mod 10 Select Case j としても? おれのとこはそれでもfoo1が速いが。
383 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:26:51 ] >>382 逆転した
384 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:31:23 ] >>383 ふーん、俺のとこと違うな。 まさかjを変数宣言してないとかじゃないよな?
385 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:33:56 ] >>384 してなかった したら差は縮まったけどまだ foo2が速い
386 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:35:45 ] >>385 おいおい、しっかりしてくれよ。 jをLong型で宣言したらそうなるか教えてくれ。
387 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:36:45 ] すまん、また後ろ読んでなかった。
388 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:41:46 ] >>386 &で宣言したよ 30位foo2が速い
389 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:42:49 ] まぁModで算出した値を使わないなら>>373 が平等な比較だが、とりあえず変数に代入したら 人によっては違うということは分かった。 ちなみに俺はWindows xp とExcel2007だ。
390 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:44:22 ] ちなみに Excel2002です
391 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:47:06 ] >>390 トンクス。
392 名前:361 [2009/01/05(月) 23:18:31 ] >論理で「Aでないか、Bでないか、Cでない」ならの類なのですが、 >列5 列6 列9なら、イベント処理し、「そうでないなら」、exitする の >「そうでないなら」はどう書いたものでしょうか? 訊き方が悪かったみたいですね。結局、次のこれで、希望する動きをしています。 If Not (Target.Column = 5) And Not (Target.Column = 6) And Not (Target.Column = 9) Then Exit Sub
393 名前:デフォルトの名無しさん [2009/01/06(火) 00:21:36 ] 文章だけだと伝わりづらいと思いますが、質問です。 ハイパーリンク │ 転記情報1 ハイパーリンク │ 転記情報2 EXCELシートの一覧表に上のようにハイパーリンクが張られた一列を作り、 それをWEBブラウザでプレビューできるようにしています。 WEBブラウザ上のリンクをクリックすると、 新しくEXCELシートを呼び出し、 クリックした行の情報(一番上のハイパーリンクをクリックしたなら転記情報1)を 呼び出したシートに転記する処理を作りたいと思っています。 EXCELシートならリンクをクリックすると同時にそのセルがアクティブになるので同行の情報も簡単に転記できそうですが、 WEBブラウザ上でもこれと同じような情報転記は可能でしょうか?
394 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 03:38:21 ] >>392 背中がムズムズする……
395 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 05:39:55 ] >>394 気持ちは解る 条件式にnotと=を併用するヤツってもうね…
396 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 07:33:05 ] <>
397 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:47:49 ] >>392 「Aでないか、Bでないか、Cでない」ではなく「Aでもなく、Bでもなく、Cでもない」だろ? 前者だと必ずTrueだからな。 それは置いといて、普通イベント処理ならIntersect使うから列番号では判定しないが、どうしても列番号で判定したいとか基本のお勉強なら Select Case Trget.Column Case 5, 6, 9 '処理1 Case Else Exit Sub End Select ’処理2 処理2がなければ、何もわざわざCase Elseで抜ける必要なし。 というか抜ける記述は普通はしない。
398 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:49:54 ] 何、今更?
399 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 09:59:59 ] >>392 書き忘れたがTarget.Columnを三度も取得しちゃいかん。 どうしてもAndとかOrを使うんなら、いったん変数に取得してから判定するんだな。
400 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:02:35 ] >>398 昨晩のアフォの>>365 か? 無視してすまんね。
401 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:29:05 ] 悔しかったの?
402 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:30:29 ] シートに商品名が20,000件程度入力されている状態で テキストボックスに商品名の一部を入力⇒キーワードが含まれるセルのデータを リストボックスに追加 という処理を考えていたのですが 下記の方法で試してみるとかなり時間がかかってしまいます 高速に処理をさせるには根本的な方法の見直しが必要でしょうか? dSelectForm.ListBox1.Clear LastRow = Sheet1.Range("C65536").End(xlUp).Row For i = 2 to LastRow Ans = 0 Ans = WorksheetFunction.Find(inputKey, Sheet1.Cells(i, 3)) If Ans <> 0 Then dSelectForm.ListBox1.AddItem Sheet1.Cells(i, 3) End If Next
403 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 10:59:47 ] 相変わらずの人がいるなw
404 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 11:20:39 ] >>402 ループのお勉強なら基本的には配列の勉強かな? データ範囲を2次元配列に取得して回すとか、AddItemは遅いから1次元配列にため込んでListプロパティで設定するとか。 WorksheetFunction.FindじゃなくInStr使うとか。 たしかExcel2000以降ならFilter関数が簡単。 WorksheetFunction.Transpose(範囲)で1次元配列を取得して、Filter関数にかけてからListプロパティで設定。
405 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 16:29:31 ] イベント処理だし元の質問からも判断してわざわざExitで抜けるようなコードは必要ないと思う。 条件に「合う」場合だけ判定して処理するように書くのが普通だね。 定番はIfだけど質問者のレベルから考えてコンマ何秒の速度差を考える必要はないと思うし 見た目のわかりやすさと保守のしやすさからCaseをすすめとく。 条件が増えたときに簡単に数字が追加できるから。
406 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 01:50:36 ] 2008年1月2日を08.01.02と表記してるセルを計算に使う方法ってありますか? 08.01.02と表記されたセルから08.01.01と表記されたセルを引くと1という答えが算出される処理を作りたいです。
407 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 03:34:54 ] >>406 セルの表示形式で「yy.mm.dd」
408 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 05:57:34 ] >>405 俺は誰かみたいに「何、今更?」なんて言わんが、そのような条件が三つ以上でIfステートメントでOr判定するくらいなら Select Caseステートメントの方が速いし分かりやすいし定番だと思うよ。 あと知らなくていいことだが、Select CaseステートメントでCase Elseとか、If ThenステートメントでElseとかは 何もそこで処理しなくても書いた方が速くなるね。 まぁ俺は書かないけど。
409 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 06:18:38 ] >>406 数式でよけれべ普通に=A1-B1なんてやりゃできる。 もし表示形式が日付形式になるようなら、G/標準とか0にすりゃいい。 2007では計算元の表示形式が日付でも普通に1になるが、たしか2003では数式セルは日付にならなかったっけ? 計算元の表示形式が文字列で、VBAでやりたいのなら MsgBox CDate(Cells(1,1).Value)-CDate(Cells(1,2).Value) MsgBox DateValue(Cells(1,1).Value)-DateValue(Cells(1,2).Value) などとやりゃできないか?
410 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 07:26:12 ] if not hoge is nothing then って構文が気持ち悪いんですけど、何か代替えはありませんか?
411 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 07:53:25 ] そんなこといったらVBAなんて気持ち悪い構文だらけですが何か?
412 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 08:23:23 ] 「代替え」なんて変な言葉を使う人に言われたくありません。 もしかして、「代替」を「だいがえ」って読んじゃう頭の弱い人やそれらに無意識に迎合しちゃう人ですか?
413 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 08:34:53 ] >>410 If ObjPtr(hoge) <> 0 thenでよくね? 俺はこんなことしないけどね。
414 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:38:45 ] それならもっとシンプルにできる If ObjPtr(hoge) Then こういう書き方を知らないと意味がわからなくなるけど
415 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:12:25 ] >>412 ttp://dictionary.goo.ne.jp/search.php?kind=jn&MT=%C2%E5%C2%D8%A4%A8
416 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:25:38 ] not 〜 nothingは俺も気持ち悪いと思う 直訳すると「ないアルよ」みたいな回りくどい二重否定の表現って 英語だと普通に出てくるから設計者は何の疑問も持たなかったんだろうなあ 俺もまだVBAを勉強中だから知らないだけかもしれないけど、 インスタンス化されてることを、いちいち論理を反転しなくても直接判定できるような 構文か関数ってないの?自分で作るしかない?
417 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 16:19:22 ] 別にこの仕様でおかしくもないと思うけどねぇ そもそもがNothingのときに何かをするってことの方が多いんだからさ 有ることと無いこと、両方とも否定文を使わずに判定出来るのが一番かもしれないが どちらかのみと言うなら、無いことを判定する方法を用意すべきだろ
418 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:08:30 ] if hoge is not nothingと書けるのが一番良い
419 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 17:21:50 ] 余計変だw
420 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:39:23 ] >>415 変な言葉が定着しつつあることはその引用で判るが、それで何が言いたいの? # 頭使うことを知らない人は、自分で考えることを放棄するから困る。
421 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 18:42:58 ] いっそのこと If hoge = Nothing If hoge <> Nothing でいいじゃん。 なんだよ突然Isって。わざわざ演算子を使い分ける妙なこだわりが理解できん。桂正和マニアかよ。
422 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:10:25 ] 代替〜(ダイタイ〜) の同音異義語が有る場合などに 代替え〜(ダイガエ〜) と重箱読み使うのは昔からあること 変な言葉でもなければ、最近になって定着しつつあるのではなく以前からあったもの 件の場合は重箱読み使うのが適切と言える状況ではないが、誤用や間違いではない "代替"の意味で"代変え"を使っているなら完全な誤用だけどね そもそも、言葉というのは変化していくもの 最近になって定着しつつあるのだとしても、それを頭ごなしに否定するのは愚かしい 頭使うことを知らない人は、誤用と変化の違いを見極めることなく 自分の中の古い知識だけで物事を断定しがちだが、もっと柔軟な頭と広い視野を持たないと困るよ
423 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:32:33 ] AndAlsoやOrElseってVBAには無いんだったっけ?
424 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:50:59 ] >>412 いや、”だいがえ”が正しいんじゃないかな。 もしかして”だいがい”って呼んでるの?
425 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:54:09 ] CやJavaが長年培ってきた洗練された構文をかなぐり捨ててVBはいったいなにがしたかったのだろう。 なぜ}のかわりにEndと入力しないといけないのか理解に苦しむ。 見やすくない上に3文字も打たないといけない。ばっかじゃないか?
426 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:55:49 ] 馬鹿発見。「だいたい」と読むのだよ。つーか、>422に書いてあるだろ。
427 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:56:12 ] いやいや、オリジナルのBASICはCより古いぞ。 その古臭い構文をVBも引きずっているというだけ。 だからこそBasicを名乗っているわけだが。
428 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 19:56:28 ] >>425 CやJavaとbasicはどっちが古いと思っているのかね。
429 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:00:04 ] オリジナルのベーシックと今のVBはかなり違うじゃん。 古いベーシックから新しいVBになるにあたって CやJavaで解決されている構文を見習えばよかったのだ。
430 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:00:56 ] C#でも使ってろ。
431 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 20:05:32 ] >>430 エクセルのマクロでC#って使えるの?