[表示 : 全て 最新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/

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

152 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:54:47 ]
>>150
コマンドボタンにもタブオーダーはあるよ



153 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 20:58:42 ]
>>145
A1セルの場合
A=横=列=Column
1=縦=行=Row

154 名前:150 mailto:sage [2009/10/07(水) 21:12:30 ]
>>152
プロパティのTabIndexをいじってみたら希望道理になりました。
どうもお騒がせしました m(_ _)m

155 名前:デフォルトの名無しさん [2009/10/07(水) 23:40:36 ]
西暦(2000年以降)年を入力したとき、その1年間の祝日の祝日名、月日及び曜日をイミディエイトウインドウに
表示するプログラムで、サブルーチンプロシージャまたは関数プロシージャを3つ利用しなくてはなりません。

ひたすらサイトを検索したのですが、見つかりませんでした。
全く手が出せず、困っています。どなたか教えてください。よろしくお願いします。




156 名前:デフォルトの名無しさん [2009/10/08(木) 00:06:09 ]
155です。
Excel2007を使用しています。

157 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:28:45 ]
>>155
検索すると結構、マクロ、祝日関数あるよね
ダウンロードしてそのソースをみて
考えればいんじゃない
解説してるサイトもあった気がする

158 名前:デフォルトの名無しさん [2009/10/08(木) 00:32:56 ]
155です。ありがとうございます。
祝日判定や、日にちを入れて表示させるものは
見つかったのですが、祝日名を表示させるものは
ひとつしか見つからず、ダウンロードしても
マクロは見られませんでした…

159 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 00:38:20 ]
>>155
祝日名を表示させるコードの一例が載っています。
ttp://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm#VBA

160 名前:デフォルトの名無しさん [2009/10/08(木) 00:45:27 ]
先ほど参照していたのですが、
kt関数は使ったことがなく、わかりませんでした…。


161 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 01:36:09 ]
>>155
質問の意図がちょっとわからんな。
そういう関数を作れっていう宿題なのか、どこかから手に入れたマクロの使い方を知りたいのか。

ちなみにkt関数は肝心の部分がプロテクトかかってて見えないんじゃなかったっけ?

162 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 13:09:35 ]
全くの初心者の質問なのですが、
ttp://www.matsumae.hokkaido-c.ed.jp/02school/kyouka_01.pdf
このサイトにある例13の問題の、
ex13 上の例13のプログラムを参考にして,自然数Nを入力したとき,
Nの約数の個数を求めるプログラムを,次の手順で作れ。
変数sを準備し,N以下の自然数で割り切れたとき,sに1を加える。
これのやり方が全くわかりません。
どなたか簡単に教えてくれないでしょうか。



163 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 13:45:39 ]
>>162
宿題スレにいけ。ぼけ。

Sub test()
Dim inputNum As Integer
Dim count As Integer
Dim divNums As Integer

inputNum = InputBox("整数入力してね")
For count = 1 To inputNum
If inputNum Mod count = 0 Then
divNums = divNums + 1
End If
Next

Debug.Print divNums
End Sub

ちなみにサンプル例が間違えてるからなw
松前高等学校のプログラム担当の先生に言っといて。

164 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 14:11:18 ]
>>163

ありがとうございます。

165 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 15:16:46 ]
これか
pc12.2ch.net/test/read.cgi/tech/1200989025/115-


166 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:01:04 ]
>>143
入力したキーのフックに使えるAPI関数があるにはある
SetWindowsHookEx

恒常ループを設定して

多分出来ないんだろうが

167 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 16:13:28 ]
>>多分出来ないんだろうが

何しに出てきたんだwww

168 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 17:13:36 ]
>>167
キー入力のバインドは出来るんだろうが、他のセルに書きながら元セルのアクティブどうするかとか、全角や変換どうするんだとか考えたら難しいかなあと
キー入力関係なく、一定時間ごとにセル内容を参照してってのも、入力を確定してないから無理だろうし
セル入力中のデータを捕捉出来れば或いは

169 名前:デフォルトの名無しさん [2009/10/08(木) 18:17:21 ]
155です。
学校で授業でやっていて、「テストまでには出来るようにしておけ」
といわれています。
サブルーチンもまだ1度しか使ったことがなく、
マクロを見て理解するのが精一杯の状態です。

170 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 18:39:53 ]
課題には剥かないよな
休日と振替は法律で決まってるからアルゴリズムまるぱく出来るが、最近は数年で法律改正されてる

171 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 19:36:09 ]
頭のおかしな人には気をつけましょう
info.2ch.net/before.html

172 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 19:40:37 ]
なんだ突然



173 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 19:49:36 ]
Excel2002で3D積み上げ棒グラフを作る方法を教えてください。
ttp://terrapy.sakura.ne.jp/image/3DStackedColumn.gif


174 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 20:14:32 ]
>>169
カレンダー関連の処理は簡単に見えて実はかなり難しい。
はっきり言って初心者には無理。

> プロシージャを3つ利用しなくてはなりません。

てのがひっかかるんだけど、
学校が用意したサブルーチンがあって、それを呼び出せって話じゃないの?

175 名前:デフォルトの名無しさん [2009/10/08(木) 23:37:56 ]
サブルーチンも別マクロで自分で作らなければなりません…

176 名前:デフォルトの名無しさん mailto:sage [2009/10/08(木) 23:46:19 ]
>>175
自分も初心者には少し荷が重い気がするけど

一度に全てやろうとするよりも
一つずつ片付けた方が良いとおもうよ

祝日に関しては内閣府ページ
www8.cao.go.jp/chosei/shukujitsu/gaiyou.html
が参考になると思うんで

どのような処理が必要かまず検討してみたら?

テーブルに1年分(1/1〜12/31)のデータ作成して
それに祝日データを入れていく方法が一番分かり易いんじゃないかな

振替休日の判定とか
休日 平日 休日 → 休日 休日 休日 とする処理とかあるし

177 名前:デフォルトの名無しさん [2009/10/09(金) 00:07:41 ]
西暦年を入力→1/1の曜日を求める→出力「元日 1月1日 ○曜日」
→1月第二月曜の日を求める→出力「成人の日 1月○日 月曜日」
…の繰り返しをする、ということしか…

さまざまなサイトに出ている「春分秋分」については、月日は「春分日」「秋分日」、
曜日は「未定」と表示すればよいのですが…

178 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:23:56 ]
2012以上の数字が入力されたら「その年の祝日はまだ決定していません」と表示するのが正解

179 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:26:24 ]
祝日法は数年ごとに改定されてるから、計算で求めようとしてもプログラムが長くなるだけ。
ワークシートか配列に50年分の一覧表を入れておいて、それを表示するだけの方がよっぽどコンパクトで正確。

180 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 00:36:00 ]
日付が決まっている祝日
第二月曜日など動く祝日
祝日と祝日の間、振替休日

の三つに別けてやるのがこの宿題の正解だな

181 名前:デフォルトの名無しさん [2009/10/09(金) 00:37:28 ]
元日 1月1日
成人の日 1月の第2月曜日
建国記念の日 2月11日
春分の日 春分日
昭和の日 4月29日
憲法記念日 5月3日
みどりの日 5月4日
こどもの日 5月5日
海の日 7月の第3月曜日
敬老の日 9月の第3月曜日
秋分の日 秋分日
体育の日 10月の第2月曜日
文化の日 11月3日
勤労感謝の日 11月23日
天皇誕生日 12月23日

について表示できれば良く、改定については考慮しません。


182 名前:デフォルトの名無しさん [2009/10/09(金) 00:39:57 ]
祝日を表示したいので、振替休日についても考慮しません。



183 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 01:13:42 ]
かなり楽に成っちゃったね
ならば、日付が決まっている祝日
第二月曜日、第三月曜の祝日
秋分春分の三つに分けるのが正解かな

184 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 01:50:01 ]
というか
後出し過ぎ

185 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 02:38:24 ]
会社の創立記念日とか



186 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 08:24:30 ]
ム板だよな?ここ・・・

187 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 08:52:50 ]
そっか今みどりの日だから祝日扱いなんだな

188 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:28:17 ]
質問をさせて下さい。スペックは
Windows2000
Excel2000
です。

シート1に

名前 日付 数 名前 日付 数 ・・・
A氏 10/1 12 E氏 10/3 10
B氏 10/1 11 F氏 10/2 10
C氏 10/2 10 G氏 10/4 11
D氏 10/3 10

のような感じでデータが横に長く入力されているのですが、
これをシート2に一括のデータとしてまとめたいです。

名前には重複はありません。日付のみ重複しています。

申し訳ありませんが、よろしくお願いします。

189 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:30:51 ]
>>188に補足です
シート2は
名前 日付 数
A氏 10/1 12
B氏 10/1 11
C氏 10/2 10
D氏 10/3 10
E氏 10/3 10
F氏 10/2 10
G氏 10/4 11



の形にしたいです。

190 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:41:35 ]
>>188-189
配列に入れたら簡単だよ。
それくらい人に頼らず自分で作れないとダメでしょ。

191 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 21:52:53 ]
配列にいれんでも
名前には重複がないんだったら
そのままシート2へコピーすればいいだけてしょ
1)A氏〜D氏までのセルをコピー
2)その下にE氏〜G氏までのセルをコピー
てな感じで ループ処理していけば

192 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:07:04 ]
>>188
もうちょっと具体的に。
シート1は縦4列?



193 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:11:29 ]
つか 丸投げな匂いがするのは気のせい?

194 名前:188 mailto:sage [2009/10/09(金) 22:28:11 ]
名前と日付と数でひとつのブロックになっていて、それが横に数十連なっています。
今までは手作業でコピーと貼り付けをしていたのですが
数が膨大になってきたので手作業ではまかなえなくなってしまいました。

とりあえず自分でマクロを組んでみたのですが、ブロックごとの数がまちまちで
シート2の一括データに空白が出来て穴あきデータになっていしまいます・・・

195 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:41:20 ]
>>155
希望に沿うか分からないですけど、作ってみました。
ttp://excelerthanexcel.blog103.fc2.com/blog-entry-1.html

3つのプロシージャをどう作るかを下の2択で迷い、後者にしました。
・ 祝日の性質別(固定日、第n月曜日、秋分春分)
・ 機能別(日付確定、曜日確定、1行出力)

よかったら参考にしてください。

196 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 22:57:49 ]
>>194
デキタヨー

Sub a()
  Set S1 = Sheets("シート1")
  Set S2 = Sheets("シート2")
  With S1
    R_max = .UsedRange.Rows.Count
    C_max = .UsedRange.Columns.Count
    R_dest = 2
    For c = 1 To C_max Step 3
      For r = 2 To R_max
        If .Cells(r, c) <> "" Then
           S2.Cells(R_dest, 1) = .Cells(r, c)
           S2.Cells(R_dest, 2) = .Cells(r, c + 1)
           S2.Cells(R_dest, 3) = .Cells(r, c + 2)
           R_dest = R_dest + 1
        End If
      Next
    Next
  End With
End Sub

197 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:08:29 ]
またコイツか・・・

何でわざわざSetするの?

198 名前:デフォルトの名無しさん [2009/10/09(金) 23:11:46 ]
>>195
本当にありがとうございます。助かります。
イミディエイトウインドウが表示されないです…

「春分秋分」については、月日は「春分日」「秋分日」、 曜日は「未定」
と表示すればよいのですが、その場合はどうすればよいか
教えていただきたいです。



199 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:14:50 ]
変数の宣言しないと分かりにくいかもねぇ。

200 名前:デフォルトの名無しさん [2009/10/09(金) 23:28:12 ]
198です。
イミディエイトウィンドウは表示されました。すみません。

201 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:29:33 ]
>>197
あとから修正する可能性のある部分を先頭にまとめてるだけだよ

202 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 23:38:16 ]
>>198
 >学校で授業でやっていて、「テストまでには出来るようにしておけ」
じゃなかった?

あんまり人まかせだと テストで 赤点てな事になるよ!



203 名前:195 mailto:sage [2009/10/10(土) 00:03:23 ]
>>198
自己解決したとはいえ、イミディエイトウィンドウぐらいは質問せずに自分で開きましょう。

ブログ内のコードをぐだぐだに編集して、結果だけは希望通りに出るようにしました。
質を下げたもので良ければ利用してください。

プログラム板にしては非常にぬるま湯的な対応をしてしまったことを
すごく後悔しています。でもまぁ、自分自身の勉強にはなったか。

204 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 00:17:17 ]
>>196
ちゃんと内容は見ていないがSet □ = Nothing をする癖をつけた方がいいと思うよ。

205 名前:デフォルトの名無しさん [2009/10/10(土) 00:51:40 ]
>>203
ありがとうございました。


206 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 01:10:37 ]
>>204
ローカル変数って、たとえオブジェクト型でもモジュールの出口で自動的に開放されるんじゃないの?

207 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 03:57:40 ]
礼儀だよ。

208 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 04:17:30 ]
モジュールが無事終了するとは限らないだろ

209 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 05:39:19 ]
>>204
いらないよ。

>>207
何の礼儀だよ?

>>208
だから?

210 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 06:03:58 ]
↑こいつ最高にアホw

211 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 07:23:40 ]
↓こいつ最高に天才www

212 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:05:40 ]
   ∩――、
  /(゚)丶_ 丶
  / (● (゚)|つ
 | (入_ノ ミ
 | (_/  ノ
  \___ノ゙ー-、
  /\    _ \
(⌒O /\   (_ノ
 \ノ  /  、  )0




213 名前:188 mailto:sage [2009/10/10(土) 10:16:15 ]
>>196
テストしてみたところ問題なく動きました。
本当にありがとうございます。

214 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 10:51:27 ]
>>210
羮に懲りて膾を吹く。
アプリ終了前にfreeしまくるがごとし。

215 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 12:23:40 ]
>>197
>>196を擁護すればSetした方が速いんだよ。
まぁCellsは遅いから、速くしたければ配列だろうけどね。
それからわざわざシート参照の変数をSet 変数 = Nothingとする必要はねーよ。
そんなこと気にするやつは、他にもっと気にすべきことが抜けてる場合がほとんどだ。


216 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 12:55:55 ]
>>196
>S2.Cells(R_dest, 1) = .Cells(r, c)
>S2.Cells(R_dest, 2) = .Cells(r, c + 1)
>S2.Cells(R_dest, 3) = .Cells(r, c + 2)
この部分は
S2.Cells(R_dest, 1).Resize(,3).Value= .Cells(r, c).Resize(,3).Value
と1行で書けそうだな。

217 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 13:10:30 ]
オブジェクトがデカいと
メモリが少ないようなマシンで
set=nothingしないとその後辛くないかな
何もないなら必要ないだろうけど。
試して言っている訳ではないです。

218 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 16:16:35 ]
プログラマはsetした後nothingしないなんていわない

219 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 19:06:03 ]
>>217
Worksheet型のオブジェクト変数はシートを作ってるわけじゃない。
ワークシートへの参照への参照だ。
メモリは32ビットCPUで4バイトだ。
マクロが終了すりゃちゃんと参照カウンタは0になる。
Set ** = Nothingを書くのを否定はしないが、書くのがあたりまえって意見は否定する。

220 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 20:02:13 ]
書くことを習慣づけろ

221 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:15:43 ]
いらないものを書くやつは馬鹿じゃね?

222 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:18:02 ]
これを習慣づけろっ!て言うことが
礼儀と呼ばれるんだろね
質問なんですが
他に礼儀ってどんなものが有りますか?



223 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:19:16 ]
>>221
如何に記述量を増やすかがプロなんだよ。
最小限で簡潔になんてアマチュアのやること。

224 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:22:39 ]
プロってすごいんだね。

225 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:26:09 ]
うるさい、黙ってNothing書け!

226 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:27:51 ]
なにこの流れww

227 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:36:46 ]
つまり、理由も根拠もないんだが、自分のやりたいことを他人に強制したいときの
エクスキューズが「礼儀」ってことだ。

228 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:45:54 ]
>>215
普通はSetした方が速いが>>196は未宣言のVariant型だから速くはならんね。
Nothing云々より変数宣言が大事だな。

229 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:57:25 ]
つまりプログラムにおいて礼儀とはK&Rであると

230 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:57:50 ]
で、それ百万回実行して何ms違うの?

231 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 21:59:54 ]
>>217
関数抜けたら解放されるんじゃ?

232 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:02:12 ]
>230
普通なら宣言しないほうが早い
でも場合によってはエラーが引き起こされたりメモリが足りなくなったりする
エラー処理するかどうかなんて人それぞれだし、押し付けるようなもんじゃないんじゃないん



233 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:16:56 ]
Excel2007

シート上にボタンを2つ貼りつけています。
動作はブックのコピー先をどこにするかだけの違いだけです。
そこでボタンは2つで同じマクロを呼び出し、どのボタンから呼ばれたか
によって動作を変えたいのですが、そういう事出来ますか?

フォーム上のボタンであれば、

Private Sub btn_A_Click()
CopyExec A
End Sub

Private Sub btn_B_Click()
CopyExec B
End Sub

みたいにそれぞれパラメータを与えて切り替えというのが出来ると思うのですが


234 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:33:54 ]
これから速度厨と礼儀厨の熾烈な戦いが始まります。

235 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:39:35 ]
>>233
貼りつけているのは、CommandButtonなの?

Private Sub CommandButton1_Click()
End Sub
Private Sub CommandButton2_Click()
End Sub

てのが出来るどこれとは違うのかな?

236 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:49:17 ]
10usくらいの差なんてどうでもいいよ

237 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 22:50:35 ]
おまえらもういいよムリしなくて
速度とかIndexとかVlookupとかピボットとかNothingとか全部ネタのクセに
わかってるからさ!

238 名前:235 mailto:sage [2009/10/10(土) 22:53:23 ]
同じマクロを呼び出したいのね

ただ
>フォーム上のボタンであれば、
以下の文面では
フォーム上でも同じマクロを呼び出してないけど
それはいいの?

239 名前:233 mailto:sage [2009/10/10(土) 22:55:20 ]
>>235
そうです。CommandButtonです。

それはフォームについてVBEで書く時ではないですか?

シート上に貼りつけて、対象マクロを選択する時ってマクロの登録(N)から
マクロを選択するけど同じのを選択した時に、どのように区別がつけられるのか?
と思いまして質問しています。どうなんでしょうか。


240 名前:デフォルトの名無しさん [2009/10/10(土) 22:56:50 ]
>>238

あれは CopyExec というマクロに対して、パラメータとして AまたはBを与えるという意味で
書きました。判りにくくてすいません。


241 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 23:01:50 ]
>>239
Excel2007じゃないんでなんとも言えないけれど
対象ボタンを右くりっくして
"コードの表示"をすると

シートオブジェクトのコード画面に
Private Sub CommandButton1_Click()

End Sub
とかできない?

242 名前:239 mailto:sage [2009/10/10(土) 23:08:48 ]
>>241
ボタンを右クリックして出てくるメニューの一覧が
切り取り
コピー
貼りつけ
------
テキストの編集
------
グループ化
順序
------
マクロの登録
コントロールの書式設定

でコードの標示というのはここからは出来ないみたいですが




243 名前:241 mailto:sage [2009/10/10(土) 23:12:16 ]
>>242
自分のExcel古いせいかメニューが違うようで

お力になれませんでした! すみません

244 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 23:41:15 ]
>>242
VBE開いてボタン貼り付けたシートのコードの表示すればいい


245 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 23:49:31 ]
デザインモードになってないだけじゃないの。
デザインモードにしてボタンをダブルクリックでVBEの画面になる。

