[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 09/20 10:57 / Filesize : 218 KB / Number-of Response : 791
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Excel VBA質問スレ Part13



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には存在しないので
自前でフックする必要がある。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<218KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef