1 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 12:25:04 ] 過去スレ 01 pc11.2ch.net/test/read.cgi/tech/1054356121/ 02 pc11.2ch.net/test/read.cgi/tech/1168308855/ 03 pc11.2ch.net/test/read.cgi/tech/1180192018/ 04 pc11.2ch.net/test/read.cgi/tech/1189814602/ 05 pc11.2ch.net/test/read.cgi/tech/1197448064/ 06 pc11.2ch.net/test/read.cgi/tech/1205231499/ 07 pc11.2ch.net/test/read.cgi/tech/1212587819/ 08 pc11.2ch.net/test/read.cgi/tech/1219673793/ 09 pc11.2ch.net/test/read.cgi/tech/1228372971/ 10 pc12.2ch.net/test/read.cgi/tech/1235332603/ 11 pc12.2ch.net/test/read.cgi/tech/1241885130/ 12 pc12.2ch.net/test/read.cgi/tech/1247566074/
51 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 16:41:50 ] >>48 >if a=1 or 2 or 3 then >でエラー吐き出して、最初のころ原因が分からなくて相当悩んだ記憶が。 本当にエラー吐いたの?、その条件だとa=1が真でも偽でも2と3が真だから 必ず真になってエラーにはならないと思うけど・・・
52 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 17:46:54 ] 文法くらい作法に従って書けよ それで動くと思ってるのは他の言語も経験したことないんだろ? クラス継承ができないとか、ポインタ使えないとか範囲コメントできないとかならともかく・・・
53 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:57:28 ] いや、コード書いてシステム動かすのが前提なんだから、ある程度速度を求めるのは当然だろう 速度厨とか何を言ってるんだ
54 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 19:59:36 ] VB.NETにはショートサーキットする演算子が追加されてるから、そのうちVBAにも追加されるかもしれん 個人的にはショートサーキットの有無で結果の変わるようなコーディングは避けるべきだと思う >>51 俺は>48ではないが 昔のVBAだと確かエラーになってた気がするんだが 今エクセルの2007で試したらエラーにならないな まあ、>48が思ってる通りには評価されてないんだが
55 名前:デフォルトの名無しさん [2009/10/03(土) 21:09:02 ] よろしくお願いします。この場合XLSM形式で保存する場合はどこに&”.xlsm”を書き足したらいいのですか? If tmpSheet.Range("B" & r).Value <> tmpSheet.Range("B" & r + 1).Value Then '次のB列の値が違っていたら book.SaveAs dataFolder & "\" & tmpSheet.Range("B" & r).Value '集計ブックを作業シートのB列の値(シート名)で保存 book.Close False '集計ブックを閉じる isOpen = False '集計ブックが開いているかフラグを閉じているにする End If
56 名前:デフォルトの名無しさん mailto:sage [2009/10/03(土) 21:47:02 ] マクロの記録、がためになるよ
57 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 06:15:54 ] Office 2010から、VBA.netにならないんですか?
58 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 06:27:10 ] >>55 If tmpSheet.Range("B" & r).Value <> tmpSheet.Range("B" & r + 1).Value Then '次のB列の値が違っていたら book.SaveAs dataFolder & "\" & tmpSheet.Range("B" & r).Value & ".xlsm", '集計ブックを作業シートのB列の値(シート名)で保存 book.Close False '集計ブックを閉じる isOpen = False '集計ブックが開いているかフラグを閉じているにする End If
59 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 09:29:33 ] XP&2003です。 フォーム上のテキストボックスの数を数えるには、 どのようにすればよいでしょうか。 Controlsの引数は"名前"と"番号"なので種類が指定できないし、 GettypeはVBAでは使えないようで悩んでいます。
60 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 11:31:23 ] >>59 TypeName 使ってみてはどうですか
61 名前:59 mailto:sage [2009/10/04(日) 13:45:27 ] >>60 できましたぁぁぁぁぁぁ ありがとうございましたぁぁぁぁぁ!!!
62 名前:デフォルトの名無しさん [2009/10/04(日) 21:10:56 ] こんばんは。 VBAを始めたばかりで、全然わからないので、 ここで質問させてください!! A列に"リンゴ"と書かれたセルがあれば、 そのセルと隣のセルを切り取って、貼り付け用のセルに貼り付ける。 なければ、何もしないという構文を書きたいんです。 IF is nothingを使うのかなぁと思ったのですが、 どこに入れればいいのかわからなかったので。。。 ちなみに、貼り付け用のセルに貼り付けた後、 空白になったそのセルを切り取るっていう構文も入れて、 その時に、IFを使っています。 以下に構文を記載しますので、どうしたらいいか教えてください! よろしくお願いいたします!!!!! Dim myLastLow as Long Dim i as Long Columns(1).Find("りんご").Resize(, 2).Cut Sheets("Sheets1").Columns(1).Find("貼り付け用") myLastLow = Range("A30").End(xlUp).Row For i = myLastLow To 1 Step -1 If Cells(i, 1).Value = "" Then Range("A" & i & ":B" & i).Delete shift:=xlShiftUp End If Next i
63 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:26:33 ] forで上から順番に判定させるのが分かりやすいと思うよ。 for i = 1 to cells(65536,1).end(xlup).row if cells(i,1).value = "りんご" then 'コピペ処理 end if next
64 名前:デフォルトの名無しさん [2009/10/04(日) 22:31:45 ] >63さん ありがとうございます!! 早速やってみたんですが、 「プロシージャの呼び出し、または引数が不正です」とエラーが 出てしまいました。。。 なぜでしょう。。。 Columns(1).Find("りんご")… というところでエラーが出てるっぽいです。
65 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:52:55 ] >>62 Columns(1).Find("りんご").Resize(, 2).Cut Sheets("Sheets1").Columns(1).Find("貼り付け用") この構文だとA列に"りんご"と記入されたセルが存在しないと実行時エラーになるよ あとシートは指定した方がいいとおもうよ Set A = Sheets("Sheet2").Columns(1).Find("りんご") If Not A Is Nothing Then Set A = A.Resize(, 2) A.Cut Sheets("Sheets1").Columns(1).Find("貼り付け用") End If 上記例でも"Sheets1"のA列に"貼り付け用"と記入されたセルが存在しないと実行時エラー になると思うけど例を参考にがんばってみてください。 あと >>64 で出てるえらーって "Sheets1"のA列に"貼り付け用"と記入されたセルが存在しないんじゃないの
66 名前:デフォルトの名無しさん [2009/10/04(日) 22:59:56 ] >>65 解決しました!!65さんの言っているとおりでした! すいません。私が書いてなかったのが悪かったんですが、 "貼り付け用"というセルは表の一番下にあるんです。 一度"りんご"のセルがあって、実行されちゃうと、 もう"貼り付け用"というセルがなくなってしまうことが原因でした! なので、Forを一番下から上にあがるような構文を書いたら エラーが出なくなりました! ありがとうございました!!
67 名前:デフォルトの名無しさん [2009/10/04(日) 23:15:00 ] 62です。 もう一つ教えてもらってもいいですか? もし"りんご"というセルがなかったら、 "貼り付け用"と書かれたセルとその隣のセルを削除したいのですが、 どのように書けばいいですか? elseを使うんだろうなぁと思って、 Else Columns(1).Find("貼り付け用").Resize(, 2).Delete shift:=xlShiftUp を入れてみたんですが、エラーになっちゃいました。。。 お時間があれば教えてください!よろしくお願いします。
68 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:19:19 ] あとは自力で頑張れよ・・・
69 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:11:51 ] そんなこといわずにもう一息っ!
70 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:19:37 ] 俺はfindの時にはsetを使ってるんだけど、説明するのも大変そうだなぁ・・・。 見つかりませんってエラーが出るんだから、on error goto で飛ばしたら?
71 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:56:27 ] >>67 > Columns(1).Find("貼り付け用").Resize(, 2).Delete shift:=xlShiftUp 上の1行だけ試しに実行させたら正常に動いたので、 If〜Else〜End Ifの構文が正しく書けていない気がします。下はサンプル。 Set A = Sheets("Sheet1").Columns(1).Find("りんご") Set B = Sheets("Sheet1").Columns(1).Find("貼り付け用") '-- 「B is Nothing」な場合の処理は割愛 If A Is Nothing Then B.Resize(, 2).Delete shift:=xlShiftUp Else Set A = A.Resize(, 2) A.Cut B End If
72 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:10:09 ] >>54 エクセル97で試したけどエラーにならないな VBなら言語仕様的にはエラーになどならないはずだがな、間違った演算してるわけじゃないしな a=1が真の場合は分り易く8ビットで表現すると11111111となる 次に11111111と00000010(十進数の2)をor演算すると11111111となる、 次に11111111と00000011(十進数の3)をor演算すると11111111となり、 すべて演算した結果は真となり、エラーにはならない a=1が偽の場合は分り易く8ビットで表現すると00000000となる 次に00000000と00000010(十進数の2)をor演算すると00000010となる、 次に00000010と00000011(十進数の3)をor演算すると00000011となり、 すべて演算した結果は真となり、エラーにはならない よってif a=1 or 2 or 3 thenの条件式は必ず真になるでしょ
73 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:26:21 ] 最初の設計がだめなんじゃないの? りんごが無かったら削除するんじゃなくて りんごがあったら追加する仕様の方がいい希ガス
74 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:30:23 ] ?a=1 or 2 or 3 3 3と計算されるね
75 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 02:06:50 ] え?
76 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 03:18:19 ] λ
77 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 11:59:57 ] >>74 Dim a a = 1 MsgBox a = 1 Or 2 Or 3 これ、たしか最初は3になったはずだが、今は-1にしかならん。 おれの記憶違いかな? それにしても MsgBox 1 Or 2 Or 3 Or 4 これが7になるのはどうして?
78 名前:77 mailto:sage [2009/10/05(月) 12:04:44 ] 自己レスだが7になる理由は分った。
79 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 12:44:27 ] >>36 はプログラマとして優秀さを感じるな >>38 は人の程度が知れる
80 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 13:11:30 ] (;゚д゚)ァ
81 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 14:19:24 ] >>77 とりあえず And、Or、Xor は論理演算子じゃなくてビット演算子だと覚えておけ a が 1 じゃない時 a = 1 Or 2 Or 3 ⇒ False Or 1 Or 2 Or 3 ⇒ 00000000 Or 00000001 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3 a が 1 の時 a = 1 Or 2 Or 3 ⇒ True Or 1 Or 2 Or 3 ⇒ 11111111 Or 00000001 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1 1 Or 2 Or 3 Or 4 ⇒ 00000001 Or 00000010 Or 00000011 Or 00000100 ⇒ 00000111 ⇒ 7
82 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 16:16:05 ] >>81 >>78 書いた時点で分ってるよ。
83 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 16:39:52 ] >>81 a が 1 じゃない時 ×a = 1 Or 2 Or 3 ⇒ False Or 1 Or 2 Or 3 ⇒ 00000000 Or 00000001 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3 ○a = 1 Or 2 Or 3 ⇒ False Or 2 Or 3 ⇒ 00000000 Or 00000010 Or 00000011 ⇒ 00000011 ⇒ 3 a が 1 の時 ×a = 1 Or 2 Or 3 ⇒ True Or 1 Or 2 Or 3 ⇒ 11111111 Or 00000001 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1 ○a = 1 Or 2 Or 3 ⇒ True Or 2 Or 3 ⇒ 11111111 Or 00000010 Or 00000011 ⇒ 11111111 ⇒ -1 =演算子はOr演算子よりも優先順位が高いのでa = 1が演算されたあとにOrの演算が行われる
84 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 17:23:56 ] >>81 こまったことに2007のエクセルのヘルプには論理演算子と書いてあるんだがな 実際は論理演算も算術演算も区別がない。全部算術演算してる 問題の本質は、算術演算か論理演算かじゃなくて、型の優先順位の問題 Orで型が一致しない場合、booleanより他の型の方が優先順位が高い おそらくこの式ならIntegerで値が帰っている もしbooleanの方が優先順位が高ければ、2と3がbooleanに変換されるので a = 1 Or 2 Or 3 ⇒ a = 1 Or True Or True ⇒ True True=-1なので、常に-1が帰るはず 型がいい加減な言語の弊害だな
85 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 17:45:45 ] ビット演算の便利な使い方のケースってどんなものある?
86 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 17:52:54 ] >>85 一般論で言えばBoolean型の配列よりはビット演算の方がメモリが節約できてキャッシュの使用効率が上がるし 条件判断も高速になる。 可読性は落ちるけど昔からよく使われる手法だから、知ってないと人のソースが読めなかったりする。
87 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 19:49:26 ] vbsの質問ってここでいいですか?
88 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:24:16 ] vbaから呼ぶならある程度は良いと思うけど。個人的に。
89 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:31:15 ] vbaとあまり関係ないので別スレで質問してみます
90 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:31:50 ] >まぁ今時はコンパイラが大分やってくれるから高級言語ならあまり関係ないけど 組込とかで機械語表記するときゃ今でも普通に使うよ ハードに近づけば近づくほど限界性能を引き出せるけど分かりにくくなる とりあえずVBAって時点で、変な表記はせずに可読性に特化したコードを書くべきだと思う
91 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:38:55 ] 速度厨はその辺が気に食わないみたいで
92 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:43:24 ] VBAに速度求めてもな。 手作業の自動化くらいに使ってりゃいいんだよ。自分でやるより早いだろ。
93 名前:デフォルトの名無しさん [2009/10/05(月) 21:02:07 ] >>85 ハード叩くときの設定なんかで使う #ドライバー作る時なんかに必要なときがある(あまりいないと思うけど)
94 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:19:46 ] VBAでドライバ作るやつはいないだろ VBAでビット演算を使って便利なケースを語れ
95 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:23:14 ] ビット演算の宿題が出たとき
96 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 21:35:17 ] >>94 フォームやシート上にcheckboxが多数ある場合のON/OFF判定とかは?
97 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 02:16:02 ] それにしても SQL に bit 演算ないのは理不尽だよなぁ
98 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 02:24:59 ] んなこたない
99 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 02:40:06 ] あるの?
100 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 06:53:07 ] 奇数かどうかを判定するのにビット演算使ってみたが12%しか速くならんね。 If i Mod 2 = 1 Then と If i And 1 Then 偶数かどうかを比較したらビット演算が45%速かった。 If i Mod 2 = 0 Then と If i And 0 Then
101 名前:100 mailto:sage [2009/10/06(火) 06:58:23 ] すまん、偶数かどうかの比較はまちがってるな。
102 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 07:11:08 ] ちなみに偶数かどうかは If j And 1 = 0 Then
103 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 07:34:47 ] If not (i And 1) Then
104 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 07:50:32 ] >>103 それも書こうと思ったが、たしかにその方が少し速いね。
105 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 07:51:33 ] 背伸びしてビット演算するレベルじゃないな。
106 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 07:54:49 ] ループの回数を多くして計りなおしたら>>102 の方が速かったわ。
107 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 07:56:12 ] その程度は普通はMod使うよなぁ。
108 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 08:02:23 ] WorksheetFunction.IsEvenを使う俺様は最強 じゃねーな。最低だ。
109 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 08:15:34 ] >>108 よく見る似たような最低なものにWorksheetFunction.IsNumberがある。 他にもあったな。
110 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 08:29:22 ] 質問スレがヲタスレ化してる・・・
111 名前:デフォルトの名無しさん [2009/10/06(火) 09:39:21 ] 速度厨はアセンブラでもやっとけ、アフォ
112 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 09:42:03 ] >>100 奇数の判定はこれでいいんじゃないか? If i Mod 2 Then
113 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 09:45:17 ] 俺は速度をことさら求めない派だが、やたら速度を否定するやつのソースって汚いのが多いよな。
114 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 09:51:38 ] >>112 普通はModだが、Andでビット演算で判定すればほんの少し速くなるって話だろ?
115 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 09:59:37 ] >>113 お前の美しいソースを見てみたいもんだな。
116 名前:デフォルトの名無しさん [2009/10/06(火) 10:07:27 ] こんにちは。あたしはカウガール。 AAとして成り上がるため、スレを巡る旅をしています。 __ ヽ|__|ノ モォ ||‘‐‘||レ _)_, ―‐ 、 /(Y (ヽ_ /・ ヽ  ̄ヽ ∠_ゝ ` ^ヽ ノ.::::::__( ノヽ _/ヽ /ヽ ̄ ̄/ヽ
117 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 10:27:45 ] >>114 いやそうじゃなくて「= 1」という比較演算が無駄じゃないかって指摘。 このおかげで遅くなってる希ガス If i Mod 2 = 1 Then と比較するなら If i And 1 = 1 Then とするべきだろうし、 If i And 1 Then に書き方を合わせるなら If i Mod 2 Then と比較しないと不公平じゃないかなーって思った。それだけ。
118 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 10:35:49 ] >>117 たしかに公平にやるならそうだよな。 公平にやってもビット演算が少し速いみたいだけど、人に見せるコードならIf i Mod 2 = 1 Then だな。
119 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 12:31:35 ] おまえら仕事しろよ
120 名前:デフォルトの名無しさん [2009/10/06(火) 19:37:14 ] 速度の事は別スレ建てて、そこでやれ
121 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 19:50:09 ] 俺はわからなかったよ!
122 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 02:02:48 ] お前ら、奇数ってマイナスもありなんだぜ i Mod 2 = 1 ではマイナスの奇数が判定できない時点で失格
123 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 03:32:56 ] 何の問題もない たとえば4bitなら -1 = 1111 -2 = 1110 -3 = 1101
124 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 07:11:14 ] >>123 ー3 mod 2 = 1 になった?
125 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 07:24:01 ] yes we can
126 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 08:52:58 ] >123 天然w
127 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 09:11:24 ] >>122 すみませんねぇ、あいにくマイナス志向じゃないもんでね。 じゃぁIf i Mod 2 <> 0 Thenならあなたのおきにメスでしょうか?
128 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 09:27:47 ] ド素人にはよくあることw
129 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 09:50:25 ] ちなみに If i Mod 2 Then なら負数でも問題ないんだが
130 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:48:04 ] ー3 mod 2 = 1 が偽になる環境って ー(3 mod 2) = -1 と解釈されてるんだろ ((ー3) mod 2) = 1 と書けば問題無し
131 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:08:36 ] >130 天然w
132 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:17:12 ] Modで盛り上がってるところすみませんが、四捨五入ってVBAに関数ある? Roundは微妙に違うし。
133 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:24:05 ] >>132 ない 数式を工夫したり、関数を自作する必要がある またはWorksheetFunction.Round
134 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:26:43 ] >>130 キミはまず、とりあえずマイナス記号を入力する方法から勉強しようか
135 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 11:27:20 ] は-い(;゚д゚)ァ
136 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:37:07 ] >>133 一応VBAにもRoundって関数がある まあ、これ使うと思わぬ結果が出ることもある 自作するなら、基本的には0.5足して切り捨てなんだが これもマイナスのときどうするか考えると結構じゃまくさい
137 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:13:01 ] floor
138 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 15:44:12 ] >>136 ちゃんと最初から読みなさい 質問者はVBAのRoundではだめなことがわかった上で、どうすればいいか質問してる VBAのRound関数とワークシート関数のROUNDは機能が異なるのは既知
139 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:17:08 ] VBAのRoundも立派な四捨五入ですが。
140 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:50:28 ] ttp://q.hatena.ne.jp/1154589462 を参考に、ExcelでSELECTを使えるようにしたのですが、うまくいきません。 データベースのテーブルの見出しを変更すると、きちんとした値を返しません。 デフォルトのIDとNAMEでは正常に値を取得できます。 具体的には、 Sheet2を以下のようにして、 | A | B 1 | ID | CATEGORY1 2 | 1 | a 3 | 2 | b 4 | 3 | c Sheet1のA1に「3」を入れ、 A2に「=execsql("select CATEGORY1 from [Sheet2$] where ID = "&A1」と入力。 A2には値のエラーが返される。 どのあたりが問題でしょうか。 OS:WindowsXP Excel ver:2003 (11.8307.8221)
141 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:15:52 ] ExecSQL = rs("NAME").Value これを変更した?
142 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 17:19:59 ] >141 見落としていました。 ありがとうございます。
143 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:14:31 ] エクセルで指定セル内に文字を入力中、別のセル内にリアルタイムに バイト数を表示させることはできるのでしょうか。 教えてください、エロい人。
144 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:25:56 ] >>143 無理
145 名前:デフォルトの名無しさん [2009/10/07(水) 18:41:44 ] すみません。 すごく初歩的なことなんですが、 列が縦でrow、行が横でcolumですよね? A5だとAが列で5が行ってことになりますよね? A5セルからA10セルまでをループさせたいときに、 5や10の値の定数をrowみたいな名前で宣言してるのを見たんですが、 これってcolumじゃないんですか?? 書籍なので間違いではなさそうなんですが・・・。 A列B列、C列・・・ 5行、6行・・・ ですよね?
146 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 18:50:02 ] rowが行、colum列 辞書で調べてみ
147 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:12:00 ] >>139 違うんじゃねーの? 5は捨てたり入れたりだもんな。 Round(1.5)もRound(2.5)も同じだろ?
148 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:29:34 ] >>145 >>146 の方の回答が全てだと思いますが、 下のExcel関数をいくつかのセルで試してみれば、理解しやすいかもしれません。 【関数】 =ROW() :この関数が入力されている行の行番号を調べます。 =COLUMN() :この関数が入力されている列の列番号を調べます。
149 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 19:31:05 ] いやでき・・・どうだろ ループでバインドするなりキーイベントで捕捉するなり フォームのTxtボックスとかなら普通に出来るけど、k セル入力中ってどうだっけ
150 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:49:33 ] Excel2007 正しい言い方が判らないので上手い事伝わるかどうか…なんですけど。 フォーム上にコマンドボタンを縦に5つ貼りつけています。 エンターキーを叩いた時、初期状態では一番上のボタンのマクロが実行され ますが、これを3番目のボタンのマクロが実行される様に変えたいです。 テキストボックスとかだったらタブオーダーを設定すれば順番を指定できま すけど、コマンドボタンについて同一フォーム上で最優先のものを指定する 事出来ますか?
151 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:51:48 ] >>149 セルはテキストボックスか何かを継承してるはずなんで、 ハンドルさえ取得できればなんとかなる可能性はあるけど、 かなり大変じゃないかと思う。 それにバージョンごとに方法が違ってくると思う。 たぶんだけど2007が一番やりやすそうな気がする。 入力途中のキーイベントはVBAには存在しないので 自前でフックする必要がある。