246 名前:デフォルトの名無しさん [2009/10/11(日) 00:36:01 ]
エクセル2007で質問です。
アドインタブのユーザー 設定のツールバーのところにボタン1、ボタン2を作って、
ボタン1を押したら、ボタン1のEnabledをFalse、2をTrue
ボタン2を押したら1はTrue、2はFalseに設定したはずですが、
ボタン1を押したあと、ボタン2が押せる状態になっていません。タブを切り替えるとなぜかうまくいくんですが。
2007はこういう仕様なんでしょうか

247 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:43:51 ]
またーり行こうぜ

248 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:54:36 ]
タブってリボンのことか?


249 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 00:59:03 ]
>>239
同じマクロを呼び出した場合、呼び出し元の区別はつかんだろうな
パラメータが指定できるなら そこで区別つけるしかない

あと
フォーム上でもシート上でも
クリックイベントのプロシージャは利用できる

250 名前:239 mailto:sage [2009/10/11(日) 06:55:15 ]
>>249
>呼び出し元の区別はつかんだろうな

今回は同じマクロを使う事は諦めます。ありがとうございました。

251 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 07:38:14 ]
それActiveXコントロールのボタンじゃなくて、フォームのボタンだよね。
application.callerでボタンのテキストが取得できるから、それで判断。

252 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 08:04:41 ]
>>251
MsgBox "呼出し元 " & Application.Caller
でシート上のボタンでも呼出し元を判別する事が出来ました。ありがとう!



253 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 10:45:19 ]
あー、まだ見てたんだ。よかったよかった。
フォームのボタンに限らず、イベントの発火元は大抵わかるようになってるんだよ。
まぁ、中にはわからにものや、任意のマクロ(イベントハンドラ)を登録できないのもあるけどね。

254 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 11:46:13 ]
Private Sub CommandButton1_Click()
  MacroA pram:=1
End Sub
Private Sub CommandButton2_Click()
  MacroA pram:=2
End Sub

こういうのは駄目?

255 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 12:08:38 ]
いや、それでいいし、実を言えばフォームのボタンの処理もそうしたほうがいいんだ。
プログラマ的な説明だと、イベントハンドラ内に直接処理を実装すると、凝集度が低くなるから。

256 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 17:21:22 ]
>>凝集

臨床検査学以外で初めて聞いたよ。
まさか一般社会で聞く単語とは思ってもいなかった。

257 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 18:01:09 ]
ちょっと教えてもらっていいですか?
Cellsの使い方について
このスレでも時々みかけるんですが

a = Sheets("Sheet1").Cells(1,1).Value

a = Sheets("Sheet1").Cells(1,1)

は結果的に両方共 A1セルの内容を変数aに代入している事になっているのだけど
前者と後者の違いってあるのですか?

本来は、前者であるべきとは思いますが
後者を使った時の弊害ってなにかあります?

258 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 18:22:07 ]
>>257
人によってはデフォルトプロパティを中途半端に省略したソースを汚いと感じることもある。
自分一人で使うだけなら好きにすればいい。
あとは、タイピング量が数回増えるのも人によっては弊害と考えるかもしれない。

259 名前:257 mailto:sage [2009/10/11(日) 18:37:12 ]
>>258
結局の所どちらでも結果は一緒なんだから
どちらを使ってもいいんですね

ソースが綺麗か汚いかはその人の主観なんだから
あまり気にしません

とは言え 自分自身のソースみて汚いと感じる事があるんで
精進しなくては

ありがとうございます

260 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 20:48:33 ]
凝集度と結合度

261 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:13:40 ]
>>259
また荒れる原因になるかもしれないんだけど、
やっぱりデフォルトプロパティは省略すべきじゃないと思うよ。
range型に代入する時なんか、可読性云々じゃなくて、
後から見て訳が分からなくなる・・・時がある。

262 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:36:28 ]
個人的には最初は省略しないで書いた方がいいと思う。
で、覚えたら好きに書けばいいと思う。
覚えていれば省略しても、普通にも書けるが、覚えてないと普通には書けないと思うよ。



263 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 23:59:39 ]
者によっては、特にオブジェクトに大量にアクセスする場合など処理が冗長になることがある
原則的に省略しないほうがいいと俺も思うけど、場面場面で使い分けるべきではある

264 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:00:30 ]
C#に移行したいとかVBAが.NETベースになった時の事も考えて、
デフォルトプロパティは省略しない方がいいんじゃないだろうかと言ってみる
それならとばかりにWithステートメントを多用すると、
C#で「面倒臭ぇと」ボヤく事になる罠

265 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:09:21 ]
それもこれも言語の貧弱さが原因なんだよな

266 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 00:13:01 ]
単純ミス防止でoption explicit とか書くだろ
それと同じで曖昧な表現は極力明確にするほうが良いと思う
どこまでが曖昧な表現かは人によるw

267 名前:257 mailto:sage [2009/10/12(月) 01:14:57 ]
>>261-266
みなさんありがとうこざいます
やはり省略しない方がよさそうですね
確かに単純なプログラムでは問題なくても
複雑なプログラムになるほど後で見て訳分からなくなりそうですもんね
でも
Itemプロパティぐらいは省略してもいいかなと思ってます(^^

268 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 06:01:17 ]
セルの値が数値ならValueじゃなくValue2が普通だから、必然的にプロパティは書くことが多いな。
Itemまで書くとくどいよな。
Worksheets.Item("Sheet1")とかCells.Item(1,1)とかする奴はあまりいないな。

269 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:20:08 ]
             /)
           ///)
          /,.=゙''"/
   /     i f ,.r='"-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ"\      `ー'´     /


270 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 16:41:04 ]
A1A2・・・に単語が並んでいて
B1B2・・・にグーグルかヤフーのその単語の検索件数を書き入れていくというような
Webクエリは作れないものでしょうか?

271 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:09:44 ]
>>270
そのままでは件数がクエリで取り出せないので、VBAと組み合わせる必要がある

272 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 18:18:16 ]
VBA使ってどうすればよいのでしょうか?
ぜひ御教授お願いします。数万の単語の検索に途方にくれています>__<



273 名前:デフォルトの名無しさん [2009/10/13(火) 19:14:30 ]
kwsk

274 名前:デフォルトの名無しさん [2009/10/13(火) 19:26:29 ]
ヒントだけでも教えてください。

1つのセルに1つの文字列が入っています。
各行はその文字列の集合とします。
その文字が何文字あるのかと、
各行の文字の全組み合わせ(各行の全部分集合)が全体の中で何個あるのか、
その結果を出力したいのですがどうしたらいいでしょうか?
例えば、
A,B,C,D
A,B
A,B,C
A
このように各セルに文字が入っていたとすると、
全体の中でAは4個、Bは3個、Cは2個、Dは1個あります。
また、組み合わせの個数は全体の中でそれぞれ、
(A,B)は3個、(A,C)は2個、(A,D)は1個
(B,C)は2個、(B,D)は1個
(C,D)は1個
(A,B,C)は2個、(A,B,D)は1個、(A,C,D)は1個
(B,C,D)は1個
(A,B,C,D)は1個となります。

これは具体的な例ですが、実際は何行何列でも何文字でも対応できるように一般化したいです。
意外と難しくてどうしたらいいかわかりませんでした。
こうすればできるだろうという方針だけでもどなたかご教授お願いします。

275 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 21:11:13 ]
A,B,C,D なのに A,C がマッチするのかよ。
Instrで文字列内を検索すりゃ良いんでない?

てか、どんだけの文字数があるのかさっぱりわからん。
無数にある文字種類から検索するとなったら酷い事になりそうだ。

使われてる文字の一覧を作って、それを検索して行くのが良いかもな。
文字種類は無限です。って言うなら、俺は降りる。

276 名前:デフォルトの名無しさん [2009/10/13(火) 21:53:11 ]
>>275
わかりにくい説明で本当すいません。
「A,B,C,D」は1つの文字列ではありません。1つのセルに1つの文字が入っています。
コンマの区切りでセルを表したつもりでした。
「A,B,C,D」の、AはRange("A1")、BはRange("B1")、CはRange("C1")、DはRange("D1")
とに入っています。

実際はAとかBでなく、りんごとかバナナみたいな1つの単語が1つのセルに入ることになりますが。
(A,C)は(りんご、バナナ)という組み合わせだと考えていただけたらわかりやすいかと思います。

使われる単語は無限ではありません。
それでも仰るとおり数が増えれば酷いことにはなりますが、
そこはまた別問題で解決する算段はあります。

(りんご、バナナ)という組み合わせが全体に何個あるか?という話なんです。
わかりにくい説明ですいませんが。

VBAで、ある集合の部分集合を全て列挙するやり方だけでもどなたか
ご教示してくださいませんか?
一応自分でも調べてみましたがわかりませんでした。

277 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:05:47 ]
>>274
ヒント モリケン

278 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:12:31 ]
>276

275氏も書いてるがInStrでOK。

にしても説明ヘタだな、君は。

279 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 22:29:15 ]
人に判り易く自分のやりたい事を説明するっつーのも訓練が必要っすよ。 w

他人には(特に掲示板なんかでは)質問者のレベル・環境、そして何をどうしたいのかなんて判らないのだから。

(ここはExcel VBAスレだから或る程度は限定されてるけど)



280 名前:デフォルトの名無しさん [2009/10/13(火) 22:33:33 ]
>>275-279
すいませんがんばってみます。
サンプルでもうpすればわかりやすかったかも・

281 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 23:35:10 ]
1列に必ず同じ文字が入るなら簡単だろ。
この場合は4文字だから、組み合わせは
4C4=1
4C3=4
4C2=6
の11種類しかない。
組み合わせの形がわかるから、その組み合わせを順に行毎にループすりゃいい。



282 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 10:28:23 ]
270です。
VBAはかなりいろいろできるようになったのですが、ネットにつなぐスクリプトは
挑んだことがありません。またどうやってヤフーやゴーグルのデータを取り込んで
加工するかがわかりません。
一単語ごとに検索して検索数をコピペする作業は300ぐらいこなすとぐったりです。
どうすれば自動化したいのです・・・



283 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:04:49 ]
まずは日本語でどうぞ。

>1 ★5

284 名前:283 mailto:sage [2009/10/14(水) 11:06:50 ]
>2 ★5

だった;;

285 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:09:03 ]
データ→Webクエリ(で対象のアドレスを入れて)でシートに取り込むのをマクロで記録すればOK


ただし、こっからが問題ありでヤフーやらぐーぐる(だろ?w)が仕様変更でレイアウトなどを変更したら、それに合わせて
修正必須になる

286 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 11:13:47 ]
>>282
とりあえずヒントだけ。(環境依存な部分があるので、このままじゃ動かない)

Sub 件数取得()

  kw = "ぬるぽ ガッ"

  Set ObjHttp = CreateObject("Microsoft.XMLHTTP")
  ObjHttp.Open "GET", "www.google.co.jp/search?hl=ja&q=" & kw, False
  ObjHttp.Send
  src = StrConv(ObjHttp.responseBody, vbUnicode)
  Set ObjHttp = Nothing

  src = Mid(src, InStr(InStr(src, "id=resultStats") + 24, src, "<b>") + 3)
  src = Left(src, InStr(src, "</b>") - 1)

  Debug.Print "「"; kw; "」のヒット件数="; src

End Sub

287 名前:デフォルトの名無しさん [2009/10/14(水) 12:34:58 ]
質問させてください。(Ecel2003)

複数のセルをcsv形式で文字列変数に格納したいのですが、
Webで探したら1セル+","を繰り返す方法しか見つかりません
でした。

実際試して見ましたが対象セルが数万あるので処理に非常
に時間が掛かっております。

Joinなどを利用して一括で行うなど、高速化の手段は無い
のでしょうか?
(対象セルは矩形で表現できます)

ちなみに最終目的は複数のBookのある範囲のセル値を1つ
のcsvファイルにまとめることです。

よろしくお願いします。

288 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 12:41:09 ]
>>287
あくまでも想像だけど、時間がかかっているのは、たぶんセルの内容を1つずつ読み出してるから。
配列に一気に読み込んでから処理すれば、もっと速くなるはず。

289 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:01:44 ]
>>287
Join関数は一次元配列しか指定できないから、二次元から一次元への変換部分だけは
自分で工夫して作るしかない。

290 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 13:11:04 ]
>>288
違うと思うよ。
単純に連結すりゃだんだんサイズが大きくなってメモリに入りきれなくなり別のメモリ領域をしょっちゅう探して確保しなきゃならないから時間がかかるんだ。
昔は必要なサイズの文字列を用意しておいてMidステートメント(関数じゃない)ではめ込んでいくのが常道だったが、今はJoin関数があるから楽だな。

291 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 14:21:33 ]
>>286
神様ありがとうございます。
どういうふうな勉強をされたのでしょうか。ネットワーク関係のお仕事など
されているのでしょうか。参考になる本などを教えていただけるとうれしいです☆
ありがとうございます。

292 名前:287 mailto:sage [2009/10/14(水) 14:26:52 ]
回答ありがとうございました。

一次元に変換してJoinでやってみます。



293 名前:287 mailto:sage [2009/10/14(水) 15:53:51 ]
度々すみません。
追加で質問させてください。

先の件は一次元にしたら体感で数十倍以上早くなりました。
ありがとうございました。

文字列変数に格納したデータをcsv形式で保存すると、期待した
結果が""で囲われたcsvファイルが出来上がりました。

(以下サンプル)
"1,2,3,4,5,
1,2,3,4,5,
"

この先頭/末尾の「"」を入れたくないのですがどうすれば良い
のでしょうか?



294 名前:287 mailto:sage [2009/10/14(水) 16:26:40 ]
自己解決。

出力をWriteで行っておりましたがPrintに変えたら希望通りとなりました。
違いがよっく分かりませんが解決しましたのでご報告します。

ありがとうございました。

295 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:27:54 ]
>>293
csv形式で保存するんじゃなくて、テキストファイルに出力する

296 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:05:17 ]
動的配列について質問なのですが
googleで検索などしたところ

Dim aaa() as string

など()のみで宣言したアトに

ReDim aaa(0 to 10)

のように範囲を指定して使う。みたいな例しか検索できませんでした
しかし、範囲を指定して使うならそれはすでに動的ではなく静的じゃないか
とずっと頭を抱えているのですが

要素数不明の配列を扱うことは無理なのでしょうか?

配列にデータを入れる際に、データ数カウントしながら入れて
その後ReDimすりゃいいってことですかね??

297 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:10:03 ]
と思ったら、データを入れる段階で「インデックスが範囲外」的なエラーでましたorz

入れる前に範囲決めろとか無茶なんですが・・・そういうのはvbaじゃ無理ですかね?

298 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:17:59 ]
>>296
あとから何度でもサイズを変更できるというのも一種の動的。

>>297
インデックス値を変数に入れておき、データを入れる前に、そのインデックス値を使って
配列をどんどん拡張していけばいい。
ただしReDimを使うと配列の中身がクリアされてしまうので
データを保持したままサイズを変更するにはReDim Preserveを使う必要がある。
VBAでは一般的なテクニック。

299 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:20:39 ]
>>286
繰り返し処理をしていたら400ほどでデータがなくなりました。
ブラウザでグーグルを見ると、あなたは拒絶しますのような画面が出てグーグル
使えなくなりました・・・
どうすれば・・・・・

300 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:23:17 ]
We're sorry...

301 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:25:33 ]
>>299
しばらく待つ

302 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:29:09 ]
>>299
そのサンプルはOpenでコネクションが開きっぱなしだから、まずは1回ごとにCloseしてみ
あとは、まあ連続アクセスは避けるとか。たとえば10秒間隔でアクセスするよう修正してみる



303 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:46:57 ]
Google にクエリを送信すること
をしてはいけないということです・・・

世界のグーグルを怒らせてしまって・・・

304 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:10:25 ]
We're sorry...
... but your computer or network may be sending automated queries.
To protect our users, we can't process your request right now.

See Google Help for more information.

305 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:48:06 ]
>>298
アドバイスありがとうございます

要素数をuboundで数えて、残り少なくなったら配列を拡張するという方法をとってみました
とりあえずはこれでなんとかなりそうです

306 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 23:45:51 ]
>>305
そんなファジーな使い方をw
かっちりと要素数取得すれば良いんじゃないか?

307 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 00:12:46 ]
>>299
別に質問でも回答でもないんだけど・・・
グーグルをそういう使い方したらいけないというのがわかって為になったわ

308 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 03:17:58 ]
ボクも、>>286のプログラムを使ってみた。
kabutomo.net/img.php?filename=dc_740000_1_1255544121.png

309 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 08:30:17 ]
299です。
復旧しました。復旧にはゆがんだ画像の絵のなかの文字を入力
させる画面が二回出てきて、復旧。その後、何回かグーグルを
普通に利用したところ、またゆがんだ絵の文字を入れろと・・・
すっかりブラックリストに載ってしまったみたいです・・・・・

英語グーグルにアクセスしても同じことで、違うのは、
送信ボタンが、I'm human と書いてあるところでした・・・
かなりこわい経験でした。400か500連続で、ストップというところ
でしょうか。気をつけてください。

それにしてもあなたはグーグルとのこの契約を知っているでしょう
とは・・・・

310 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 08:59:36 ]
やはりあなたは検索しすぎです
ばいばいおさるさんw

311 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 11:06:57 ]
>>309
ここから先はネットサービス板あたりの領域かな。
Googleの検索は1時間あたり何回までが限界とかそういうのをきちんと調査した上で、
それを越えないようなプログラムを工夫して作ることになる。

312 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 11:30:00 ]
ありがとうございます。頼っていたサービスなので非常に怖い思いをしました。
なんか世界から拒絶されたような・・・
手で作業するよりも早ければそれでいいです。一分に5つぐらいのペースのを
つくってみます。一月ほど休むことにします。
プログラマー向けのページには一日5000までとは書いてあったのですが・・・
ヤフーは5万までみたいです。



313 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:03:54 ]
外部にproxy用意して色んなIPから接続してやるのが定番

314 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:11:35 ]
外部にボットを用意して色んなPCから接続してやるのはどうでしょうか。

315 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 12:41:52 ]
ボットってか
もう
googleを攻撃しないであげて

316 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 13:47:02 ]
なるほど良く考えたらスクリプトアタックか

317 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 14:58:17 ]
OS:XP EXCEL2003、2007にて
Ctrl+6 や Ctrl+7といった数字のショートカットキー
を禁止にする方法はありませんでしょうか?
検索しても回答がなく、OnKeyでも拾えないので
困っています。

318 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 18:03:21 ]
VBAとどのような関係が?

319 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 20:53:16 ]
>>318
VBAでそのキーを押した際の処理を無効化したいんでしょ。

320 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 21:27:48 ]
フックは簡単にできるでしょ。

と思いやってみたが本当に拾えないな。
APIにあったと思うけど、スレ的にどうなんだろ。

321 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:20:20 ]
カーネルに入ってなかったっけか。

322 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 22:23:40 ]
結構前まではAPIの話題が出ただけで拒否反応する人はいたな
ライブラリ参照したりAPI使うのはエクセルVBAの構築手段として十分範囲内だと思うけど
API自体の話でもなければ



323 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 13:30:41 ]
グーグルって自分ではロボットつかいまくってるのに自分には使わないでというのは
やっぱりおかしいわ

324 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 15:39:10 ]
>>323

325 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 16:25:15 ]
XP SP3
EXCEL2002

現在、クライアントPCのファイルをデスクトップ上にあるイントラネットショートカットアイコンに
ドラッグアンドドロップでファイルをアップロードしているのですが、
クライアントPCのファイルをイントラネットにアップロードする事はVBAで処理可能でしょうか?


326 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 17:57:05 ]
VBAでTCP/IPって話は難しいとおもうが
VBAでイントラネットショートカットアイコンにドラッグアンドドロップ相当の
作業を行うのは幾分は簡単かと思う

327 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 20:17:36 ]
>325
ショートカットアイコンは
何処へのどんなショートカットなの?

サーバとかの共有フォルダへのショートカットなら
VBA使わなくてもって気もするが
あえてVBAなら
FileCopy すればいいだけのような気がするのだけど
そのへんどうなの?

328 名前:デフォルトの名無しさん [2009/10/16(金) 20:48:18 ]
質問させてください。

Excel2003ですが、任意の文字列を配列の中から検索して
インデックス番号を返すような処理はどのように行うのでしょう
か?

任意の文字列は必ず配列の中に完全一致で存在します。
また配列内に重複する文字列はありません。

myArray(0)="あああ"
myArray(1)="いいい"
myArray(2)="ううう"
myArray(3)="えええ"
myArray(4)="おおお"

の場合、"ううう"をキーにすれば2を求めたいのですが、配列
を回して比較する程度しか思いつきません。
Findメソッドなどで実現できないでしょうか?

よろしくお願いします。

329 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:38:56 ]
>>328
残念ながらVBAだけで一発で検索する方法はない。
検索を第一に考えるなら、2次元配列にデータを入れておき、
必要に応じてワークシートに転送してからワークシート関数で検索するという方法がある。
文字列の長さがすべて一定ならJoinで1つの文字列にまとめてから位置を調べるという手もある。

330 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:41:08 ]
>>328
目的によってはDictionaryオブジェクトが使える場合もある

331 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:49:56 ]
System.Collections.ArrayList

332 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:03:32 ]
配列がとても大きくて順次比較していては時間がかかるって言う事なら
配列のキーの部分が 昇順または降順でソートされているという条件で
古典的なバイナリサーチ手法を使えぱ時間は短縮できる



333 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 22:08:25 ]
ハイルデータが固定で数が多くないとか、なら連想配列だろうなあ
データ入力時に連想セットできたりするかね

334 名前:328 mailto:sage [2009/10/16(金) 22:37:34 ]
回答ありがとうございます。

フォルダ内にYYMMDD.xlsというファイルが複数あり、それをソートして
格納してある配列があります。
コンボボックスから2つのファイルを選択したらその期間内のファイルに
対して処理を行うことが目的です。

インデックス番号を取得してFor〜Nextの初期値と最終値にしたか
ったので質問させていただきました。

対象ファイル数は100以下です。
後のメンテを考え、素直に全数比較して新たな配列に格納する
方法で対応してみます。

ありがとうございました。

335 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 08:07:18 ]
>>334
要素数が65536以下ならWorksheetFunction.Matchが使える。
この関数でバイナリサーチも出来るが、要素数が65536も超える場合も考慮するなら自前の関数書いた方がいいな。
要素数がたった100以下ならバイナリサーチじゃなくても無問題だけどな。



336 名前:325 mailto:sage [2009/10/17(土) 10:22:18 ]
>>326
D&D相当の作業、是非教えて頂きたいです。

>>327
ショートカットアイコンは通常のフォルダアイコンに地球の絵が描かれています。
FileCopyで試すと「パス名が無効です」
FS.CopyFileで試すと「ネットワークパス見つかりません」とエラーが出ます。
パス名は"\\サーバ名\フォルダ"」と間違いないと思うのですが・・・・

337 名前:327 mailto:sage [2009/10/17(土) 11:16:11 ]
>>336
「パス名が無効です」 だと共有フォルダ名が間違っている可能性があるけど
確認した?
エクスプローラでそのサーバーが見えるなら パス名確認した方が良いかも

FileCopyは
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt
とかでいいはすなんだけど

サーバー系は、ここ数年やってないんで最新バージョンなんかで仕様が変わっていたら
お手上げですが....

338 名前:337 mailto:sage [2009/10/17(土) 11:19:58 ]
あっチョット訂正

FileCopyの構文で 最後の " が抜けてた
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt"
 FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt"
です
失礼しました (^^汗

339 名前:325 mailto:sage [2009/10/17(土) 14:59:31 ]
>>337-338
パス名は何回も確認しました。プロパティーからコピペしたので間違えてないはずなんですが。
エクスプローラーのプロパティではパス名「http://サーバ名/フォルダ名」なんで、
「http:」外して/を\に変えたんですけど、根本的に間違ってるんでしょうか。

あと、補足ですがサーバはSharePointのワークグループです。



340 名前:327 mailto:sage [2009/10/17(土) 15:16:03 ]
>>339
プロトコルがhttpなら
>>337の方法は使えないね

341 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:01:58 ]
createobject("shell.application").namespace("http://サーバ名/フォルダ名").copyhere "c:\temp\test.txt"

342 名前:325 mailto:sage [2009/10/17(土) 17:12:19 ]
>>340
やっぱそうなんですね。
xlsやSLK形式のデータはVBAで上書き保存出来たので、試行錯誤してみたんですが残念です。

>>341
ありがとうございます。試してみた所エラーは出ませんでしたが、コピー出来ていませんでした。
どこか違う所にコピーされたんでしょうかね(゚ー゚;Aアセアセ



343 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:35:43 ]
CreateObject("WScript.Network").MapNetworkDrive "Z:", "http://サーバ名/フォルダ名"
FileCopy "c:\temp\test.txt", "z:\test.txt"

344 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:43:22 ]
>>341
非同期なのかも
msgbox "ちょいと待つ"

345 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 17:50:48 ]
>>339
sharepointはブラウザ上でみるとhttp://〜のリンクだけど、実際はWEBDAVでやりとりしてるよ。
http://〜のアドレスをコピペして、新しいブラウザに入力してファイルを開いてみ?
読み取り専用になるから。
対して、\\鯖名\〜だと読み書きできる。
「webdav vba」 で検索すると幸せになれるかも

346 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 11:54:53 ]
excel2007です

vbaに登録されている(?)errの一覧を知る方法は無いでしょうか?

ループ内でロジックエラーが発生した時にerrに数値を設定してexitさせようと思ってるのですけど
その時にExcelに既に定義されているのとぶつかったら不味いかなと思いまして。


347 名前:346 mailto:sage [2009/10/18(日) 12:04:34 ]
自己解決

Raise メソッドに
Visual Basic のエラー (Visual Basic の組み込みのエラーとユーザー定義エラー)
は、0 〜 65535 の範囲の値です。0 〜 512 の値はシステム エラー用に予約されてい
るため、ユーザー定義のエラーに使用できるのは、513 〜 65535 の範囲の値です。
クラス モジュール内で独自のエラー番号を設定するときには、エラー番号を定数
vbObjectError に追加します。たとえば、エラー番号 1050 を発生させるには、名前
付き引数 Number に vbObjectError + 513 を割り当てます。

とありました。スレ汚しすんません

348 名前:デフォルトの名無しさん [2009/10/18(日) 21:13:43 ]
VBA初めて作る初心者です。 土日をほぼ丸で使っても解決できませんでした。誰か助けてください。もしくは土日を返してくれ・・・。

目的 あるURLをIEで開き、全てを選択してエクセルに貼り付ける。



Sub ie_test_ExecWB()

Dim objIE As Object

Set objIE = CreateObject("InternetExplorer.application")
objIE.Visible = True
objIE.Navigate "google.com"

Do While objIE.Busy = True
DoEvents
Loop

objIE.SendKeys "^a"
objIE.SendKeys "^c"


Range("A1").Select
ActiveSheet.PasteSpecial Format:="HTML"

End Sub

実行すると、
実行時エラー’-2147417848(80010108)':オートメーションエラーです。
起動されたオブジェクトはクライアントから切断されました。
と表示されます。 objIE.SendKeys "^a"objIE.SendKeys "^c"
ではなく、objIE.ExecWB 17, 0 objIE.ExecWB 12, 0でもダメでした。

349 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:33:33 ]
ほれ土日だよ

350 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:36:25 ]
>>348
IEオブジェクトに SendKeys メソッドはないんじゃないの?
そんなことをしなくても、指定のページが開いたら

objIE.document.body.innerText

とすることで現在表示中のページのテキストを文字列として取得できる

351 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 21:44:59 ]
メッセージからすると
Do While objIE.Busy = True
でエラーになってて開けないんだろ

352 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:03:22 ]
>>348
ほい

Private Declare Function SetForegroundWindow Lib "user32.dll" (ByVal hWnd As Long) As Long

Sub ie_test_ExecWB()
  Dim objIE As Object
  Set objIE = CreateObject("InternetExplorer.application")
  objIE.Visible = True
  objIE.Navigate "google.com"
  Do While objIE.Busy = True
    DoEvents
  Loop

  If SetForegroundWindow(objIE.hWnd) Then
    SendKeys "+{TAB}^a^c", True
  End If
  Set objIE = Nothing

  Range("A1").Select
  ActiveSheet.PasteSpecial Format:="HTML"
End Sub



353 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:03:35 ]
>>348
ではあなたの月火をわたしにください
そうすればあなたに土日をさしあげましょう


354 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:17:16 ]
月火だよー
火憐だぜ

355 名前:348 [2009/10/18(日) 22:21:19 ]
>>350~352

神々・・・!
ありがとうございます。

現在>>352様が提供してくださったコードで試していますがうまくいきません。
実行するとクリップボードにあるものがA1に貼り付けられてしまいます。

IEが起動するときに、googleのサイトと空のIEが二つ起動してしまうのですが
これが原因なのでしょうか?

ちなみにVISTA,IE7,officeXPという環境です。


>>353
わかりました。
私のカレンダーから月火を捕まえる為の縄を下さい。

356 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:21:22 ]
>>352
>ほい
だってw

357 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:22:58 ]
保護モード Navigateでぐぐれ

358 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:33:05 ]
>>355
わざと後出ししたな

359 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:41:16 ]
Webクエリをマクロで記録は気に食わないのか?
Sub Macro1()
With ActiveSheet.QueryTables.Add(Connection:="URL;www.google.co.jp", _
Destination:=Range("$A$1"))
.Name = "www.google.co.jp"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.WebSelectionType = xlEntirePage
.WebFormatting = xlWebFormattingNone
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

360 名前:348 [2009/10/18(日) 22:41:33 ]
>>356
だめか?

>>357
保護モードを解除したがだめです。

>>358
すまん




361 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:45:47 ]
webbrowserコンポーネント使えば?

362 名前:348 [2009/10/18(日) 22:48:17 ]
金曜日の夜からVBAを触り始めまして、WEBクエリという単語は何度か目にしましたが
スルーしてました。

これだとテキスト形式での貼り付けになってしまいますね?
ページを丸ごとコピーして(HTML、画像も)貼り付けたいのです。
できるのかな?ちょっとクエリについて勉強してみます。

残り73分で!



363 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:03:06 ]
OSとIEのバージョンを後出しされてしまったでござるの巻

364 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:06:24 ]
> ちなみにVISTA,IE7,officeXPという環境です。

正直言おう
その環境を再現して動作確認するのが面倒

365 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:11:07 ]
VistaにIE7にOfficeXPって、わざといらない子ばかり集めて何してんの?何かの罰ゲーム?

366 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:17:04 ]
Webクエリで画像まで取り込む方法ってあったっけ?

367 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 23:24:31 ]
>>348
VBA初めて作る初心者です


初めてでIEからデータ取得なんてできるわけないし、
ここにソースを貼ってもらっても使いこなせるわけ無い


むだ

368 名前:348 [2009/10/19(月) 00:29:41 ]
できた。

みんなありがとう

369 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:32:13 ]
シートにwebbrowser貼れば?

370 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 00:59:37 ]
>>368
できたら何がダメだったか原因書こうな
たとえショボミスでも、だ
同じ質問がきたときウザいだろ

371 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 02:03:39 ]
VBA使いの皆様へ

VBAとExcelは余り相性が良くありません。
VBAをExcelの上で使うとVBAもExcelも下手になることが
多いです。Excelを使う場合は、出来る限りVBAを使わず
シートの上の数式だけでなんとか出来ないか先ず考えま
しょう。
Excelで本格的な大量計算を行うのは向いていません。
Excelは概して計算が早く無いからです。
VBAを学びたいというのであればAccessのほうが
がおすすめです。

372 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 04:51:58 ]
hagedo



373 名前:325 mailto:sage [2009/10/19(月) 12:55:44 ]
>>343
ネットワークドライブの割り当てもやってみたんですが、「ネットワーク名がみつかりません」になってしまうんです。

>>341
やってみましたが、結果は変わらずでした。ありがとうございます。

>>342
オフコン系SEなのでWEBDAVとは初耳でした、ありがとうございます。色々調べてみます。
ちなみに新しいブラウザにURL入力しファイルを開いてもhttp://〜のままでした。

374 名前:デフォルトの名無しさん [2009/10/19(月) 13:33:05 ]
>>371
WorksheetFunction使えばいいやん

375 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 13:47:51 ]
userformを見えなくするのに

unload meと
userform1.hide

が有りますけど(他にもあるのか知りませんが)、この違いって何ですか?

376 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 14:33:00 ]
>>375
hideは見えなくなるだけでまた復活させることができる。例えばテキストボックスの中身とかそのまま残ってる。
unloadは完全に消去

377 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 16:21:50 ]
>>375
簡単に言うとUnloadはメモリから削除してしまう。
hideは字の如くメモリに残したまま見えなくするだけ。

378 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:22:44 ]
>>376-377
ありがとです。

後で再利用するなら hide もう要らないなら unload ですね。

379 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 17:47:45 ]
unload 378

380 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 18:28:22 ]
>>379

379.visible = false

381 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:12:37 ]
ユーザーフォームを印刷しようと思ってるのですが、ユーザーフォーム自体のサイズが大きいのでA4のサイズに納まらずはみ出てしまいます…

A4サイズに縮小して印刷する方法はないでしょうか?

コードはシンプルに
userform1.printform
だけです。
かなりググッたりしてみましたが、良いホムペもなかったので…

382 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:37:40 ]
>>373
いやだからhttp://でアクセスできるんだけど読み取りになるんだよ。
それはhttpプロトコルの制約だから。
http://を\\サーバIPにして後ろの/を全て\になおしてみて。



383 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:43:01 ]
>>381
縮小印刷はプリンタドライバの仕事。機種依存になるので自力で試行錯誤が必要

384 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 20:33:33 ]
excel2007

リストボックスに3列データを入れる事が出来るようになったとこなんですけど

(1) これタイトルみたいなのを付ける事は出来ないんですか?

コード  商品名  支店 ←付けたいタイトル
9999 xxxxxxxxx xxxxxxx ←データ

みたいな感じで。

(2)
code=Userform1..ListBox1.Text
で選択したコードを拾う事は出来たんですが、この例で商品名を拾うにはどのようにすれば良いのですか?




385 名前:デフォルトの名無しさん [2009/10/19(月) 21:22:18 ]
【1 OSの種類      】 Windows XP SP2
【2 Excelのバージョン】 Excel2000
【3 VBAが使えるか  】 4日目 勉強中
【4 VBAでの回答の可否】 可
まだひよっこちゃんですが皆さんよろしくお願います。

マクロの勉強兼ね、エクセルでTOEICの単語帳を作ろうと思っています。
形としましては、
英単語および日本語訳をシートのA、B列に羅列し、
ユーザーフォームで、
英単語用のテキストBOX1、コマンドボタン1、
日本語用のテキストBOX2、コマンドボタン2
暗記済みのチェックボックスが3つ
という構成で、
コマンドボタン1を押すとランダムで英単語が選択され、テキストボックス1に表示
その状態でコマンドボタン2を押すとその訳がテキストボックス2に表示され、
暗記済みの時はチェックボックスにチェックをつけ、3つたまるとその単語は二度と出てこないようにしようと思います。
また、再度ファイルを開いても単語ごとに同じ状態が保存されているようにしたいと思います。

単語数が600あるという設定で、以下のように作ってみましたが、日本語訳表示の時点で詰まってしまいました。


386 名前:385 [2009/10/19(月) 21:24:01 ]
Private Sub UserForm_Click()
End Sub

Private Sub UserForm_Initialize()
End Sub

Private Sub CommandButton1_Click()
Dim intmax As Integer
Dim intmin As Integer
intmax = 600
intmin = 1
TextBox1.Value = Cells(Int((intmax - intmin + 1) * Rnd + intmin), 1)
End Sub

Private Sub CommandButton2_Click()
TextBox2.Value = TextBox1.Value.Offset(0, 1)
End Sub

CommandButton2 の TextBox2.Value = TextBox1.Value.Offset(0, 1)なんかは
明らかにおかしいかと思いますが、テキストボックス1に表示した、英単語をどのように返せばいいのでしょうか。
Cells(Int((intmax - intmin + 1) * Rnd + intmin), 1)を再度使うと、新たなランダム値を取得してしまうのですしょうか?
かなり初歩的かもしれませんが、紙にプリントしてさっさと単語覚えた方が早いんじゃないかと、焦ってきましたもんで
でも何とか完成させたいので、どなたか以下のいずれでもいいのでご教授ください。

・ランダム値が同じ順序ではなく、常に変化する方法
・チェックが各英単語ごとに反映させる方法
・そのチェックがファイルを閉じても保存される方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)

よろしくお願いします


387 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 21:56:18 ]
>>385
・ Cellsを使う時は、シートを指定したほうが良い

・テキストボックス2に日本語訳を返す為に
 英単語を表示する時に使用したセルの行位置を保存しておく
 →モジュールレベル変数を利用する

つー事で下記はいかが?

Private mRow As Integer

Private Sub CommandButton1_Click()
Dim intmax As Integer
Dim intmin As Integer
intmax = 9
intmin = 1
mRow = Int((intmax - intmin + 1) * Rnd + intmin)
TextBox1.Value = Worksheets("sheet1").Cells(mRow, 1).Value
End Sub

Private Sub CommandButton2_Click()
TextBox2.Value = Worksheets("sheet1").Cells(mRow, 2).Value
End Sub

388 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:07:56 ]
今まで快適に使えていたエクセルファイルが、
突然アホみたいに重くなって起動が容易じゃない。
色々調べたけどさっぱり解らない…。
誰か助けてください。

・サイズは600KBほど
・隠れてるオブジェクト無し
・使用範囲以外に隠れデータ一切無し
 (書式設定やリンクなど)
・シート30枚ほど
・モジュールの解放もやってみたが改善せず



389 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:13:45 ]
特定ファイルだけ?
ハードディスクが死にかけてるとか

390 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:18:01 ]
ウィルスチェックoffにして開いてみれ

391 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:19:53 ]
他のファイルのシートと連動させてるようなのだと
ファイルの置き場所変わっただけで
リンク先行方不明連発で死亡とかあるから
Excelきらい

392 名前:388 mailto:sage [2009/10/19(月) 22:54:19 ]
>389
特定ファイルだけです。
会社で作成したデータ集計用のファイルです。
これ1つだけが異常に重くなり、開く時に
CPU100%を食う状況になっています。

>390
ウィルスチェックoffにすることは出来ないです。
会社で常にネットワーク接続されてるもので…。






393 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:22:01 ]
>>388
ここは Excel VBAスレなんでスレ的に考えると

VBAの処理が 異常に時間がかかってるのでは?
原因として
 ・VBAのコードを変更した為に 異常なループが発生した
 ・元々のVBAのコードにバグがあって あるデータの組み合わせで
  異常なループとなった
とか?

だとすれば
とりあえずオープン時実行するイベント処理停めてみたら?
イベントプロシージャの先頭に Exit Sub を入れてみる

394 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:31:32 ]
>>392
ローカルにコピって
スタンドアロンのPCでテスト汁
さらにウィルスチェックoffにして開いてみれ


395 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:46:05 ]
>>392
xlbファイルを削除する。
CドライブをExcel*.xlbで検索してみて。

396 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:58:33 ]
>>391
そんな使い方しないよ。

397 名前:385 [2009/10/20(火) 00:54:42 ]
387さんありがとうございます。
値を保存するという便利な方法があったんですね。
勉強になります。おかげさまで単語帳っぽくなりました。

残りのチェックボックスにかかわる部分ですが、もう少し努力してみます。

ただ
・チェックを各英単語ごとに反映させる方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)
これらがどうにもできそうにないです… すんません

チェックボックスにチェック入れた単語のどこかの列に、何かしら数字など加え
その値を返して、状態を判断することしか思いつかないのですが、
何かもっと良い方法ありますかね?




398 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 01:21:27 ]
とりあえず出来る方法を思いついたなら、それでやればいい
その方法だとこんな問題がある、とかならそれを質問すればいい
もっと良い方法とか漠然と聞かれると速度房がアップ始めるぞ

399 名前:384 mailto:sage [2009/10/20(火) 08:16:29 ]
自己解決


(1) これタイトルみたいなのを付ける事は出来ないんですか?
フォームのリストボックスの上方にラベルを配置し、それをタイトルとするように
しました。

(2)code=Userform1..ListBox1.Text で選択したコードを拾う事は出来たんですが、
この例で商品名を拾うにはどのようにすれば良いのですか?

Dim n As Integer

n=UserForm1.Listbox1.ListIndex

xxx = ListBox1.List(n,0)
yyy = ListBox1.List(n,1)
zzz = ListBox1.List(n,2)


以上、スレ汚しでした


400 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 10:28:27 ]
あらあらこんなに汚しちゃうなんて……イヤラシイ子ね……フフフ

401 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 12:38:07 ]
ここに速度厨なんている?
俺は速度より美しいか汚いかにこだわるが、たまに速度厨と勘違いされる。
汚いのは遅いって大体決まってるけどな。
そこの君、お前だよw

402 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 19:25:43 ]
>>385
完成したらサンプル見せてください。お願いします。



403 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:14:22 ]
VBA勉強中の初心者です。
セルA1〜A10まで100
A11に1
この状態で1がある行番号を手に入れたいんですが
結果は2です。
どうやったら11を入手出来るんでしょうか?
Dim rng As Range
Set rng = ActiveSheet.Range("A1:A11").Find(1)
A = rng.Address
B = Rows(A)


404 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:21:06 ]
>>401
誰を煽ってるんだよw
唐突過ぎてわろたわ

405 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:49:07 ]
>>403
100 という文字列での 1の部分でヒットしているみたいね
とりあえず下記ではどう?
Set rng = ActiveSheet.Range("A1:A11").Find(1, LookAt:=xlWhole)

406 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:56:20 ]
Find関数はいろいろとバグがある。

407 名前:405 mailto:sage [2009/10/20(火) 22:08:06 ]
>>406
たしかに今回の場合だと
セルの表示形式を数値にすると ヒットしなくなるね

408 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:09:02 ]
たしかにオートフィルタとかのVBAの使い勝手がいい

409 名前:392 mailto:sage [2009/10/20(火) 22:43:00 ]
解決しました。
tmpファイルを全て削除してみたところ、
かなり軽減されましたがまだ反応が鈍かったため、
思い切って新規エクセルに全て
コピーしてみました。

結果、快適に動くようになりました。
おまけにサイズも400kbまで小さくなりました。

410 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:57:36 ]
>405
有難うございます。
明日になってしまいますけど、試してみます。
上手くいったら、その時に
LookAt:=xlWhole
の意味を理解したく教えて下さい。

411 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:29:44 ]
特定の文字列にヒットする条件ならワークシート関数が強力だが
勉強しはじめなら、セルを一個一個確認してループさせる手法からハイルべき
特にエクセルVBAなら

412 名前:405 mailto:sage [2009/10/20(火) 23:37:10 ]
>>410 & 411

>>411 の意見には賛成です
今回の場合は特に

>>410 の質問の回答ですが

Findは Excel本体の検索とほぼ同じものです
マクロの記録をいろいろしてみると分かると思いますが
"完全に同一のセルだけを検索する"です

それと>>407 へ書いたけど
セルの表示形式が数値だと失敗するかもです
一応 標準形式だとうまく検索できたのだけど



413 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 07:11:50 ]
Findメソッドは基本的に文字列を検索するもんだ。
まさか数値を検索してバグがあるなんて言ってるんじゃねーだろうな。

414 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 13:53:11 ]
ちょっと暇なときにVBA勉強しようと思うんですが、勉強するなら2003と2007どっちがいいですか?

415 名前:325 mailto:sage [2009/10/21(水) 15:09:21 ]
>>382
ありがとうございます。勘違いしてました・・・・
しかし、\\サーバIPにしてもだめでした。

Sub COPY_SAMPLE()
Dim objShell
Dim objFolder

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.NameSpace("\\サーバ名\フォルダ名1\フォルダ名2")

If (Not objFolder Is Nothing) Then
objFolder.CopyHere "c:\TEST.txt"
Else
MsgBox "Nothing"
End If

Set objFolder = Nothing
Set objShell = Nothing

End Sub

Nothingのメッセージボックスが出ます・・・

416 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 15:37:47 ]
>>414
自分が持ってんのがどっちなのかによるでしょ。
今からなら2007の方が良いのかなとは思うけど。


417 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 16:11:22 ]
>>416
ありがとうございます。持ってるのが2000と2007だったので2007勉強することにしました

418 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:02:12 ]
2000と2007しかもってないのに2003を選択肢にするとは・・・できる

419 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 20:03:45 ]
>>415
q.hatena.ne.jp/1108018134
これでやってみな。
ヒントはきちんといかそうぜ。

420 名前:410 mailto:sage [2009/10/21(水) 21:43:51 ]
>411-412
上手くいきました。有難うございます。

>413
そのまさかなんですが・・・
なんとか上手くいきました。独学&ヘルプ@2007ではなかなか上達しないですね。今度、本屋行ってきます!

421 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:04:58 ]
いやバグはあるよ。

422 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:09:25 ]
【合法】みんなズッキーニでヘヴン状態しようぜ!!
namidame.2ch.net/test/read.cgi/yasai/1223375038/



423 名前:デフォルトの名無しさん [2009/10/21(水) 22:51:50 ]
初心者です。質問させてください。
XP、office2000において、onactionで呼び出すsub hogeにsingleの引数を複数渡したいのですが、どのようにすればよいか教えてください。

.onaction("'hoge, arg1,arg2'")

とかだとうまくいきませんでした。

424 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 23:41:28 ]
select case の使い方についてですが

例えば、A4の値及びB4の値によって条件を分岐させたい時に (A4 1または2 B4 同じく 1または2)
Select Ccase Cells(4,1) Cells(4,2)
case 1 1
case 1 2

end select

みたいな使い方出来ないんですかね?Excel2007では

select case cells(4,1) cells(4,2) でエンター押した瞬間に
エラーになっちまいましたが。


425 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 23:52:34 ]
二十判定は出来ない
変数とかに格納したり論理結合したり
ただ1か2のどちらかなら、文字列結合すりゃいい

426 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 23:58:26 ]
>>425
了解しました

427 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 09:32:17 ]
>>423
.OnAction = ”'hoge””arg1””,””arg2””'”

428 名前:デフォルトの名無しさん [2009/10/22(木) 11:55:51 ]
java経験しかないまったくの初心者ですが、質問させてください

列AQの行n1の文字列hoge1を取得して、hoge1を列Cより検索、
発見したらその行n2の列Bの文字列hoge2を列AUのn1のセルに代入
これをAQの行全てで実行したいのです

Cにおいてhoge1が重複することはありません

どうかよろしくお願いいたします

429 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:04:24 ]
vlookup

430 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 12:21:27 ]
何行あるかしらんが、列全部にvlookupに限らず参照判定関数入れるのは

そーゆーときは配列に流して連想しる

431 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 13:47:33 ]
Ver.書くのを忘れてました!ごめんなさい

XPでExcel2003です

列Dの行n1の文字列hoge1を取得して、hoge1を列Cより検索、
発見したらその行n2の列Bの文字列hoge2を列Hのn1のセルに代入
これをDの行全てで実行したい、に変更させてください

VBAとExcelマクロの知識が0なんです…
vlookupという関数を使えばいいのですか?
Cは2988行、Dは1284行です

sub test()
dim name as string

for i = 1 to 1284
name = cells(i, 4)
if (vlookup(D$i, C1:C2988, 2, false)) = name then
copy()
pastespecial()

endsub

こんな方向性で大丈夫ですか?

432 名前:325 mailto:sage [2009/10/22(木) 14:38:41 ]
>>419
そのURLはググってる最中に何度か訪れたんですけど、
ちょっと私には扱えそうもなかったんでスルーしてたんですけど、
頑張って調べながらやってみたら2〜3度エラーが出ましたが、
希望通りアップロード出来ました!誠にありがとうございました。
一年分の便秘が治ったようなすがすがしい気分ですw



433 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 15:16:28 ]
>>431
no

434 名前:325 mailto:sage [2009/10/22(木) 15:22:42 ]
>>419
すいません、これってLZHファイルとかは扱えないんでしょうか?
TXTやSLK形式は成功したんですけど、LZH形式はエラーになったんです・・・

435 名前:434(325) mailto:sage [2009/10/22(木) 15:26:16 ]
自己解決しました。
LZH形式もいけました。ファイル名が不味かったようです。

436 名前:434(325) mailto:sage [2009/10/22(木) 15:28:23 ]
連投すみません。
LZH形式、エラーこそ出ませんでしたが、解凍すると文字化けしてまいした。

437 名前:434(325) mailto:sage [2009/10/22(木) 15:46:49 ]
再度自己解決しました。.typeと.charaset外したら正常に解凍出来ました。
スレ汚しすみませんでした。逝ってきます。

438 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:08:18 ]
>>431
言いたい事は分かるんだけどさ。
列Dだの列Hだの、n1だn2だって、そんなのどうでもいいよ。
それで作りたいんだろうけど、読んでて辛いです。
Aから探してBにコピーとかでいいじゃん。組み合わせるだけでしょ。

for i = 1 to 1284
name = cells(i,4).value
set rng = columns(3).find(name)
if not rng is nothing then
rng.offset(0,1).value = rng.value
end if
next

みたいな考え方でやるよ。俺なら。
今ブラウザで書いたんで、動作保障も無し。


439 名前:434(325) mailto:sage [2009/10/23(金) 09:54:04 ]
>>419さんの方法でアップロード解決したんですが、半角カナ等のファイル名をうpすると、
実行時エラーになります。回避する方法ありますでしょうか?

D&Dでうpすると正常に出来るんですが・・・・

440 名前:431 mailto:sage [2009/10/23(金) 11:17:12 ]
>>438
わーい!教えていただいたものを道標に調べつつやってみたらできました!
一応完成版を張っておきます

Sub macro()
   Dim code As String
   Dim rng As Range
   Dim name As String

   For i = 2 To 1284
     code = Cells(i, 4).Value
     Set rng = Columns(3).Find(code)
     If Not rng Is Nothing Then
       name = rng.Offset(0, -1).Value
       Cells(i, 9).Value = name
     End If
   Next
End Sub

ありがとうございました!

441 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:20:06 ]
>>439
エンコードでぐぐりな。

442 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 12:29:34 ]
>>440
そんなんで完成?
Findメソッドの引数が1個だけって大丈夫カヨ
WhatとLookInとLookAtの最低三つは必要じゃないの?



443 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 13:52:52 ]
>>442
一応ちゃんと動作しましたよ!
今回一回だけ動けばいいマクロなので、結果に間違いがなければOKです!

444 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 14:17:40 ]
>>443
そりゃたまたまでんがな。
何もいじくってない状態じゃ部分一致だが、それでいいの?

445 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 14:28:40 ]
本人がOKってんだからいいんじゃね?

446 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 14:38:09 ]
>>444
う、もしかして上手くいったと勘違いしてるだけなんですかね…
codeはxx01みたいな形で、nameは文字列(重複部分多々あり)なんですが

ちゃんと調べてみます!

447 名前:お願いします>< [2009/10/24(土) 01:26:35 ]
VBA初心者です。
学校の宿題で
「y=sinXとY=Xの2本の直線で囲まれた面積をVBA関数を用いて求めなさい。」
という問題がでました><
ですが、今日初めてVBAという言葉を聞いたぐらいですので、まったく分かりません( ;∀;)

どなたか記入するコードを教えて頂けないでしょうか?

448 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 01:45:00 ]
学校の宿題は自分でやらなきゃダメ><
何の前提もなしにそんな宿題が出るはずないから、わからないのは貴方がサボっていたってことでしょ

449 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 02:20:06 ]
宿題スレ池

450 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 02:45:13 ]
>>447
これは酷いwww
これが社会に出て行くと思うと末恐ろしいな

451 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 10:22:29 ]
sinXって直線なのかね

452 名前:デフォルトの名無しさん [2009/10/24(土) 10:57:44 ]
>>424
遅レスですが、こんなアイディアも。

Select Case Cells(4,1) & Cells(4,2)
case "11"
case "12"





453 名前:452 mailto:sage [2009/10/24(土) 10:59:38 ]
>>425 見てなかった… すまん

454 名前:デフォルトの名無しさん [2009/10/24(土) 11:43:07 ]
セル参照の計算式

=G5*K3+M1

セル参照+数字の計算式

=F6*G6*3.14

数字のみの計算式

=15*21*45

この数式を区別して色分けする事は可能ですか?
せめて上2つと下1つだけでも区別できればいいんですが

455 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 11:47:42 ]
>>451
正弦波だから、Y=1 から Y--1 までを往復する曲線かな。
Y=Xの直線とは1点交差するけど、2点とは交差しなんじゃないか?
よくわかんないけどw

456 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 12:13:36 ]
だいたい2本の直線で囲まれる面積ってなによ
問題の意味すらわかんないならVBA以前の問題

457 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 12:25:46 ]
非ユークリッド幾何だと日常的

458 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 12:31:59 ]
大圏航路かよ 何年生の課題だ

459 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 13:43:37 ]
>>454
手元にPCがないから確認できないけど、今ぱっと思いついた案が1つある。
セルに入力されている数式を取得し、文字列操作関数を使用し演算子の部分で区切る。
区切られた文字列を確認して全てにアルファベットが含まれていれば、セル参照あり、全く含まれていなければセル参照なし。
その他は混合。
どうでしょう?
文系のおいらの考えなので、バカかと思う方はたくさんいると思うけど。

460 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 13:46:03 ]
>>459だけど一部訂正。
「セル参照あり」→「セル参照のみ」だったよ。

461 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 15:08:03 ]
問題文を写し間違えただけだろ
Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ
片方だけ積分して倍すればいい

462 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 19:24:38 ]
>>459
0.100000000E+00



463 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 19:26:00 ]
>Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ

kwsk

464 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 20:36:00 ]
>>454
セル参照があるかないかだけですが
一つの案として下記なんかはどうでしょうか?

一部の関数を使用していると判定ミスしちゃいますが(DAYS360 とか)

With ActiveSheet.Cells(i, j)
  If (.Formula Like "=*[A-Z][1-9]*") Or (.Formula Like "=*[A-Z]$[1-9]*") Then
       'セル参照を含む数式
       .Interior.ColorIndex = 34
     Else
        'セル参照を含まない数式 又は 定数
        .Interior.ColorIndex = 40
  End If
End With

465 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 21:22:20 ]
>>462
最初に「=」が付いてるか確認すれば問題ないと思う。

466 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:22:36 ]
0.100000000E+00 +0.100000000E+00

467 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:27:46 ]
絶対に関数は使われていないのだろうか?

468 名前:デフォルトの名無しさん [2009/10/24(土) 22:36:56 ]
"=*[A-Z][1-9]*"や "=*[A-Z]$[1-9]*"って何を表してるんですか?

469 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:42:26 ]
性器

470 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 22:44:17 ]
>>467
そういう話になってくると正規表現?

471 名前:デフォルトの名無しさん mailto:sage [2009/10/24(土) 23:17:41 ]
正規表現だと、
*[A-Z]$[1-9]*
の、文末一致or後方参照の $ が説明付かない。

472 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 00:45:26 ]
userformのtext1に入力された値を使うとき、
userform.text1と書くと思いますが、
text1、text2と順番に参照していきたい時、イメージとしては"text"&i のように変数で指定したいんですがエラーになってしまいます。
何かいい方法はないでしょうか?



473 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 01:25:10 ]
excel2003でOSはXPです。
ダブルクオーテーションマークが検索したい文章内にある場合どうすればいいのでしょうか。

具体的には
<IMG class="reslevel rf1 level2" alt="きこり レベル 2" src="img/x.gif">
というouterHTMLの文字列に一致したらdo while構文を抜け出すという形にしたいのです。

Do until objIE.document.all.outerHTML = "<IMG class="reslevel rf1 level2" alt="きこり レベル 2" src="img/x.gif">"
という形でダブルクオテーションで括ったのですが「コンパイルエラー」となってしまいます。
どうすれば回避できるか教えていただけないでしょうか。

474 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 01:25:54 ]
>>472
配列変数を使う(text1とtext2を配列変数に突っ込んで使う)

475 名前:464 mailto:sage [2009/10/25(日) 01:41:33 ]
>>471

>>464を書いたのは自分だけど
正規表現だと、 $は特殊な意味をもつの?
Like 演算子では特殊な意味をもつようにはHELPに
書かれていなかったんで

.Formula Like "=*[A-Z]$[1-9]* は
=$A$1 とか =A$1 という形式でのセル参照も判定させたいので
付けたんです

もしかして
.Formula Like "=*[A-Z][$][1-9]*"
って書いた方が正解なのかな?

476 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 02:00:43 ]
>>474
ありがとう

477 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 02:59:44 ]
>>475
msdn.microsoft.com/ja-jp/library/h5181w5w.aspx
少しは調べろよカス

478 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 08:59:51 ]
>>475
だから、正規表現じゃないって言ってるのだよ。

=$A$1 を判定させるマッチパターンは、
pattern = "=\$[A-Z]\$[0-9]"

479 名前:デフォルトの名無しさん [2009/10/25(日) 15:58:07 ]
色々教えてもらいここに辿り着きました

1つのフォルダーにあるいくつかのcsvファイルの全てのA列からC列のデータを削除したいのです

そういうvba作ってもらえませんか?
どうかお願いします

480 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:05:55 ]
>>479
>>2の★5を100万回読むんだ

481 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 16:06:04 ]
了解
待ってな

482 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 17:02:08 ]
>>479

いくらくれる?



483 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 22:05:39 ]
>>482
お金は…ないんです(T_T)

484 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:30:41 ]
ユーザーフォームでつくったコンボボックス等をダブルクリックして編集画面を開きます。
ここに標準モジュールで作ったプロシージャをコールしても反映してくれません。
なぜでしょう?

485 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:38:10 ]
・何がしたいのか
・現状どうなっているのか
・それに対する自分の意見
・自分の環境は何なのか(CPU,OS,Office)
・サンプルをアップローダーに。

このくらいは質問するなら情報として欲しいわ。

486 名前:484 mailto:sage [2009/10/25(日) 23:48:06 ]
なんか勘違いしてたっぽい。
コンボボックスにあらかじめ入れておく項目は標準モジュールからは呼び出せないか。

487 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 23:54:43 ]
最後疑問系なの
質問?
コンボボックス
リストボックスのリストは標準モジュールで指定出来るでしょ
値を入れておきたいならValueに入れればいいでしょ

488 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 09:00:41 ]
マクロ記録
エクセルでCSV開く
該当行削除
保存
記録停止


↑で出てた正規表現ってよくわかんないんだが何が出来るの

489 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 09:57:05 ]
日本語でOK

490 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 17:17:01 ]
Excel2007 statusbarに関する質問です

Dim oldStatusBar

With Application
.ScreenUpdating = False
oldStatusBar = .DisplayStatusBar
End With

〜処理〜

With Application
.ScreenUpdating = True
.DisplayStatusBar = oldStatusBar
End With

として処理中、statsubarに "現在 " & code & " を処理中"としてcodeを
表示させているのですが、終了後に
"現在 0 を処理中" となります。
これを処理終了後には何も表示させなくしたいのですが、どうすれば
良いのでしょうか。
.DisplayStatusBar = ""とすると、
実行時エラー 13
型が一致しません
となります。



491 名前:デフォルトの名無しさん [2009/10/26(月) 20:36:59 ]
>>1の★4に該当しますが、他にいいスレがあったら誘導してください。

Long型の数値からリトルエンディアンByte(4)型に分割したいのですが、どのようにしたらよいでしょうか。
VBだとLong型が8バイトと聞いたので、こちらに質問しました。

よろしくお願いします。

492 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 22:09:15 ]
1回だけランチしましたが、それっきりで不発です。
どこが変なんでしょ?

CODE

var path='C:/Program Files/Microsoft Office/Office/excel.exe';
var args='';

this.setAttribute('oncommand','this.startProcess("'+path+'","'+args+'")');

this.startProcess=function(path,args){
var file = Components.classes['@mozilla.org/file/local;1']
.createInstance(Components.interfaces.nsILocalFile);
var process = Components.classes['@mozilla.org/process/util;1']
.getService(Components.interfaces.nsIProcess);
file.initWithPath(path.replace(/\//g,'\\\\'));
process.init(file);
process.run(false,[args],1);
}




493 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 23:13:30 ]
>490

2007は知らんけど2003ならば
Application.StatusBar = False

494 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:26:15 ]
>>491
VBAのLongは4バイトです
8ビットずつマスクとシフトしながら分割してください

495 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 00:27:36 ]
>>492
VBSはスレチ

496 名前:491 [2009/10/27(火) 01:21:41 ]
>>494
ありがとうございます。
ただ、そのままするとマイナスの値のときにおかしくなってしまいます。
もうすこし詳しく教えていただけないでしょうか。


497 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:34:34 ]
>>496
MSBだけ別の変数にとっとけばいい

498 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 01:41:11 ]
492はどうみてもJavaSな件

499 名前:491 [2009/10/27(火) 16:25:08 ]
>>496
ありがとうござました。
マイナス関係なくできました。
難しく考えすぎてたみたいです。


500 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 19:39:03 ]
Sub Main()
Dim strPath As String
Dim wkb As Excel.Workbook
Dim wks As Excel.Worksheet
Dim rng As Excel.Range
Dim col As New Collection
strPath = Excel.Application.GetOpenfilename
If strPath = "False" then
Exit Sub
End If
Set wkb =Excel.Workbooks.Open(strPath)
Set wks = wkb.Sheets("Sheet1")
Set rng = wks.Range("A1")
call col.Add(rng)
If Not(wkb Is Nothing) Then
Call wkb.close: Set wkb = Nothing
End If
If col Is Nothing Then
Set rng = col.Item(col.count)
Debug.Print rng.Value
End If
End Sub
'colって、Nothingじゃないの?
'Is Nothingの対象はRange型のcolでは無くて、col自体を対象としてんのかな。

501 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 20:01:28 ]
Dim col As New Collection

502 名前:デフォルトの名無しさん [2009/10/27(火) 22:27:30 ]
XP で2003使ってます。

2003及び2000で動いてくれれば・・

アクセス側から、あるワークシートにおいて、
Set myWKS = myWKB.Worksheets("test")
With myWKS
t = DCount("*", "T1")
.Range("A10").CopyFromRecordset myRS
.Range("A10:D" & t + 9).Select
.Application.ActiveCell.Sort Key1:=Columns("C"), Order1:=xlAscending, Header:=xlNo, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlSortColumns, SortMethod:=xlStroke
    .SaveAs "C:\Documents and Settings\Owner\デスクトップ\sample\テスト作成.xls"
    .End With

という処理を行っています。
アクセスを起動後1回目は、ソートが正常に動きますが、2度目以降はうまくソートしてくれません。

次にこのメソッドを使用するときに、引数を指定しなかった場合は、保存されていた値が使用されます。
と、ヘルプにもあるように、ここにひっかかっているのだと考えていますが、
どうにも原因を突き止められません。
どうぞよろしくおねがいします。



503 名前:デフォルトの名無しさん [2009/10/27(火) 23:15:04 ]
解決しました。
理由は先ほどエラーが出ていたときは1度目の実行はうまくいくのにエクセルファイルを閉じても
エクセルのプロセスが残ったままになっており2度目はその影響(?)で失敗していました。

コード自体に問題はなく、参照設定のexcelオブジェクトの優先順位を一つ上にあげてやれば、
正常に2度目以降も動くようになりました。

ただ、凄く不安定な正常性ということなので、根本を解決できる何かがあれば
是非アドバイスおねがいいたします。

504 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 23:45:25 ]
残ってるのはDBSオブジェクトじゃね
エラー出たときとか終わるときにちゃんと閉じてる?

505 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 00:36:54 ]
そこでした。
オブジェクト指定をしっかり作ったエクセルアプリケーションにしていなかったり、
いきなり.Rangeにしてたりで、タスマネに5個ぐらいEXCELってありましたw

コード多すぎて無理臭いので、クエリのほうから指定することにしました。
以降はいい加減に組まないように注意せねばでした。

ありがとうございました

506 名前:デフォルトの名無しさん [2009/10/28(水) 10:55:56 ]
エクセルのマクロの問題に対する質問はここでいいですか??

507 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 11:13:24 ]
OK
バージョン書いてね

508 名前:デフォルトの名無しさん [2009/10/28(水) 13:01:21 ]
ここは宿題かたずけますスレって考えてもいいんですかィ

509 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 13:19:44 ]
>>508
質問の内容とタイミングによる
時間帯と曜日によって、宿題は自分でやれってレスが付くだけのこともあるし
VBA厨が喜んでプログラムを作ってくれることもある

510 名前:デフォルトの名無しさん [2009/10/28(水) 13:55:04 ]
とりあえず書いてみます
Excel2003

めっちゃ初歩的です…
Do〜LoopかForーNextを使わなければならないみたいです。
1〜10までの整数で
偶数の和をD1
奇数の和をE1
に表示せよ です。

511 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 14:02:20 ]
ExcelはスプレッドシートソフトでVBAの練習台じゃ
ありません。
VBAの練習をしたいのなら、Accessでやれっつーの
(AccessではExcelでやれっていわれるかも)
てなわけで、Active BASICがVBAと文法互換だったら
いいのになとおねだりしよう

【サーバー各所】ActiveBasicその11【冬眠中】
pc12.2ch.net/test/read.cgi/tech/1241316033/

512 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:07:11 ]
>>511
あほか。Access持ってる奴なんてごく少数だろうが。



513 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 15:22:58 ]
ACCは初めにオブジェクトアクセスを経由する必要があるから、VBAの初学には向かないよ、と思ってる
エクセルなら(初めの内は)オブジェクト志向を意識しないでコードが組める上、マクロの記録がある
マクロの変換じゃなくて、操作をVBAに変換するから、体感出来る点が非常に優位

逆に初めからRecordset操作を理解したほうが後が楽かもしらんけども

514 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 16:37:27 ]
>>513
VBA扱う場合はやっぱフォームから入るべきだろ。
テキストボックスで入出力でいいじゃん
Excelの場合CellをVBAで扱うのは、VBAだけじゃ不十分で
VBAの基本とExcelの基本が十分出来上がって独立
共存できるようになってからじゃないと両方駄目になる悪寒
Accessの場合はVBAが出来てからテーブルやらクエリ
やら覚えていく方法がとれる。

515 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 17:06:49 ]
別のスレでやれ

516 名前:デフォルトの名無しさん [2009/10/28(水) 18:30:39 ]
VBAを使用してアルバイトの出勤簿を作成しています。
例えば、セルJ6に名前をInputBoxを使って入力した時に、セルJ5にフリガナをカタカナで
自動で表示する場合はどのようにすればよいでしょうか?

517 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 20:57:08 ]
フリガナにはそれ用のワークシート関数を使う

518 名前:デフォルトの名無しさん [2009/10/28(水) 21:23:03 ]
PHONETIC関数でしょうか?
フリガナを表示しないで、氏名(漢字)が表示されてしまいます。

519 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 21:39:35 ]
大した人数でないなら
名前と読み方リスト作ろうぜ

520 名前:デフォルトの名無しさん [2009/10/28(水) 21:44:07 ]
読み方リストを作り、セル参照を使うということですか?

521 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 21:51:46 ]
でもなんでも
どう料理するかは考えてないけど
テキストボックスに名前入れると読み仮名ラベルに表示するとかかな

522 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 21:58:13 ]
>>510
宿題なのかな?答え書いたら勉強にならないから、ヒント書いておくね。

for i = 1 to 10 next

if i and 1 = true then 奇数
if i and 1 = false then 偶数

cells(4,1).value = cells(4,1).value + i

がんばって。



523 名前:デフォルトの名無しさん [2009/10/28(水) 22:07:25 ]
ワークシート関数を使うことに決めました。


524 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:08:51 ]
Mod 演算子を使わないのは速度厨なせいでつか?

525 名前:517 mailto:sage [2009/10/28(水) 22:16:47 ]
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1414375849

なるほど、セルに直接入力しない場合で、phoneticを使用する場合は工夫が必要だね

526 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:40:03 ]
ワークシート関数はVBAからでも呼び出せるっちゃ呼び出せる

527 名前:デフォルトの名無しさん [2009/10/28(水) 22:49:49 ]
変更して保存
  ↓
Excelを終了
とするにはどういうふうに構文をかけばよいでしょうか?

528 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:59:33 ]
>>527
Application.Quit

529 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:49:49 ]
そういえばかなり前に1からnまでの和をループを回して求めよってのに
For i = 1 To n
Next
和 = (1 + n) * n / 2
みたいなのがあったな。

530 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:53:53 ]
>>522
ビット演算なんて分るやつあまりいないんだから、そういう知ったかぶりの回答はやめましょうね。

531 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 00:19:50 ]
奇数 = 0
偶数 = 0
For i = 1 To 10 Step 2
  奇数 = 奇数 + i
  偶数 = 偶数 + (i + 1)
Next
Debug.Print 奇数, 偶数

532 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 00:26:27 ]
>>530
>ビット演算なんて分るやつあまりいないんだから

え!そうなの?




533 名前:デフォルトの名無しさん [2009/10/29(木) 00:48:08 ]
>>510
教えてくれとは書いていなかったけど、よかったら参考にしてください。

Sub PlzDoHomeworkByYourself()

Range("D1").Value = 0
Range("E1").Value = 0

' The following was written by someone on the net.

For i = 1 To 10
If (i Mod 2) = 1 Then '2で割り切れない場合(奇数)
Range("E1").Value = Range("E1").Value + i
Else '2で割り切れる場合(偶数)
Range("D1").Value = Range("D1").Value + i
End If
Next

' If you're a teacher, you ought to punish your student who didn't do homework himself.

End Sub

534 名前:デフォルトの名無しさん [2009/10/29(木) 01:18:45 ]
>>533

ありがとうございます!!また頼むかもしれませんがよろしくお願いします。

535 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 01:45:25 ]
Sub Main()
Dim rng As Excel.Range
Dim i As Integer
Set rng = Excel.ThisWorkbook.Sheets("Sheet1").Range("D1")
With rng
'初期化
.Offset(0, 0) = 0 '$D$1
.Offset(0, 1) = 0 '$E$1
For i = 1 To 10
Select Case True
Case (i Mod 2) <> 1 '偶数
.Offset(0, 0) = .Offset(0, 0).Value + i
Case (i Mod 2) = 1'奇数
.Offset(0, 1) = .Offset(0, 1).Value + i
End Select
Next i
'初期化
.Offset(0, 0) = 0 '$D$1
.Offset(0, 1) = 0 '$E$1
i = 1
Do While i < 11
Select Case True
Case (i Mod 2) <> 1 '偶数
.Offset(0, 0) = .Offset(0, 0).Value + i
Case (i Mod 2) = 1'奇数
.Offset(0, 1) = .Offset(0, 1).Value + i
End Select
i = i + 1
Loop
End With
End Sub


536 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 02:03:47 ]
>>510

For i = 1 To 10
  Cells(1, 4 + (i And 1)) = Cells(1, 4 + (i And 1)) + i
Next

537 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 09:15:12 ]
>>532
officeのVBAだと使わないしねぇ
vbaだと知ってても使う場面がほとんど無い品


538 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 09:24:31 ]
>>529
なにそれ面白い


ビット演算とか知識はかろうじてあるけどナニソレ

539 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:14:21 ]
俺ならこうやって高速化するぜ

For i = 1 To n Step n
Next
和 = (1 + n) * n / 2

540 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:21:10 ]
すまんが教えてください

vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。

ExecWBとSendKeysでやってみたが上手く行かなかった。
やり方に問題があるのか、違う方法があるのか?

教えてください。

541 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:21:25 ]
おれならこうだな

for i = n to n
next

542 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 12:46:51 ]
速さならこっちかな?

For i = 1 To n
Exit for
Next
和 = (1 + n) * n / 2



543 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:08:40 ]
さすがにこれは反則だろうな

Goto aaa
For i = 1 To n
Next
:aaa
和 = (1 + n) * n / 2

544 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:21:48 ]
和 = (1+n)*n/2
Debug.Print 和

ループ

こうか!

545 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 10:22:29 ]
質問させてください。(Excel2003 XP)

ExcelでRS-232-C通信を行おうとしております。
大昔に一度、何かを見ながら自作したマクロを参考にやっています。
当時はMSCommを使用しておりましたので、同様にツールボックスから
MSCommをフォームに貼り付けると、
「サブジェクトは指定された操作に対して信頼されていません。」
と表示され、貼り付けることができません。

Webで調べると、どうやら
ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
を実行したことで使用出来なくなってしまったようです。
対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
削除して回るのも非現実的です。

MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
更新プログラムの削除や新たに何かをインストールしなくても使用できる
方法はないでしょうか?
また他にWinAPIで行う方法もありましたがこちらで行う方法が主流?
なのでしょうか?

よろしくお願いします。

546 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 13:10:43 ]

>ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
>を実行したことで使用出来なくなってしまったようです。
>対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
>削除して回るのも非現実的です。

>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?



自分で何言ってるか分かってる?

547 名前:545 mailto:sage [2009/10/31(土) 15:21:48 ]
>546

失礼しました。

>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?

MSCommのようなコントロールが分かりやすくて簡単ですのでこの様なコン
トロールを使用したいのですが更新プログラムの削除やフリーのアドインなど
をインストールしなくても使用できる方法はないでしょうか?
(MS系の更新インストールや代替コントロールのインストールは可)

WinAPIはサンプルを見てもまださっぱり理解できないので出来れば避け
たいのですが、今から作るのであればコントロールではなくWinAPIで行う
べきでしょうか?

よろしくお願いします。


548 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 19:18:22 ]
MSCommを使いたいなら対策は「ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)」を削除


549 名前:デフォルトの名無しさん mailto:sage [2009/10/31(土) 19:33:45 ]
セキュリティパックとは、古く多少リスキーでありながらも
公開されていたDLLとかの機能を殺してしまってモノシリッ
ク化しつつある疑似カーネル群のコードを間接的に使うように
することだったんでつね

550 名前:デフォルトの名無しさん [2009/11/02(月) 11:29:29 ]
>>545
ttp://ziddy.japan.zdnet.com/qa5065179.html
これはどう?

551 名前:545 mailto:sage [2009/11/02(月) 22:21:47 ]
>550

ありがとうございます。
投稿前にこれも試したのですがVB6が入ってないから
ダメと言われました。

WinAPIに挑戦してみます。
ありがとうございました。

552 名前:デフォルトの名無しさん [2009/11/03(火) 05:55:57 ]
>>551
EasyCommというモジュールを使うと、素人の自分でも簡単に機能実現出来ました。



553 名前:デフォルトの名無しさん [2009/11/03(火) 13:19:49 ]
>>551
VB6のSP6のruntimeのみってvectorとかに無い?
#自分はsp5の使ってるけど

554 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 13:36:56 ]
Vector のダウンロード数が一番になってるランタイムって、
コメント読んだらシステム破壊の事が書かれてて怖いわw

俺は昨日ソフト更新系のサイトでコレを発見したので入れてみた。

ttp://www.hmpage.jp/vb6rtest.htm

セットアップがVB6のプロジェクトのタイプなので、インストール後に
アンインストールして、ライブラリ類は全残しでいけた。

555 名前:デフォルトの名無しさん mailto:sage [2009/11/03(火) 14:58:37 ]
Frameworkさえいれておけば.NETの機能って使えるんだな
最近知ったけどStringBuilderとか使えて便利だ

556 名前:デフォルトの名無しさん [2009/11/03(火) 15:35:51 ]
>>555
知らんかった・・・・・
#まともなhash使えるとかなりうれしいなぁ

557 名前:デフォルトの名無しさん [2009/11/04(水) 21:19:25 ]
AOD.NET って使える?

558 名前:557 [2009/11/04(水) 21:20:45 ]
訂正
ADO.NET

559 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 22:32:00 ]
VBAで使えるのはADOであってADO.NETは使えないんじゃなかった?
俺は2007だけどADOでアクセス(という言い方でいいか)してる。


560 名前:デフォルトの名無しさん mailto:sage [2009/11/04(水) 23:40:03 ]
CreateObjectでインスタンスを無理やり生成してやれば使えるんじゃね
まぁ、そこまでしてやるもんでもないと思うしVSTOでも検討した方がいい

561 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:08:12 ]
以前お世話になりました270です。
ネット検索で検索ヒット件数を取得し
A1A2・・・にある単語の件数をB1B2・・・に記録したいのですが、
グーグルでは取得拒否にあってしまい、ヤフーで挑みたいのですが、
送信するのに文字を %5%7 とかにしないといけない(どういうキーワードに
つなげるかもわからない)みたいなのですが、
この送信ワード yahoo.co.jp/search??????? %5%6
とかの、?????と 文字の変換方法を教えていただける方いらっしゃいませんでしょう
か?

562 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:13:04 ]
アタックはやめろ



563 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 09:39:23 ]
yahooのデベロッパーのサイトでは一日5万まで使って開発してくれ
というのです。別段500でもいいから自動化させたいのですが・・・
そこには例文がなくて・・・どこかにフォーラムでもないでしょうか?

developer.yahoo.co.jp/webapi/search/websearch/v1/websearch.html

564 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 11:05:12 ]
Yahoo! JAPAN Web APIはあきらかにスレ違い

565 名前:デフォルトの名無しさん [2009/11/07(土) 17:28:03 ]
excel vbaで他のブックのセルデータを参照するにはどうすればよいの?

566 名前:デフォルトの名無しさん [2009/11/07(土) 17:30:07 ]
上、ちなみにexcel2003です。
Workbooks(“ブック名.xls”).Worksheets(“シート名”).Activate
これをやっても、インデックスが有効範囲にありませんが出ます。
どなたかお願いします。
     

567 名前:デフォルトの名無しさん [2009/11/07(土) 18:13:11 ]
フォームのTextboxにドラック&ドロップで任意の列データを持ってくることはできますか?
やりたいことは、2つの異なるブックのフォームの列データーを他のブックの列データーと比較をしたいのです。



568 名前:デフォルトの名無しさん mailto:sage [2009/11/07(土) 20:06:01 ]
>565-567

つマクロの記録

569 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 00:28:16 ]
B列に1万近くの数値があり、そこから特定の範囲(例えば100〜101など)に適した数値を
指定したセルに抽出し、複数ある場合はそのしたに並べて抽出するようなプログラムを作りたいのですが、
どのようにしたらよいでしょうか?

Excel2003です

570 名前:デフォルトの名無しさん [2009/11/08(日) 00:32:48 ]
VBAでRSSの読み込みって出来ますか?

571 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 09:22:15 ]
>>570
こんなとこで聞くよりgoogleで「VBA RSS」で検索すれば
よっぽど早く結果に到達できますよ。その上でわからないことを
質問したほうが効率的では?

572 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 09:57:39 ]
>>569
import sys, os
import win32com.client

def main(from_s, from_e, to, rng):
if from_s[1] != from_e[1]:
print 'error'
return
if rng[0] > rng[1]:
print 'error'
return
pwd = os.path.abspath(os.curdir)
xls = win32com.client.Dispatch('Excel.Application')
try:
wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls'))
sheet = wb.Sheets(1)
c = 0
for row in range(65535):
if row >= from_s[0] and row <= from_e[0]:
v = float(str(sheet.cells(row, from_s[1])))
if v >= rng[0] and v <= rng[1]:
sheet.cells(to[0] + c, to[1]).value = v
c += 1
wb.SaveAs(os.path.join(pwd, 'testout.xls'))
wb.Close()
except:
print sys.exc_info()
finally:
xls.Quit()

if __name__ == '__main__':
main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-



573 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 10:00:45 ]
インデント消えてた orz
import sys, os
import win32com.client

def main(from_s, from_e, to, rng):
  if from_s[1] != from_e[1]:
    print 'error'
    return
  if rng[0] > rng[1]:
    print 'error'
    return
  pwd = os.path.abspath(os.curdir)
  xls = win32com.client.Dispatch('Excel.Application')
  try:
    wb = xls.Workbooks.Open(os.path.join(pwd, 'test1.xls'))
    sheet = wb.Sheets(1)
    c = 0
    for row in range(65535):
      if row >= from_s[0] and row <= from_e[0]:
        v = float(str(sheet.cells(row, from_s[1])))
        if v >= rng[0] and v <= rng[1]:
          sheet.cells(to[0] + c, to[1]).value = v
          c += 1
    wb.SaveAs(os.path.join(pwd, 'testout.xls'))
    wb.Close()
  except:
    print sys.exc_info()
  finally:
    xls.Quit()

if __name__ == '__main__':
  main((10, 2), (20, 2), (3, 5), (99.0, 1000.0)) # B10-B20 -> E3-

574 名前:デフォルトの名無しさん [2009/11/08(日) 10:44:08 ]
2003 初心者です。
ワークシートイベントで処理を抜け出すのはどうすれば・・
一度だけ計算させたいんですが。どこかで見た気がするのに探せない。


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Target.Column = 1 Then
Target.Value = Target.Value + 1
'この後どうすれば・・・・
End If
End Sub

575 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 11:14:38 ]
>574

どっかのセルに実行済みをセットすれば?

576 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 12:57:57 ]
>>574
Application.EnableEventsを使うが、実用になるChangeイベントを書くのはかなり難しいよ。
あきらめた方がいいと思うな。
真っ先に考えられる不具合は消した場合でも1になったりすることだな。
問題はこれだけじゃないからかなり難解。

577 名前:デフォルトの名無しさん [2009/11/08(日) 13:35:30 ]
>>575-576
どもです。そもそも無茶なことか・・・
初心者ゆえに「出来る・出来ない」が良くわからない

ありがとでした

578 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 14:05:32 ]
staticでも使え

579 名前:デフォルトの名無しさん [2009/11/08(日) 17:28:43 ]
シート起動時に、フォームを出してそれを10秒後で消す。
その10秒の間に、フォーム内のTextboxの値を
ユーザーの任意で変更できるようにと考えましたが、
タイマーしてる間、フォームが白く固まって値変更ができません。
何か改善策はありますでしょうか。2003です。

Private Sub UserForm_Activate()
Dim MyWaitTime As Date
'10秒後に閉じる場合
MyWaitTime = TimeSerial(Hour(Now()), Minute(Now()), _
Second(Now()) + 10)
Application.Wait MyWaitTime 'マクロを指定の時間まで停止
Unload.対象日数の入力フォーム 'UserFormを閉じる
End Sub

580 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 17:44:47 ]
イベントループ拾わんといかんだろ

581 名前:デフォルトの名無しさん [2009/11/08(日) 17:45:47 ]
C言語側で扱うためのバイナリファイルをVBAで出力していて
整数値は除算や剰余算を用いてバイト型配列に代入して出力しているのですが、
浮動小数値(単精度)をバイト型配列に含める場合にどう処理すればいいのか分からず困っています。
良い解決策をご教授頂ければ助かります。


582 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 18:10:19 ]
ttp://program.station.ez-net.jp/special/vc/atl-com/variant.asp
ttp://www.hi-ho.ne.jp/babaq/bstr.html
ttp://piza.2ch.net/log/prog/kako/947/947909317.html
support.microsoft.com/kb/167668/en-us/



583 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:34:13 ]
>>581
配列に入れる理由がファィル出力のためだけなら、いちいち配列など使わずに
ファイルをBynaryモードで開いて整数も実数もそのまま出力してしまえばいい。
ただし、実数の内部表現が異なる場合は使えない。

どうしてもVBAの中で1バイトずつ取り出す必要があるなら、
Win32APIのMoveMemoryを使うぐらいしか方法がない。

584 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 20:42:51 ]
#ファイル番号 でファイルにバイナリアクセスしている時に、
ストリーム位置を取得する方法を教えてください。
(Cのftell()相当の操作)

585 名前:584 mailto:sage [2009/11/09(月) 21:06:44 ]
自己解決しました。
Seek( ファイル番号 ) で取得できました。

586 名前:デフォルトの名無しさん [2009/11/10(火) 15:17:54 ]
Private Sub UserForm_Initialize()

Dim lastRow As Long
Dim ReturnBook As Workbook, TargetBook As Workbook
Set ReturnBook = ActiveWorkbook
Application.ScreenUpdating = False
Set TargetBook = Workbooks.Open("D:\test\sample.xls")

With TargetBook.Sheets("Sheet1")
' ListBox1.ColumnHeads = True
Me.ListBox1.List = .Range(.Range("B2"), .Cells(.Rows.Count, 2).End(xlUp)).Resize(, 2).Value

ReturnBook.Activate
Application.ScreenUpdating = True
TargetBook.Close
End With
End Sub

削除区分  コード 商品名
0    1001 りんご
1  1002 みかん
0    1003 バナナ

こういう風な外部ブックに対して削除区分が1のデータをリストボックスに
表示しないようにするにはどうすればいいですか?教えてください


587 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:44:43 ]
b.hatena.ne.jp/articles/200911/553
会社の仕事でマクロを組むのはズル? 事務作業の効率化に意見さまざま


588 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 23:48:02 ]
マクロを組むのはズルじゃないが
他人が作ったマクロを勝手に使って
仕事を早く終わらせるのはズルだと思う
少しはリスペクトなりインセンティブなり気を使えと

589 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 15:13:14 ]
その理屈でいくとPCも電卓もせめて一度は作ってから使えということになるが

590 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 15:25:27 ]
その理屈でいくと家も会社もせめて一度は作ってから住め(従事)ということになるが

591 名前:デフォルトの名無しさん [2009/11/11(水) 22:10:44 ]
シート2の表を、シフト+編集で図のコピーを行い、シート1に貼るマクロを組みましたが、
そのシート1の貼りつけた図のコピーを切り取るマクロを組むと、ピクチャー番号が異なるために、できません。どうすれば、解決できますか?

592 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:21:57 ]
以下のような動作をするマクロって、VBAで作成できますか?
(実現可能性だけ教えて頂ければ、自力でどうにかしたいと思います)

・処理内容
 Outlook2007で、
 特定の件名がついたメールは、メール内容表示の際にボタンを出現させて、
 ボタンを押すことでExcel2007にメールの内容を転記させる。
 例えば、以下のような感じです。

 ■Outlook
  件名:○○見積書
  メール内容:
  ○○費 \50000
  △△費 \100000
   ―――-
  |ボタン|←ポチっとな
   ―――-
 
 ■Excel
  A1セル:○○費
  A2セル:\50000
  B1セル:△△費
  B2セル:\100000
  が転記される
 
 




593 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:23:58 ]
できるっちゃできる

594 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:28:37 ]
シート上に下記のパラメータで長方形のオートシェイプを作りたくて書いたVBAです

Sub 四角形2()

Dim MyShape As Shape
Set MyShape = ActiveSheet.Shapes.AddShape(msoShapeRectangle, 40, 425, 355, 90)

With ActiveSheet.Shapes.Range(MyShape.Name)
.Fill.Visible = msoTrue
.Fill.Solid
.Fill.ForeColor.SchemeColor = 10
.Fill.Transparency = 0.5
End With

End Sub


しかし実際にはWith内で指定したパラメータは常に共通で
位置と大きさのみ違う複数のケースでの長方形を作りたいのです。

With〜End WihtをPrivateFunctionに書いて、MyShapeの値を変えて参照させれば良いですか?

あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?

595 名前:デフォルトの名無しさん [2009/11/12(木) 19:57:22 ]
質問です。
あるフォルダに入っているテキスト形式のデータ10個を
エクセルで開いていくVBAのプログロムを書いている
のですが、エラー文で「データ_i.txtがありません」と表示されます。
私の書いたプログラムは下記です。

Sub テスト()
テスト Macro
Dim i As Integer

For i = 0 To 5
ChDir "C:\Documents and Settings\データ"


Workbooks.OpenText Filename:= _
"C:\Documents and Settings\データ\_i.txt" _
, Origin:=932, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, 1), _
TrailingMinusNumbers:=True
Next i
End Sub

このプログラムの目的は、テキストデータの入っているフォルダを
他の名前に変更したときも、その中に入っているテキストデータ10個を
エクセルで展開するためです。おそらく
"C:\Documents and Settings\データ\_i.txt"のiの部分が間違えていると
思うのですが、どうすればいいでしょうか?よろしくお願いします。

596 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:10:08 ]
知らんがな(´・ω・`)

597 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:32:33 ]
"C:\Documents and Settings\データ\_" & i & ".txt"
としてやらんといかんのとちゃうかな

598 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 20:34:03 ]
>595

データさんか?
普通はそこにアカウント名が入るんだが。

まさかとは思うがi.txtのiって・・・w

599 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 21:00:42 ]
>>このプログラムの目的は、テキストデータの入っているフォルダを
>>他の名前に変更したときも、その中に入っているテキストデータ10個を
>>エクセルで展開するためです。

(・ω・`)???

600 名前:595 [2009/11/12(木) 21:12:37 ]
みなさんアドバイス感謝です!

説明不足ですみません。

質問ではテキストデータと書きましたが、.datで保存されています。

フォルダの中に「_0.dat」「_1.dat」「_2.dat」…というデータが10個あります。

ほんとは10個開きたいのですが、とりあえず5個開けたら5を10に直せばいいかなと

思ってます。

>>597さん

\データ\_"&i&".dat"としましたが、コンパイルエラーになります。

dat形式のデータは無理なのでしょうか?


601 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 21:18:41 ]
"C:\Documents and Settings\データ\_" & i & ".txt" _

死ね >>600

602 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 23:40:30 ]
597見てダメなら何聞いてもダメだろ
スペルミスとかスペース抜けとかで質問されても困る



603 名前:デフォルトの名無しさん [2009/11/12(木) 23:56:23 ]
Range("G1").Select の
1をfor文使って
1〜100までするにはどうすればいいでしょうか?

For n = 1 To 100
Range("D&n&").Select
だとエラーになります

604 名前:デフォルトの名無しさん [2009/11/12(木) 23:59:00 ]

Range("G1").Select ×
Range("D1").Select ○

605 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:00:00 ]
Range("D" & n).Select

あるいは

Cells(n, 4).Select

606 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:06:08 ]
>>595>>603は同じヤツか?

根本的に・・・

607 名前:デフォルトの名無しさん [2009/11/13(金) 00:09:35 ]
ActiveCell.FormulaR1C1 = "=-(R[+&n]C[-2]-R[-4]C[-2])"

R[+&n]を引数にする場合はどうでしょうか?

608 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:49:12 ]
もはやネタだろ

609 名前:デフォルトの名無しさん [2009/11/13(金) 00:53:26 ]
ネタじゃないです><
ActiveCell.FormulaR1C1 = "=-R["&n&"]C[-2]-R[-4]C[-2]"
とかやってみたんですがダメでした

610 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 01:02:20 ]
寝たとしてもまったく面白くない
もっと回答したくなるように質問しろ

611 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 01:03:42 ]
>>594

AddShapeの引数を変数にして全体をループさせるだけでいいのでは?
共通パラメータをわざわざ関数にする必要はないと思う。

>あと自分で書いておいてなんですが(MyShape.Name)は何を表すんでしょう?
ShapesのRangeプロパティは、指定したShapeのオブジェクトを返す。
この"指定した"というのが今回の場合はMyShape.Nameとなる。

正直わかりにくいし、Rangeなんて使った事無い。
With ActiveSheet.Shapes(MyShape.Name)
もしくは
With MyShape
このどちらかが一般的だと思ってるがどうだろうか。

>>607
>>595>>603に続いて同じ失敗をしている。
>>597を参考にして考えればわかる。

612 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:51:53 ]
変数使ってセル座標の指定するなら、cells使った方が楽だと思ってる。



613 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 10:57:30 ]
その方が速い

614 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 14:43:25 ]
すまんが教えてください

vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。

ExecWBでやってみたけど上手く行かなかった。
SendKeysもいまいちだったし、出来るならやりたくない(違う作業が出来なくなるため)
やり方に問題があるのか、違う方法があるのか?

教えてください。

615 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:44:29 ]
・自分に何かしら不幸な出来事が起きたとき、落ち込んでしまうのは仕方のない話。ショックが大きいほど、
 人前に姿をさらすのも苦痛になるものだが、そういうときの行動こそ、人間の大きさが見えるものかもしれない。

 米シカゴに住む34歳のティアン・ハリスさんは、 10月31日に幸せな花嫁となる予定が、6日前になって相手の
 男性から突然結婚の中止を告げられてしまった。式直前でのまさかの事態だが、さらなる追い打ちを
 かけられてしまう。慌てて母親と一緒にパーティー会場にキャンセルを申し出ると、もう返金は不可能と
 言われたそう。駐車場に座り込み落ち込むハリスさんと、なす術もなく見守る母親。そのとき、向かいに
 あった老人ホームを目にして良いことを思いついた。

 どうせ無駄にするならと、2人は向かいの老人ホームの人たちとパーティーを開こうと決断する。
 「寄付をしたい」とハリスさんが飛び込んだ老人ホームの施設長は、「彼女はここにいる誰も知らないだろうし、
 そんなオファーも受けたことない」(米紙ニューヨーク・デイリーニュースより)と驚いた。かくして、ハリスさんの結婚パーティーは、
 老人ホームのハロウィンパーティーへと変更。お年寄りたちも、思いもよらぬイベントを大いに喜んだという。

 300人近いお年寄りは思い思いに仮装して、ダンスに興じた。あるお年寄りは「とても楽しい時間だった」
 (米放送局CBSより)と語り、老人ホームに素敵なひとときをもたらしたハリスさんに感謝している。施設長も
 「彼女はどこからともなくやってきて、私たちに美しいパーティーを与えてくれた天使」とハリスさんを讃えた。

 会場の傍らでお年寄りの笑顔を見て満足したというハリスさんだが、本当なら自分が主役になるはず
 だったパーティーにやはり心境は複雑だったよう。母親も「会場で、皆さんの前にいるのが娘だったら
 よかった」と無念さを語り、施設長も「彼女は落ち込んでいたと思う」とハリスさんの心中を慮った。
 しかし、そうした中でもお年寄りたちに幸せな時間を与えたハリスさんの人柄に、施設長は「神は彼女を祝福し、
 きっとほかに良い人を見つけられる」と太鼓判を押す。

 ハリスさんは11月2日に、新婚旅行となるはずだったハワイへ1人で旅立ったそう。花嫁になり損ねてしまった
 ハリスさんだが、彼女が取った決断が多くの人に幸せを与えただけでなく、少なからず自分への励みに
 なったことを願いたい。(抜粋)
 www.narinari.com/Nd/20091112560.html

616 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:49:15 ]
なげーよ 2行でギブw

617 名前:デフォルトの名無しさん [2009/11/13(金) 19:33:04 ]
質問です。
10ページある文書のうち、例えば2、5、7ページだけを印刷したい場合、


Sub 印刷()
Worksheets("文書").PrintOut from:=2, to:=2
Worksheets("文書").PrintOut from:=5, to:=5
Worksheets("文書").PrintOut from:=7, to:=7
End Sub


と、やるのでしょうか?
なにかもっと良い方法がありそうな・・・
OSはVISTA、バージョンは2007です。

618 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 21:27:48 ]
Sub 印刷()
Worksheets("文書").PrintOut pages:=2,5,7
End Sub


619 名前: [2009/11/13(金) 22:01:06 ]
質問させて頂きます。
A1からA100に1から10の数字を入力するマクロを作成
していますが、無限ループになってしまいます。。

どのようにすればよろしいでしょうか?

Sub Ary()
Dim Arow As Long
Dim i As Long

For i = 1 To 600
Cells(i, 1).Value = i
If i = 10 Then
i = 1
End If
Next i

End Sub

620 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:26:21 ]
>>619
個人的には
>For i = 1 To 600
に突っ込みたいが、まじめに答えるとi=10の時にi=1にしろって指示してるので
i=1 → 10 → 1 → 10 → の無限ループになってる
1,2,・・・10,1,2,・・・ と繰り返したいなら cells(i,1)=i%10 みたいに余りを計算すれば良い
(余りの計算は %じゃなくてmodとかかも知れない。忘れた)

621 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:27:52 ]
ごめん
10で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ


622 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:57:12 ]
>>619
カウンタ変数(i)をForループの中で書き換えるのは可能な限り避けた方がイイ
何回回ったかわかんなくなっちゃうよ



623 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:02:36 ]
【科学】道路に軍手が落ちているワケ、名城大研究チームが突き止める[09/11/05]

namidame.2ch.net/test/read.cgi/hidari/1257990721/




624 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 00:51:45 ]
>>620
Dim Arow As Longに突っ込めよ

625 名前:デフォルトの名無しさん [2009/11/14(土) 04:51:06 ]
e = "& mi &" + 5 * "& c &" - 5

mi、c は変数です。
何がいけないのでしょうか?

626 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 05:13:52 ]
お前は2chに書き込んではいけない

627 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 07:43:48 ]
e = mi + 5 * c - 5
じゃダメなの?

変数が文字列の中に含まれちゃってるよ。
ただのmiって文字列としか認識されない。


628 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 08:59:38 ]
>>619
Sub Ary()
Dim Arow As Long
Dim i As Long
Dim j As Integer

j = 1
For i = 1 To 600
Cells(i, 1).Value = j
j = j + 1
If j > 10 Then
j = 1
End If
Next i

End Sub
こんなものでどないでしょう。

629 名前:デフォルトの名無しさん [2009/11/14(土) 09:49:32 ]
Arow ってなんだ

630 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:04:03 ]
正解(>>620-621)が出た後にボケ回答(>>622 >>628)が出てくる、の法則

631 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:12:07 ]
自分よりいい答えが出たのがそんなに悔しかったのか

632 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:15:19 ]
(;゚д゚)ァ



633 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:49:33 ]
>>619
Sub Ary()
Dim Arow As Long
Dim r As Range

For Each r In Range("A1:A100")
r.Value = r.Row Mod 10
Next r

End Sub
こんなものでどないでしょう。

634 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 10:50:58 ]
ごめん
10で割って余りだと0,1,2,・・・,9,0,1,・・・ってなるから1足せ


635 名前:デフォルトの名無しさん [2009/11/14(土) 11:01:07 ]
.Formular1c1="=Average(R["& c &"]C["& d &"]:R["& c+2 &"]C["& d+2 &"])"

のようにRCの中に変数を入れたい場合はどうすればいいのでしょうか?

アドバイスお願いします

636 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 11:07:03 ]
馬鹿発見

637 名前:デフォルトの名無しさん [2009/11/15(日) 01:17:24 ]
四択問題を作っています。

Public Seikai As Integer, i As Integer, Ruiseki As Integer
Sub Quiz()
Dim Det As String
i = 1
Ruiseki = 0

Do

Det = Sheets("Sheet3").Cells(i, 1)
If Det = "" Then Exit Do
UserForm1.Show
i = i + 1

Loop While Det <> ""

UserForm2.Show
'MsgBox "正解は" & Ruiseki & "問です。"

End Sub

sheet3のA列に問題番号、B列に問題、C列に正解番号を入れています。
問題は50問作ったのですが、この中から20問をランダムに表示する
ようにしたいのですが、どのようにしたらいいかわかりません。
今は、50問全て順番に表示されてしまう状態です。
教えてください。
よろしくお願いします。

638 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 01:45:55 ]
RAND()で適当な番号をふって並び替えて上から20問をつかう

639 名前:デフォルトの名無しさん [2009/11/15(日) 13:25:55 ]
>>618
ありがとうございます!
助かりました。

640 名前:637です [2009/11/16(月) 00:26:37 ]
>>638
マクロを具体的にどう変更したらいいかおしえてください…

641 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 08:16:40 ]
>>640
例えば、D列に乱数で適当な数字を振る
D列を見て数の大きい順に20問を出題する

そこまで自分で作ったのなら、これくらいできるだろ?
宿題なら自分でどうぞ

642 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:18:19 ]
マクロが
A
B
C
D
こうあったとして、全てのマクロを実行するマクロを作るにはどうやったらいいですか?



643 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 11:26:37 ]
全てのマクロを呼び出すマクロを作ればいいだけだろ

644 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 16:52:03 ]
Sub all_execute()
A
B
C
D
End SUb



wwww


645 名前:デフォルトの名無しさん [2009/11/16(月) 20:20:05 ]
私は基本C/C++のPGです。業務でVBAの面倒を見ることになりそうなんですが、
言語仕様がコンパクトにまとまってるような本はないでしょうか?

VBAの仕様なんてたかが知れてるかもしれませんが、分厚い本やWEBサイトをいったりきたりするのは面倒だし
言語に自分の知らない部分があるというのが気持ち悪い性分なので、まとまってる本を探しています(WEBでもいいのですが)

・プログラミングの知識前提で、
・ペラッペラの単色刷りで
・言語使用だけは満足してる
オライリーのクイックリファレンスのVBA版みたいなのが理想です(探したけどなかった)。

VBAの解説本だとプログラミング未経験者向けの、カラフルで妙に分厚い本が多いような気がするのですが
私としてはクイックリファレンス的な本が理想なので…
お勧めの本などあれば教えてください。

646 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:17:54 ]
VBA辞典

647 名前:デフォルトの名無しさん mailto:sage [2009/11/16(月) 22:23:14 ]
>>645
マジレスだけどリファレンスとしてはオンラインヘルプ一択
結局ヘルプ以上にならないから初心者向けの分厚いカラー刷りになる
紙がよければ死ぬ気で全部印刷


648 名前:637です [2009/11/17(火) 00:26:19 ]
>>641
RAND()で、
B列とC列のくみあわせは変わってしまうことは無いのですか?

649 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 00:28:24 ]
>>648

ここはマ板ですよ?

650 名前:637です [2009/11/17(火) 00:38:30 ]
>>649
死ねクズ

651 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 00:39:17 ]
>>648
おまえの前にある箱の向こうにも人がいるんだぜ
>>638>>641 も的確な回答してるじゃん
それに対して、あーじゃない、こーじゃない、って・・・
更に質問するんだったら

ありがとう御座います。ヒントを基に組んでみたら、こんな動作をしました。
ここが怪しいと思うので、調べたり試行錯誤したのですが、こんなエラーが出てしまいます。
何かアドバイス頂けないでしょうか?

くらい書いたほうがいんでね?

なんとなくムカつく文章だったので勢いで書いた

652 名前:デフォルトの名無しさん [2009/11/17(火) 00:56:42 ]
的確?



653 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 01:01:43 ]
>>652
的確だと思うぞ。

654 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 08:15:19 ]
>>653

俺も的確だと思うけどな。
質問する側のレベルが低いんだろw


655 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 08:40:16 ]
おまいらココ逝って正しいRANDの使い方教えてきやがれ
www.nicovideo.jp/watch/sm8517855

656 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 09:03:50 ]
【社会】スーパーコンピュータ向け「Excel」開発中 - Microsoft
tsushima.2ch.net/test/read.cgi/newsplus/1258414484/

657 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 11:57:24 ]
A2〜A20000ぐらいまで誕生日(シリアル値)が入っています
B列に年齢を出したいときは、どういう計算をすれば軽くなるでしょうか?
古いPC(win95)なのでものすごく時間がかかっています
他のマクロでも応用したいので、教えてください
お願いします!

658 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 17:49:46 ]
関数にdatedifってのが有るから

=DATEDIF(A2,TODAY(),"y")

で済むと思うけど、どうしてもVBA上から使いたいならworksheetfunctionを付ければ?



659 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:25:58 ]
ワークシートに関数を沢山入れると重くなる、という意味に解釈して
VBAにて
Range("B2").Value = DateDiff("yyyy", Range("A2").Value, Now)
を必要行だけ繰り返す

660 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:54:25 ]
>>643-644
単純に考えればいいってことがわかった気がする
どうも

661 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 22:22:18 ]
>>660
他のファイルとかに書いてあるのを呼ぶときはスコープが問題になることがあるから気をつけてね
Public宣言付けたり、参照設定したりとか

662 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 09:58:30 ]
ハイパーリンクに関する質問です。
例えばセルA1に何か文字列が入っている状態で
セルA2に以下のシート関数が入っているとします。
=IF(A1="","",HYPERLINK("www.yahoo.co.jp/","Yahoo"))
そうすると、セルA2には"Yahoo"の文字列が表示され
"www.yahoo.co.jp/"へのリンクが張られている状態です。

ここで、VBAにより、リンク先である"www.yahoo.co.jp/"の文字列を
取得する方法はあるのでしょうか?
セルA2に設定されている関数の文字列を解析するという手もあるとは思いますが、
それ以外で方法はあるのでしょうか?




663 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 14:09:25 ]
あるんじゃない

664 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 14:14:34 ]
>>658-659
とてつもなく軽くなりました、ありがとうございました!


665 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 16:45:42 ]
>>664
>>658の数式でも軽くなったの?
もし重かったら揮発性関数のTODAY()のせいだな。
どこかのセル、たとえばF1にCtrl + ;で今日の日付を求めて
=DATEDIF(A2,$F$1,"Y")とすれば数式でも軽くなるかもよ。

666 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 22:41:02 ]
1日か31日までの1ヶ月分のシートがあるとします
それぞれのA1セルに日付をいれてます
この1ヶ月分のシートの月曜日と火曜日だけを対象してなんらかの処理を行いたいときはどのような方法を取ればいいでしょう?
よろしくお願いします

667 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 23:30:02 ]
1日か31日までってことは
1日の場合は前月の2日から一か月分って言う意味?

668 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 23:32:15 ]
>>666
for each collectionでシートに対してループ回して
その中でA1セルを調べて、曜日をチェック
で、なんらかの処理を行えばOK

669 名前:666 mailto:sage [2009/11/18(水) 23:36:40 ]
失礼しました
1日から31日までの31シートです

>>66
ぐぐってみます8

670 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 09:19:43 ]
ワード・アクセスのVBAスレってありませんか?

671 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 09:24:37 ]
pc12.2ch.net/test/read.cgi/tech/1170492587/
pc12.2ch.net/test/read.cgi/tech/1243095768/
pc12.2ch.net/test/read.cgi/tech/1168427595/
pc12.2ch.net/test/read.cgi/tech/1242136180/

672 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 11:42:02 ]
ありがとうございます
検索しにくいっす・・



673 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 19:46:28 ]
WordのVBAはどういうときに使うんだ?

674 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 20:13:37 ]
時節柄考えられるのは
年賀状宛名流し込み印刷かな

675 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 20:27:20 ]
それVBAいらないやん

676 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 21:46:41 ]
差し込み印刷なんかExcel VBAでも同等のことするの簡単だよな。

677 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 21:49:26 ]
A1セルに1月1日(月)のように入力しています
ここから特定の曜日(火曜日と日曜日など)を区別して処理をおこないたいのですが
どのような方法を取ればよいのかご教授ねがいます

678 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 22:10:09 ]
>>677
おまえ666だろ
曜日を調べる関数を使う
関数名は自分で調べろ
以上

679 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 22:43:03 ]
そもそも1月1日(月)って入力するのが間違いだ罠。
1/1と入力して表示形式をm月d日(aaa)にするだけだ。

680 名前:デフォルトの名無しさん [2009/11/20(金) 05:56:15 ]
質問
教えてえろい人
エクセルのVBAを使って、Outlookメールを複数の人に自動送信操作をさせたいです。
Aさん(○○○@○○.co.jp)にエクセルSheet1に記載された内容を送信し、
Bさん(XXX@XX.ac.jp)にエクセルSheet2に記載された内容を送信します。
後、CさんにエクセルSheet3を・・・という具合に・・・
以上の事が、エクセルVBAを使って1回だけマクロを走らせるだけで、できるでしょうか?



681 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 07:34:40 ]
ユーザーフォームのlistviewについて質問です
listviewで縦横のスクロールバーのやり方が分からないのですが
どうすればうまくいくでしょうか?

682 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 11:22:46 ]
>>680
できるでしょうね



683 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 11:48:16 ]
てst

684 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 21:52:10 ]
>>680
ExcelのよりOutlookのVBA使ったらどうよ?

685 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 22:27:51 ]
同一セル内の数字を下のように並べかえたいのですがどうすればいいですか?
「333      「111
 111   ⇒   333
 555」      555」

3桁ずつ切り分けて別セルに出力、ソートをかけて並べかえるというものは
出来たのですが、出来ればマクロの中だけで処理をしたいんです。

686 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 23:13:54 ]
>>685
安直だけど、例えばセルA1を対象とするならこんな感じ

Sub Macro1()
a = Split(Range("A1").Value, Chr(10))
For i = 0 To UBound(a) - 1
For j = i + 1 To UBound(a)
If a(i) > a(j) Then
tmp = a(i)
a(i) = a(j)
a(j) = tmp
End If
Next j
Next i
Range("A1").Value = Join(a, Chr(10))
End Sub


687 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 23:17:11 ]
こんにちわ。
質問をさせてください。

正規表現でのマッチパターンを用いて、
文字列をSplitして配列に入れたいと考えています。
以前javaで行った時は問題無く出来たのですが、
VBAの場合には上手くパターンを認識してもらえません。
下のコードで行ったのですが、”スペース”or","の1回以上の繰り返しでSplitを目的としています。

Sub testVBA()
Dim Reg As Object
Dim regPattern As String
Dim reMatch As Object
Dim i As Integer
Dim STR As Variant

Set Reg = CreateObject("VBScript.RegExp")
Reg.Pattern = "[ ,]+"
STR = Split("moug MOUG,モーグ,,もーぐ", regPattern)
For i = 0 To UBound(STR)
Debug.Print (STR(i))
Next
End Sub

続きます。

688 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 23:17:20 ]
javaのコードは下で行いました。

import java.util.regex.*;
public class testJava {
public static void main(String[] args) {
Pattern pattern = Pattern.compile("[ ,]+");
String[] strs = pattern.split("moug MOUG,モーグ,,もーぐ");
for (int i=0;i<strs.length;i++) {
System.out.println(strs[i]);
}
}
}

VBAで出来るのであればやり方を教えてくださいませ。
VBAでは対応していないと言う事でも構いません。
何卒よろしくお願いします。

689 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 23:18:42 ]
すいません・・・。
モーグで質問しようとして準備していた文書を張ってしまいました。
ちなみにマルチポストではありませんので、よろしくお願いします。

690 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 00:40:26 ]
>>687
VBAのSplitが正規表現を受付けないんじゃないの

s = "123 456 789"
ArySize = 0
Dim Ary()
Set re = CreateObject("VBScript.RegExp")
re.Pattern = "[ ,]+"
Do
ArySize = ArySize + 1
ReDim Preserve Ary(ArySize)
Set Matches = re.Execute(s)
If Matches.Count <> 0 Then
v = Left(s, Matches(0).FirstIndex)
s = Right(s, Len(s) - (Matches(0).FirstIndex + Matches(0).Length))
Else
v = s
End If
Ary(ArySize - 1) = v
MsgBox v
Loop While Matches.Count <> 0
MsgBox Join(Ary, "$")

691 名前:687 mailto:sage [2009/11/21(土) 08:37:43 ]
>>690
レスありがとうございました。
やはりVBSのオブジェクトですし、VBAのsplitが対応してないのは頷けます。
ソース例の提示、ありがとうございました。
自作関数で対応しようと思います。

重ね重ねありがとうございました。

692 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 10:02:39 ]
excel2007

ブックに変更が有った時に保存するようにしたいのですが、変更が有ったか無かったかのチェックって
どうするのでしょうか?

保存するのはThiworkbookの閉じる時で

Private Sub Workbook_BeforeClose(Cancel As Boolean)


End Sub

の中に入れれば良いのでしょうけれど。




693 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 11:15:06 ]
>>692
If WorkBook.Saved = False Then
  '保存処理
End If

694 名前:デフォルトの名無しさん [2009/11/21(土) 11:21:38 ]
>>693
thxです!

695 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 12:50:52 ]
WinVista-Excel2007

VBAでなくActiveXの問題かもしれませんが
VBAの編集中に起きた問題なのでコチラで。

先にActiveXのボタンを配置しVBAで記述したSub{}を実行するという簡単なものを複数作成していたのですが
5・6個作り終えいざ実行してみようとボタンを配置してあるワークシートを開こうとしたところ
ボタンは表示されずエラー(特定のエラー名表示されず)が起きExcelが強制終了してしまいます。

また新規作成でActiveXのボタンを新たに配置しようとしても同じ現象が起こりました。
アドインも複数導入している状態のためもしかするとVBAの可能性も捨てきれないのではと質問させて頂きました。

対処法・解決策はございますでしょうか?
宜しくお願いいたします。

696 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 13:18:23 ]
>>695
俺は何に原因がわかるかは知らないし、
ActiveXに関係ない話だが俺の話を聞いてくれ

Excel VBAでプログラム作ったんだよ。
クラスとかwitheventsとか使ってね。

そしたらなぜかExcelが強制終了するんだよw
いや、しないときもある。するときもある。
自分のマシンでは強制終了するのに、他のマシンでは動くとか
新しくExcel作ってソース全部移植したら直るんだよ。
でもしばらくするとまた強制終了するようになるんさよ。

原因さっぱりわかんねw
俺は思ったね。Excelで無理しちゃいけねぇ。
単純なマクロ程度で終わらせておくべきだって。

697 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 13:42:52 ]
>>695
起動時に強制終了するアドインでも作ったんじゃね?


698 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 14:51:42 ]
>696
わかる

699 名前:685 mailto:sage [2009/11/21(土) 15:14:26 ]
>>686
出来ました。
ありがとうございました。

700 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 16:15:33 ]
パチンコ店 ATM8000台 IIJ社 今後4、5年で全国に
www.jcp.or.jp/akahata/aik09/2009-11-14/2009111401_04_1.html
2chとパチンコ屋が無くなれば日本の景気は上向くかもな

701 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 18:55:37 ]
>>695 >>696
俺も似たような現象で悩んでいる。
アドイン複数入れて、VBAでプログラム作って2〜3回動かすのには問題ないんだが
しばらく使ってExcelを終了させると、
「問題が発生したため、Microsoft Office Excelを終了します。ご不便をおかけして申し訳ありません。」
とかいうふざけたエラーが出てくる。

俺の記憶が確かなら、
グローバル変数とか配列を大量に使いだした辺りでぶっ壊れた気がする。
メモリを開放しなきゃいけないとか、そういうことなのか???

702 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 19:05:46 ]
エクセルのブック自体が変なメモリリークをしてぶっ壊れるってのをよく聞くぜ。



703 名前:デフォルトの名無しさん [2009/11/22(日) 00:08:50 ]
>>680
MSのサイトにoutlook使ったメール送信のサンプル見つかると思うから
それを参考にしたら?
Accessに取り込んだ内容を登録したメアドにoutlook使って送信するPG
を昔作ったことがあるから、出来るはずだよ
ウイルス対策用(だろうなぁ・・)で1通単位でダイアログ押という仕様の
回避用のexeも見つかると思うから探してくれい


704 名前:デフォルトの名無しさん [2009/11/22(日) 14:29:02 ]
excel 2007
xp sp3

Sheet1のA1にSheet2を参照とした「=SUM(Sheet2!$A$2:Sheet2!$A$3)」を入れる為のマクロ、

Sub test()
Sheet1.Cells(1, 1).Formula = "=SUM(" & Sheet2.Cells(2, 1).Address & " : " & Sheet2.Cells(3, 1).Address & ")"
End Sub

ですと、Sheet1のA1には同一シートを参照とした「=SUM($A$2:$A$3)」となってしまいます。

"=SUM(" & Sheet2.Cells(2, 1).Address & " : " & Sheet2.Cells(3, 1).Address & ")"の部分を
"=SUM(Sheet2!$A$2:Sheet2!$A$3)"にすれば解決するのはわかっておりますが、
どうしてもcellsを使いたく質問させていただきました。
解決策がありましたら、宜しくお願いします。


705 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 14:39:40 ]
>704

突っ込み所がいろいろと・・・
本題は数式のINDIRECTで解決しそうな気がするが?

706 名前:デフォルトの名無しさん [2009/11/22(日) 14:51:06 ]
>>704
Sheet2.Cells(2, 1).Address
が何を返すかを考えればいいんじゃね?

Sheet2.Cells(2, 1).Addressって書き方をするのも珍しい.....

707 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 19:21:46 ]
プログラミング経験なしで興味を持ち趣味で覚えたいと思い色々考えた結果、
javascriptとvbscriptを学ぼうと思いました。入門するために言語について探しているうちに、
下記のようなことがしてみたいと思ったのですが、出来るのかということと、
もっと適した言語があるのかをご存知であれば助言くださるとうれしいです。

過去の株価を利用したシミュレーションプログラム。
具体的には、データとして興味のある某銘柄の日柄(日別に始値、高値、安値、終値、出来高)
を10年分オープンオフィスの表計算calcにyahooファイナンスから入手しました。
例えば、このデータを使って特定の日にその株を1000株買い、以降10円上がれば売り、売り値から
10円下がればまた買い、その買値より10円下がれば買い増し(仮の現金残高がなくなるまで)し、
それぞれは買値より10円上がると売る。
持ち株がなくなると、高値から1割下がったところからまた始める。
というようなことを繰り返すと、いくらの利益でいくらの買値ので
どれぐらい持ち株になった状態かを結果としてだすものです。

javascriptやvbscriptでも出来るのでしょうか、それとももっと別のスクリプト
言語の方が適しているのでしょうか?
よろしくお願いします。。

708 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 20:19:54 ]
何か変なヤツが迷い込んでるな〜

709 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 20:45:53 ]
>>707
ようは売買システムのバックテストしたいんだろ
できるよ

というか言語で出来ることが制約されるケースは少ない
もちろん得意、不得意はあるけど
ってことで好きな言語使いな
そして、このスレ以外に逝け

710 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 20:56:01 ]
>>707
ExcelVBAがいいんじゃないか?

711 名前:701 mailto:sage [2009/11/22(日) 20:57:29 ]
>>702
MSのバグかよ。

データはエクセルから取得して、処理は他(とりあえずDelphiを考えている)でやって、
結果をまたエクセルに返すかな・・めんどくさ・・

712 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 21:10:43 ]
うっはっっw

MSのバグ扱いかよw



713 名前:701 mailto:sage [2009/11/22(日) 21:26:24 ]
>>712
じゃあ原因は何なんだよ

714 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 22:12:12 ]
確かに、ウィンドウズもエクセルもMSだな。
そう考えたら、世の中で起きるバグの50%はMSのバグと云っても過言ではない。

715 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 22:31:13 ]
>>714
だがオレのPCのバグは99%オレのバグと言っても過言ではない

何度PCや開発ソフトのせいにして、その後取り下げたことか・・・

716 名前:デフォルトの名無しさん [2009/11/22(日) 22:41:02 ]
>>715
wwwww

717 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 23:50:32 ]
>>715
まぁ、シンタックスエラーなら仕方ないな。

718 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 10:52:45 ]
>>510-544
お前らwwwww
今更だけどツボったwwwww
そういうセンスがいるんだなコーディングって俺まだまだだわ。

719 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 11:34:44 ]
>>707
15マソぐらいとちょっと高いけど、検証くんなどソフトもあるぞ

720 名前:デフォルトの名無しさん [2009/11/23(月) 15:05:25 ]
excel2003

こんにちは

For Nextを使い、
セルE5、E6、E7へそれぞれ「H線」「L線」「中心線」という文字を入れたいのですがどうすればよろしいでしょうか?

For i = 1 to 3
Cells(5,i + 4) = ?
next i

721 名前:デフォルトの名無しさん [2009/11/23(月) 15:30:19 ]
x = Array("H線", "L線", "中心線")
For i = 1 To 3
Cells(5, i + 4) = x(i - 1)
Next i

初心者の発想はこんな感じ。

722 名前:720 [2009/11/23(月) 15:45:34 ]
>>721

早速のご回答、誠に有り難うございます。
>>721様のおかげで解決できましたので、心より御礼申し上げます。




723 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:22:36 ]
初心者に配列はいきなりきついんじゃないか?

724 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:31:36 ]
>>720
For-Next使う必要ないじゃん

For i = 1 To 3
Next i
Range("E5").Value = "H線"
Range("E6").Value = "L線"
Range("E7").Value = "中心線"

725 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 17:07:02 ]
>>723
配列無しで出来る?
俺には思いつかなかった

726 名前:デフォルトの名無しさん [2009/11/23(月) 17:21:26 ]
>>724よく見たら笑えるww三回回ってワン

あれは配列のお勉強だったんじゃね?

727 名前:デフォルトの名無しさん [2009/11/23(月) 17:32:17 ]
For i = 1 to 3
Cells(5,i + 4) = Iif(i=1,"H線",Iif(i=2,"L線","中心線"))
next i

配列思いつかなくてもできるじゃん不気味で自分はこんなの書きたくないけど。

728 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 18:01:59 ]
なんでループにすんの?

729 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 19:07:59 ]
これはどうですか
For i = 1 To 3
Cells(5, i + 4) = Choose(i, "H線", "L線", "中心線")
Next i

730 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 19:14:19 ]
x = Array("H", "L", "中心")
For i = 1 To 3
Cells(5, i + 4) = x(i - 1) &"線"
Next i

731 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 19:17:41 ]
vbaにもchoose関数あるの初めて知ったわw

732 名前:デフォルトの名無しさん [2009/11/23(月) 19:29:47 ]
同じく、知らんかった。へ〜。。。



733 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 20:05:46 ]
x = Array("H", "L", "中心")
ReDim y(1 to 1 , 1 to 3 )

For i = 1 To 3
y(1 , i)=x(i - 1) &"線"
Next i

Range("E5:E7")=y


もしもしからなので動くかどうかはしらね

734 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:37:37 ]
>>724
お前>>718だろ?w

735 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:44:02 ]
>>720
>>529流に書くとこうだな。
For i = 1 To 3
Next
Range("E6:E8").Value=WorksheetFunction.Transpose(Split("H線 L線 中心線"))

下が普通だが。
For i = 1 To 3
Next
Range("E6:E8").Value=WorksheetFunction.Transpose(Array("H線","L線","中心線"))

736 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:53:08 ]
おまいらForがかわいそうとかNextが不憫とか思わんの?

737 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:58:09 ]
>>721の一部修正
x = Array("H線", "L線", "中心線")
For i = 1 To 3
Range("E5").Cells(1, i).Value = x(i - 1)
Next i


738 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 22:02:05 ]
なんだChooseがVBAで使えるのかよ。
俺も知らんかったわ。

739 名前:デフォルトの名無しさん [2009/11/23(月) 22:11:42 ]
何もないのに回っているFor-Nextを思うと萌える

740 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 22:25:43 ]
For i = 1 To 3
Next i
Range("E6:E8").Value = [{"H線";"L線";"中心線"}]

741 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 22:28:06 ]
Evaluateか、なるほどそれもあるな。

742 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 22:28:09 ]
Sub 萌()
Do
Loop
Exit Sub



743 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 22:33:23 ]
>>739
何もなくても行数を稼ぐのが昔はプロの技と言われたもんだぜ

744 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 22:35:06 ]
ボッタクリの末路は...

745 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 22:43:56 ]
>>742
無限ループって怖くね?
pc11.2ch.net/test/read.cgi/prog/1140435913/

746 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 00:22:51 ]
  i = 1
Loop1:
  If i > 3 Then GoTo Loop1_End
  Select Case i
    Case 1: Cells(5, 5).Value = "H線"
    Case 2: Cells(5, 6).Value = "L線"
    Case 3: Cells(5, 7).Value = "中心線"
  End Select
  i = i + 1
  GoTo Loop1
Loop1_End:

747 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 14:22:47 ]
Ruby 1.9 And Rails 3.0
www.slideshare.net/arrrrcamp/ruby-19-and-rails-30

748 名前:デフォルトの名無しさん [2009/11/26(木) 15:55:58 ]
>>745
ずーっと萌え続けるからいいんじゃね

749 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 17:09:50 ]
www.nikkei.co.jp/news/market/20091126m1ASS0ISS16261109.html

750 名前:デフォルトの名無しさん [2009/11/26(木) 17:39:38 ]
まったくズブの素人です。
これからブイバ初めても間に合いますか?
プログライミングをでけるようになりたいから
手始めにVBAから勉強するのか迷い中です。
何か時代は.NETでブイビーも.NET
それじゃ〜ブイバももう手遅れなんでしょうか?

751 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 17:47:16 ]
373 デフォルトの名無しさん [] 2009/11/26(木) 17:41:52 ID: Be:
パイソンって強そうな名前ですが、本当につおいのですか?
でもちょっとHでもありますが。。

752 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:39:28 ]

暇人




753 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 19:17:14 ]
>>750

プログラミング云々以前に日本語を正しく書けるようにしろよ
「プログライミング」とか「ブイバ」とかさ、、、w

それに間に合うとか間に合わないかとかの問題じゃないと思うよ。
Excelでやらせたい事があるんだったらVBAだろうし。


754 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 20:41:09 ]
>>753
あっプログラミングの間違い、頭ではプログラミングつって
書いた覚えなんだけんど。
そんでブイバって読むんとちゃうんかいな。長いでど
ブイビーエーとでも言うんですか?
田舎もので素人だもんで、そげんこつも誰も教えてくれんから、
愛嬌ということで。。

755 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 20:49:00 ]
972 デフォルトの名無しさん [sage] Date:2009/11/23(月) 17:09:32  ID: Be:
    ID強制になるだけで静かになるよ

973 デフォルトの名無しさん [] Date:2009/11/23(月) 18:02:02  ID: Be:
    その変更はキミに任せるから提案してくれ。

974 デフォルトの名無しさん [] Date:2009/11/23(月) 18:18:58  ID: Be:
    反対するのは荒らしたい奴だけだから強行しちゃって良いよ

756 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 21:23:18 ]
↓うーんセフセフのAA

757 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 21:27:13 ]
↑そのAA持ってないんですいませんがw

Excel2007
テキストボックスについてですが。
MultiLineをtrueに、ScrollBarsをfmScrollBarsBoth
にセットして、データの表示(更新)用に使っています。

表示する時にマウスのホイールボタンでスクロール出来るようには
出来ないのでしょうか?



758 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 01:08:03 ]
yes we can

759 名前:720 [2009/11/28(土) 11:55:34 ]
EXCEL 2007

こんにちは

マクロを使い、オートフィルで連続データを作成しているのですが、
書式もオートフィルされてしまい困っています。

値だけをオートフィル(連続データ)するやり方があればご教授ください。
宜しくお願いします。




760 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:12:04 ]
.value

761 名前:デフォルトの名無しさん [2009/11/28(土) 12:18:21 ]
マクロの記録でやってんのかな
試したけど無理っぽいから、あきらめてきちんとコードを組む

762 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 12:40:59 ]
構文 Object.AutoFill(Destination, Type)

設定項目 内容
Object Rangeオブジェクトを指定
Destination オートフィルの書き込み先のRangeオブジェクトを指定
Type 入力されるデータの種類を指定。XlAutoFillクラスの定数を指定

XlAutoFillクラスの定数
・xlFillDefault:標準のオートフィル
・xlFillSeries:連続データ
・xlFillCopy:コピー
・xlFillFormats:書式のみコピー
・xlFillVaules:書式なしコピー
・xlFillYears:年単位
・xlFillMonths:月単位
・xlFillDays:日単位
・xlFillWeekdays:週日単位
・xlLinearTrend:加算
・xlGrowthTrend:乗算




763 名前:デフォルトの名無しさん [2009/11/28(土) 13:02:02 ]
でも書式コピー梨、連続(加算)は出来ないっぽいよ

764 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 16:03:46 ]
たぶんそうだよねー
オートフィルもExcelマクロっぽくて悪くないと思うから
とりあえずオートフィルして書式は別に直すとか

765 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 18:56:46 ]
質問です。
Excel VBAからワードや他のエクセルファイルの操作ってできますか?
やりたいこととしては、VBAを仕込んだxlsファイルに、
置換したい文章を記述し(置換前と置換後をシート内に記述)、
指定したフォルダ内(サブ含む)にあるエクセルファイルやワードファイルに
書かれている文章を変換したいのです。

その際、「この文章を変換しました」みたいなログも出せたら最高なのですが、
いい方法ってありますか?

766 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 18:58:00 ]
yes we can

767 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 19:10:59 ]
>>765
VBAから他のファイルを操作できる

ログは画面にだすならmsgboxでいいでしょ
フィルに書き出したいならテキストファイルでもオープンして書き出せばよい

768 名前:759 [2009/11/28(土) 20:18:10 ]
>>761>>763>>764
ご回答、ありがとうございます。

やはりむりですか・・・
オートフィル以外でいくつかつくったのですが、スピードを重視したくオートフィルにこだわっていました。
やりたいことは、A1の値を基にB1:B100までA2で指定された増分値に沿った降順連続データをつくりたかったのです。
考えついたものを下記に貼りますので、改善点やより良いコードがありましたらご教授ください。
宜しくお願いします。

Sub test1()
基準値 = Cells(1, 1).Value
増分値 = Cells(2, 1).Value
For i = 0 To 99
Cells(1 + i, 2).Value = 基準値
基準値 = 基準値 - 増分値
Next i
End Sub

Sub test2()
基準値 = Cells(1, 1).Value
増分値 = Cells(2, 1).Value
For i = 0 To 99
Cells(1 + i, 2).Value = 基準値 - i * 増分値
Next i
End Sub

Sub test3()
増分値 = Cells(2, 1).Value
For i = 1 To 100
Cells(i, 2).Value = WorksheetFunction.Sum(Cells(1, 1).Value, Cells(2, 1).Value - i * 増分値)
Next i
End Sub

769 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 20:28:08 ]
>>767
具体的にはどのようにするんでしょう・・・<ファイル操作
また、AAAという単語はヒットしたので置換したけど、
BBBという単語がない場合、AAAだけ置換したよ、というログとかも取れますか?

770 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 21:01:43 ]
Excel VBA WEB連携術って本みつけたんだけど誰かレビューしてくれませんか?

ちなみにieを使ったシステムへの自動化を考えてます。
それの助けになるか聞きたいです。

771 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 21:08:53 ]
>>770
おし引き受けた!


レビュー:
読んだことないけど多分読まないよりましじゃね?

772 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 23:39:43 ]
>>770
何をやりたいのかもうちょっと詳しく

自動化って言えば聞こえはいいけど、よくよく話を聞いてみると
たいていは株とかFXとかで楽して儲けたいだけみたいなのが多い



773 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 23:44:31 ]
>>769
例えば、マクロ記録で目的のファイルを開いて、できたブックからシートを自分のシートに移動する
で、移動してきたシートをコピーしといて、どちらか一方を置換する
あとは置換後に双方を比較して、違う部分を表示するとか

他にも方法は山ほどある
まずは自分でアウトラインを固めて、ポイントを絞って質問してくれないと回答しようが無い

774 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 23:45:54 ]
>>772
まぁ株なりFXの自動売買だろ
そして、この程度も自分で調べてできない人間はロクなシステム組めないに1000ガバス


775 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 23:57:41 ]
>>773
すいません、大雑把にしか書いてなかったので答えることもできなかったですねorz
仕様としてはこんな感じです。

VBAを記述したExcelに、置換前・置換後を記述したの置換リストをシートとして作成しておきます。
[VBA記述xlsファイル上の置換リスト]
置換前 | 置換後
------------------
ABC   | XYZ
log-in  | log in
login   | log in

そのシート上にフォルダを指定するセルを用意し、ボタンを押す(マクロ実行)ことで、
指定されたフォルダ(サブフォルダ含む)にあるxlsファイル、docファイルを参照。

ヒットしたファイルの中に、置換リストの置換前と同じ文章があった場合、
ログとして「(ファイル名)▲▲を●●に置換」のような情報を出力し、置換を行います。

うまく纏まっていないかもしれないですが、このような仕様でつくりたいと思っています。
ググってみた感じ、ワードファイルの文章置換を行うロジックはあったのですが、
「本当に置換を行ったか」が取得できなさそうな感じがして・・・。
(▲▲があれば●●に置換する、という処理なので、▲▲がなくても変換せずに処理が終わるはず。変換したか?という状態が取れない感じが)


776 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 00:06:24 ]
このスレはプログラマにとっては有益なスレで
クレクレ君には無益なスレです
テンプレ参照

777 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 01:18:29 ]
プログラマにとっては有益 ← ここ、笑うところ?

778 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 01:22:35 ]
ゆとりには笑うとこまで指示してやらんと

779 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 02:30:54 ]
OSはXP
バージョンは2002です。


単刀直入に聞きます
「ユーザーフォーム上に設置したスプレッドシート」

これをエクセルのシートのように読み込む(ActiveSheet.Range(Cells(1, 1)〜のような書式)ことは可能でしょうか?

780 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 10:31:56 ]
>>779
可能

781 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:03:26 ]
vistaを使ってると、IE7がプリインストールしてあるためにウェブクエリ取得やIEの操作などが正常に作動しないことがあります。
そこで、windows7にはXPモードがあると聞きました。そのXPモードで使われるIEがバージョン6なのかが気になっています。
IE6を使えるなら早めにwindows7搭載のPCに買い替えるつもりです。どうかお教えください。

782 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:41:08 ]
IE6を使える



783 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:46:46 ]
まずIEはバージョン6

注意事項としてXP Modeは Windows 7 Professional 以降で搭載される。
一般のメーカー製 Windows 7 プレインストールPCはほとんどが Home Premium でXP Modeは搭載されてないので注意

あと、XP Modeといっても特に他アプリと連携するような場合には
正常に動作するか分からないのでできれば事前にどこかで確認してみることをすすめる
おそらく統合機能ってのを使わなければ、ほぼ問題ないとは思うけど、統合機能使わないと XP Mode の利点はあまりないと思うし

784 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 15:05:34 ]
バーチャルPC使えよ

785 名前:781 mailto:sage [2009/11/29(日) 17:48:41 ]
やはりMSなりに問い合わせたほうが無難なのですね。
バーチャルPCについて調べてみましたが、これならvistaでもxpを動かせるのですね。インストールして試してみます。
ありがとうございました。

786 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 15:26:51 ]
Excelの関数の質問なのですが
入力した数字が6〜10のとき○、11〜15のとき◎

   A  B
1  6  ○
2  11 ◎

という風に○や◎を表示させたいのですが、関数がどうしてもわかりません。
どなたかよろしくお願いいたします。

787 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 15:33:26 ]
VBAと関係ないね

788 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 15:52:52 ]
すみません、間違えました。

789 名前:デフォルトの名無しさん mailto:sage [2009/11/30(月) 19:19:49 ]
Function Maru(n)
  Maru = ""
  If (6 <= n) And (n <= 10) Then Maru = "○"
  If (11 <= n) And (n <= 15) Then Maru = "◎"
End Function

790 名前:デフォルトの名無しさん [2009/11/30(月) 22:39:34 ]
リストボックスで数値の項目を右詰めにしたいんですが、どうすればよいでしょうか?
2007です。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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