09/10/09 23:28:12
198です。
イミディエイトウィンドウは表示されました。すみません。
201:デフォルトの名無しさん
09/10/09 23:29:33
>>197
あとから修正する可能性のある部分を先頭にまとめてるだけだよ
202:デフォルトの名無しさん
09/10/09 23:38:16
>>198
>学校で授業でやっていて、「テストまでには出来るようにしておけ」
じゃなかった?
あんまり人まかせだと テストで 赤点てな事になるよ!
203:195
09/10/10 00:03:23
>>198
自己解決したとはいえ、イミディエイトウィンドウぐらいは質問せずに自分で開きましょう。
ブログ内のコードをぐだぐだに編集して、結果だけは希望通りに出るようにしました。
質を下げたもので良ければ利用してください。
プログラム板にしては非常にぬるま湯的な対応をしてしまったことを
すごく後悔しています。でもまぁ、自分自身の勉強にはなったか。
204:デフォルトの名無しさん
09/10/10 00:17:17
>>196
ちゃんと内容は見ていないがSet □ = Nothing をする癖をつけた方がいいと思うよ。
205:デフォルトの名無しさん
09/10/10 00:51:40
>>203
ありがとうございました。
206:デフォルトの名無しさん
09/10/10 01:10:37
>>204
ローカル変数って、たとえオブジェクト型でもモジュールの出口で自動的に開放されるんじゃないの?
207:デフォルトの名無しさん
09/10/10 03:57:40
礼儀だよ。
208:デフォルトの名無しさん
09/10/10 04:17:30
モジュールが無事終了するとは限らないだろ
209:デフォルトの名無しさん
09/10/10 05:39:19
>>204
いらないよ。
>>207
何の礼儀だよ?
>>208
だから?
210:デフォルトの名無しさん
09/10/10 06:03:58
↑こいつ最高にアホw
211:デフォルトの名無しさん
09/10/10 07:23:40
↓こいつ最高に天才www
212:デフォルトの名無しさん
09/10/10 10:05:40
∩―、
/(゚)丶_ 丶
/ (● (゚)|つ
| (入_ノ ミ
| (_/ ノ
\___ノ゙ー-、
/\ _ \
(⌒O /\ (_ノ
\ノ / 、 )0
213:188
09/10/10 10:16:15
>>196
テストしてみたところ問題なく動きました。
本当にありがとうございます。
214:デフォルトの名無しさん
09/10/10 10:51:27
>>210
羮に懲りて膾を吹く。
アプリ終了前にfreeしまくるがごとし。
215:デフォルトの名無しさん
09/10/10 12:23:40
>>197
>>196を擁護すればSetした方が速いんだよ。
まぁCellsは遅いから、速くしたければ配列だろうけどね。
それからわざわざシート参照の変数をSet 変数 = Nothingとする必要はねーよ。
そんなこと気にするやつは、他にもっと気にすべきことが抜けてる場合がほとんどだ。
216:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/10 13:10:30
オブジェクトがデカいと
メモリが少ないようなマシンで
set=nothingしないとその後辛くないかな
何もないなら必要ないだろうけど。
試して言っている訳ではないです。
218:デフォルトの名無しさん
09/10/10 16:16:35
プログラマはsetした後nothingしないなんていわない
219:デフォルトの名無しさん
09/10/10 19:06:03
>>217
Worksheet型のオブジェクト変数はシートを作ってるわけじゃない。
ワークシートへの参照への参照だ。
メモリは32ビットCPUで4バイトだ。
マクロが終了すりゃちゃんと参照カウンタは0になる。
Set ** = Nothingを書くのを否定はしないが、書くのがあたりまえって意見は否定する。
220:デフォルトの名無しさん
09/10/10 20:02:13
書くことを習慣づけろ
221:デフォルトの名無しさん
09/10/10 21:15:43
いらないものを書くやつは馬鹿じゃね?
222:デフォルトの名無しさん
09/10/10 21:18:02
これを習慣づけろっ!て言うことが
礼儀と呼ばれるんだろね
質問なんですが
他に礼儀ってどんなものが有りますか?
223:デフォルトの名無しさん
09/10/10 21:19:16
>>221
如何に記述量を増やすかがプロなんだよ。
最小限で簡潔になんてアマチュアのやること。
224:デフォルトの名無しさん
09/10/10 21:22:39
プロってすごいんだね。
225:デフォルトの名無しさん
09/10/10 21:26:09
うるさい、黙ってNothing書け!
226:デフォルトの名無しさん
09/10/10 21:27:51
なにこの流れww
227:デフォルトの名無しさん
09/10/10 21:36:46
つまり、理由も根拠もないんだが、自分のやりたいことを他人に強制したいときの
エクスキューズが「礼儀」ってことだ。
228:デフォルトの名無しさん
09/10/10 21:45:54
>>215
普通はSetした方が速いが>>196は未宣言のVariant型だから速くはならんね。
Nothing云々より変数宣言が大事だな。
229:デフォルトの名無しさん
09/10/10 21:57:25
つまりプログラムにおいて礼儀とはK&Rであると
230:デフォルトの名無しさん
09/10/10 21:57:50
で、それ百万回実行して何ms違うの?
231:デフォルトの名無しさん
09/10/10 21:59:54
>>217
関数抜けたら解放されるんじゃ?
232:デフォルトの名無しさん
09/10/10 22:02:12
>230
普通なら宣言しないほうが早い
でも場合によってはエラーが引き起こされたりメモリが足りなくなったりする
エラー処理するかどうかなんて人それぞれだし、押し付けるようなもんじゃないんじゃないん
233:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/10 22:33:54
これから速度厨と礼儀厨の熾烈な戦いが始まります。
235:デフォルトの名無しさん
09/10/10 22:39:35
>>233
貼りつけているのは、CommandButtonなの?
Private Sub CommandButton1_Click()
End Sub
Private Sub CommandButton2_Click()
End Sub
てのが出来るどこれとは違うのかな?
236:デフォルトの名無しさん
09/10/10 22:49:17
10usくらいの差なんてどうでもいいよ
237:デフォルトの名無しさん
09/10/10 22:50:35
おまえらもういいよムリしなくて
速度とかIndexとかVlookupとかピボットとかNothingとか全部ネタのクセに
わかってるからさ!
238:235
09/10/10 22:53:23
同じマクロを呼び出したいのね
ただ
>フォーム上のボタンであれば、
以下の文面では
フォーム上でも同じマクロを呼び出してないけど
それはいいの?
239:233
09/10/10 22:55:20
>>235
そうです。CommandButtonです。
それはフォームについてVBEで書く時ではないですか?
シート上に貼りつけて、対象マクロを選択する時ってマクロの登録(N)から
マクロを選択するけど同じのを選択した時に、どのように区別がつけられるのか?
と思いまして質問しています。どうなんでしょうか。
240:デフォルトの名無しさん
09/10/10 22:56:50
>>238
あれは CopyExec というマクロに対して、パラメータとして AまたはBを与えるという意味で
書きました。判りにくくてすいません。
241:デフォルトの名無しさん
09/10/10 23:01:50
>>239
Excel2007じゃないんでなんとも言えないけれど
対象ボタンを右くりっくして
"コードの表示"をすると
シートオブジェクトのコード画面に
Private Sub CommandButton1_Click()
End Sub
とかできない?
242:239
09/10/10 23:08:48
>>241
ボタンを右クリックして出てくるメニューの一覧が
切り取り
コピー
貼りつけ
------
テキストの編集
------
グループ化
順序
------
マクロの登録
コントロールの書式設定
でコードの標示というのはここからは出来ないみたいですが
243:241
09/10/10 23:12:16
>>242
自分のExcel古いせいかメニューが違うようで
お力になれませんでした! すみません
244:デフォルトの名無しさん
09/10/10 23:41:15
>>242
VBE開いてボタン貼り付けたシートのコードの表示すればいい
245:デフォルトの名無しさん
09/10/10 23:49:31
デザインモードになってないだけじゃないの。
デザインモードにしてボタンをダブルクリックでVBEの画面になる。
246:デフォルトの名無しさん
09/10/11 00:36:01
エクセル2007で質問です。
アドインタブのユーザー 設定のツールバーのところにボタン1、ボタン2を作って、
ボタン1を押したら、ボタン1のEnabledをFalse、2をTrue
ボタン2を押したら1はTrue、2はFalseに設定したはずですが、
ボタン1を押したあと、ボタン2が押せる状態になっていません。タブを切り替えるとなぜかうまくいくんですが。
2007はこういう仕様なんでしょうか
247:デフォルトの名無しさん
09/10/11 00:43:51
またーり行こうぜ
248:デフォルトの名無しさん
09/10/11 00:54:36
タブってリボンのことか?
249:デフォルトの名無しさん
09/10/11 00:59:03
>>239
同じマクロを呼び出した場合、呼び出し元の区別はつかんだろうな
パラメータが指定できるなら そこで区別つけるしかない
あと
フォーム上でもシート上でも
クリックイベントのプロシージャは利用できる
250:239
09/10/11 06:55:15
>>249
>呼び出し元の区別はつかんだろうな
今回は同じマクロを使う事は諦めます。ありがとうございました。
251:デフォルトの名無しさん
09/10/11 07:38:14
それActiveXコントロールのボタンじゃなくて、フォームのボタンだよね。
application.callerでボタンのテキストが取得できるから、それで判断。
252:デフォルトの名無しさん
09/10/11 08:04:41
>>251
MsgBox "呼出し元 " & Application.Caller
でシート上のボタンでも呼出し元を判別する事が出来ました。ありがとう!
253:デフォルトの名無しさん
09/10/11 10:45:19
あー、まだ見てたんだ。よかったよかった。
フォームのボタンに限らず、イベントの発火元は大抵わかるようになってるんだよ。
まぁ、中にはわからにものや、任意のマクロ(イベントハンドラ)を登録できないのもあるけどね。
254:デフォルトの名無しさん
09/10/11 11:46:13
Private Sub CommandButton1_Click()
MacroA pram:=1
End Sub
Private Sub CommandButton2_Click()
MacroA pram:=2
End Sub
こういうのは駄目?
255:デフォルトの名無しさん
09/10/11 12:08:38
いや、それでいいし、実を言えばフォームのボタンの処理もそうしたほうがいいんだ。
プログラマ的な説明だと、イベントハンドラ内に直接処理を実装すると、凝集度が低くなるから。
256:デフォルトの名無しさん
09/10/11 17:21:22
>>凝集
臨床検査学以外で初めて聞いたよ。
まさか一般社会で聞く単語とは思ってもいなかった。
257:デフォルトの名無しさん
09/10/11 18:01:09
ちょっと教えてもらっていいですか?
Cellsの使い方について
このスレでも時々みかけるんですが
a = Sheets("Sheet1").Cells(1,1).Value
と
a = Sheets("Sheet1").Cells(1,1)
は結果的に両方共 A1セルの内容を変数aに代入している事になっているのだけど
前者と後者の違いってあるのですか?
本来は、前者であるべきとは思いますが
後者を使った時の弊害ってなにかあります?
258:デフォルトの名無しさん
09/10/11 18:22:07
>>257
人によってはデフォルトプロパティを中途半端に省略したソースを汚いと感じることもある。
自分一人で使うだけなら好きにすればいい。
あとは、タイピング量が数回増えるのも人によっては弊害と考えるかもしれない。
259:257
09/10/11 18:37:12
>>258
結局の所どちらでも結果は一緒なんだから
どちらを使ってもいいんですね
ソースが綺麗か汚いかはその人の主観なんだから
あまり気にしません
とは言え 自分自身のソースみて汚いと感じる事があるんで
精進しなくては
ありがとうございます
260:デフォルトの名無しさん
09/10/11 20:48:33
凝集度と結合度
261:デフォルトの名無しさん
09/10/11 23:13:40
>>259
また荒れる原因になるかもしれないんだけど、
やっぱりデフォルトプロパティは省略すべきじゃないと思うよ。
range型に代入する時なんか、可読性云々じゃなくて、
後から見て訳が分からなくなる・・・時がある。
262:デフォルトの名無しさん
09/10/11 23:36:28
個人的には最初は省略しないで書いた方がいいと思う。
で、覚えたら好きに書けばいいと思う。
覚えていれば省略しても、普通にも書けるが、覚えてないと普通には書けないと思うよ。
263:デフォルトの名無しさん
09/10/11 23:59:39
者によっては、特にオブジェクトに大量にアクセスする場合など処理が冗長になることがある
原則的に省略しないほうがいいと俺も思うけど、場面場面で使い分けるべきではある
264:デフォルトの名無しさん
09/10/12 00:00:30
C#に移行したいとかVBAが.NETベースになった時の事も考えて、
デフォルトプロパティは省略しない方がいいんじゃないだろうかと言ってみる
それならとばかりにWithステートメントを多用すると、
C#で「面倒臭ぇと」ボヤく事になる罠
265:デフォルトの名無しさん
09/10/12 00:09:21
それもこれも言語の貧弱さが原因なんだよな
266:デフォルトの名無しさん
09/10/12 00:13:01
単純ミス防止でoption explicit とか書くだろ
それと同じで曖昧な表現は極力明確にするほうが良いと思う
どこまでが曖昧な表現かは人によるw
267:257
09/10/12 01:14:57
>>261-266
みなさんありがとうこざいます
やはり省略しない方がよさそうですね
確かに単純なプログラムでは問題なくても
複雑なプログラムになるほど後で見て訳分からなくなりそうですもんね
でも
Itemプロパティぐらいは省略してもいいかなと思ってます(^^
268:デフォルトの名無しさん
09/10/12 06:01:17
セルの値が数値ならValueじゃなくValue2が普通だから、必然的にプロパティは書くことが多いな。
Itemまで書くとくどいよな。
Worksheets.Item("Sheet1")とかCells.Item(1,1)とかする奴はあまりいないな。
269:デフォルトの名無しさん
09/10/12 22:20:08
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
270:デフォルトの名無しさん
09/10/13 16:41:04
A1A2・・・に単語が並んでいて
B1B2・・・にグーグルかヤフーのその単語の検索件数を書き入れていくというような
Webクエリは作れないものでしょうか?
271:デフォルトの名無しさん
09/10/13 18:09:44
>>270
そのままでは件数がクエリで取り出せないので、VBAと組み合わせる必要がある
272:デフォルトの名無しさん
09/10/13 18:18:16
VBA使ってどうすればよいのでしょうか?
ぜひ御教授お願いします。数万の単語の検索に途方にくれています>__<
273:デフォルトの名無しさん
09/10/13 19:14:30
kwsk
274:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/13 21:11:13
A,B,C,D なのに A,C がマッチするのかよ。
Instrで文字列内を検索すりゃ良いんでない?
てか、どんだけの文字数があるのかさっぱりわからん。
無数にある文字種類から検索するとなったら酷い事になりそうだ。
使われてる文字の一覧を作って、それを検索して行くのが良いかもな。
文字種類は無限です。って言うなら、俺は降りる。
276:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/13 22:05:47
>>274
ヒント モリケン
278:デフォルトの名無しさん
09/10/13 22:12:31
>276
275氏も書いてるがInStrでOK。
にしても説明ヘタだな、君は。
279:デフォルトの名無しさん
09/10/13 22:29:15
人に判り易く自分のやりたい事を説明するっつーのも訓練が必要っすよ。 w
他人には(特に掲示板なんかでは)質問者のレベル・環境、そして何をどうしたいのかなんて判らないのだから。
(ここはExcel VBAスレだから或る程度は限定されてるけど)
280:デフォルトの名無しさん
09/10/13 22:33:33
>>275-279
すいませんがんばってみます。
サンプルでもうpすればわかりやすかったかも・
281:デフォルトの名無しさん
09/10/13 23:35:10
1列に必ず同じ文字が入るなら簡単だろ。
この場合は4文字だから、組み合わせは
4C4=1
4C3=4
4C2=6
の11種類しかない。
組み合わせの形がわかるから、その組み合わせを順に行毎にループすりゃいい。
282:デフォルトの名無しさん
09/10/14 10:28:23
270です。
VBAはかなりいろいろできるようになったのですが、ネットにつなぐスクリプトは
挑んだことがありません。またどうやってヤフーやゴーグルのデータを取り込んで
加工するかがわかりません。
一単語ごとに検索して検索数をコピペする作業は300ぐらいこなすとぐったりです。
どうすれば自動化したいのです・・・
283:デフォルトの名無しさん
09/10/14 11:04:49
まずは日本語でどうぞ。
>1 ★5
284:283
09/10/14 11:06:50
>2 ★5
だった;;
285:デフォルトの名無しさん
09/10/14 11:09:03
データ→Webクエリ(で対象のアドレスを入れて)でシートに取り込むのをマクロで記録すればOK
ただし、こっからが問題ありでヤフーやらぐーぐる(だろ?w)が仕様変更でレイアウトなどを変更したら、それに合わせて
修正必須になる
286:デフォルトの名無しさん
09/10/14 11:13:47
>>282
とりあえずヒントだけ。(環境依存な部分があるので、このままじゃ動かない)
Sub 件数取得()
kw = "ぬるぽ ガッ"
Set ObjHttp = CreateObject("Microsoft.XMLHTTP")
ObjHttp.Open "GET", "URLリンク(www.google.co.jp)" & 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:デフォルトの名無しさん
09/10/14 12:34:58
質問させてください。(Ecel2003)
複数のセルをcsv形式で文字列変数に格納したいのですが、
Webで探したら1セル+","を繰り返す方法しか見つかりません
でした。
実際試して見ましたが対象セルが数万あるので処理に非常
に時間が掛かっております。
Joinなどを利用して一括で行うなど、高速化の手段は無い
のでしょうか?
(対象セルは矩形で表現できます)
ちなみに最終目的は複数のBookのある範囲のセル値を1つ
のcsvファイルにまとめることです。
よろしくお願いします。
288:デフォルトの名無しさん
09/10/14 12:41:09
>>287
あくまでも想像だけど、時間がかかっているのは、たぶんセルの内容を1つずつ読み出してるから。
配列に一気に読み込んでから処理すれば、もっと速くなるはず。
289:デフォルトの名無しさん
09/10/14 13:01:44
>>287
Join関数は一次元配列しか指定できないから、二次元から一次元への変換部分だけは
自分で工夫して作るしかない。
290:デフォルトの名無しさん
09/10/14 13:11:04
>>288
違うと思うよ。
単純に連結すりゃだんだんサイズが大きくなってメモリに入りきれなくなり別のメモリ領域をしょっちゅう探して確保しなきゃならないから時間がかかるんだ。
昔は必要なサイズの文字列を用意しておいてMidステートメント(関数じゃない)ではめ込んでいくのが常道だったが、今はJoin関数があるから楽だな。
291:デフォルトの名無しさん
09/10/14 14:21:33
>>286
神様ありがとうございます。
どういうふうな勉強をされたのでしょうか。ネットワーク関係のお仕事など
されているのでしょうか。参考になる本などを教えていただけるとうれしいです☆
ありがとうございます。
292:287
09/10/14 14:26:52
回答ありがとうございました。
一次元に変換してJoinでやってみます。
293:287
09/10/14 15:53:51
度々すみません。
追加で質問させてください。
先の件は一次元にしたら体感で数十倍以上早くなりました。
ありがとうございました。
文字列変数に格納したデータをcsv形式で保存すると、期待した
結果が""で囲われたcsvファイルが出来上がりました。
(以下サンプル)
"1,2,3,4,5,
1,2,3,4,5,
"
この先頭/末尾の「"」を入れたくないのですがどうすれば良い
のでしょうか?
294:287
09/10/14 16:26:40
自己解決。
出力をWriteで行っておりましたがPrintに変えたら希望通りとなりました。
違いがよっく分かりませんが解決しましたのでご報告します。
ありがとうございました。
295:デフォルトの名無しさん
09/10/14 16:27:54
>>293
csv形式で保存するんじゃなくて、テキストファイルに出力する
296:デフォルトの名無しさん
09/10/14 17:05:17
動的配列について質問なのですが
googleで検索などしたところ
Dim aaa() as string
など()のみで宣言したアトに
ReDim aaa(0 to 10)
のように範囲を指定して使う。みたいな例しか検索できませんでした
しかし、範囲を指定して使うならそれはすでに動的ではなく静的じゃないか
とずっと頭を抱えているのですが
要素数不明の配列を扱うことは無理なのでしょうか?
配列にデータを入れる際に、データ数カウントしながら入れて
その後ReDimすりゃいいってことですかね??
297:デフォルトの名無しさん
09/10/14 17:10:03
と思ったら、データを入れる段階で「インデックスが範囲外」的なエラーでましたorz
入れる前に範囲決めろとか無茶なんですが・・・そういうのはvbaじゃ無理ですかね?
298:デフォルトの名無しさん
09/10/14 17:17:59
>>296
あとから何度でもサイズを変更できるというのも一種の動的。
>>297
インデックス値を変数に入れておき、データを入れる前に、そのインデックス値を使って
配列をどんどん拡張していけばいい。
ただしReDimを使うと配列の中身がクリアされてしまうので
データを保持したままサイズを変更するにはReDim Preserveを使う必要がある。
VBAでは一般的なテクニック。
299:デフォルトの名無しさん
09/10/14 17:20:39
>>286
繰り返し処理をしていたら400ほどでデータがなくなりました。
ブラウザでグーグルを見ると、あなたは拒絶しますのような画面が出てグーグル
使えなくなりました・・・
どうすれば・・・・・
300:デフォルトの名無しさん
09/10/14 17:23:17
We're sorry...
301:デフォルトの名無しさん
09/10/14 17:25:33
>>299
しばらく待つ
302:デフォルトの名無しさん
09/10/14 17:29:09
>>299
そのサンプルはOpenでコネクションが開きっぱなしだから、まずは1回ごとにCloseしてみ
あとは、まあ連続アクセスは避けるとか。たとえば10秒間隔でアクセスするよう修正してみる
303:デフォルトの名無しさん
09/10/14 17:46:57
Google にクエリを送信すること
をしてはいけないということです・・・
世界のグーグルを怒らせてしまって・・・
304:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/14 18:48:06
>>298
アドバイスありがとうございます
要素数をuboundで数えて、残り少なくなったら配列を拡張するという方法をとってみました
とりあえずはこれでなんとかなりそうです
306:デフォルトの名無しさん
09/10/14 23:45:51
>>305
そんなファジーな使い方をw
かっちりと要素数取得すれば良いんじゃないか?
307:デフォルトの名無しさん
09/10/15 00:12:46
>>299
別に質問でも回答でもないんだけど・・・
グーグルをそういう使い方したらいけないというのがわかって為になったわ
308:デフォルトの名無しさん
09/10/15 03:17:58
ボクも、>>286のプログラムを使ってみた。
URLリンク(kabutomo.net)
309:デフォルトの名無しさん
09/10/15 08:30:17
299です。
復旧しました。復旧にはゆがんだ画像の絵のなかの文字を入力
させる画面が二回出てきて、復旧。その後、何回かグーグルを
普通に利用したところ、またゆがんだ絵の文字を入れろと・・・
すっかりブラックリストに載ってしまったみたいです・・・・・
英語グーグルにアクセスしても同じことで、違うのは、
送信ボタンが、I'm human と書いてあるところでした・・・
かなりこわい経験でした。400か500連続で、ストップというところ
でしょうか。気をつけてください。
それにしてもあなたはグーグルとのこの契約を知っているでしょう
とは・・・・
310:デフォルトの名無しさん
09/10/15 08:59:36
やはりあなたは検索しすぎです
ばいばいおさるさんw
311:デフォルトの名無しさん
09/10/15 11:06:57
>>309
ここから先はネットサービス板あたりの領域かな。
Googleの検索は1時間あたり何回までが限界とかそういうのをきちんと調査した上で、
それを越えないようなプログラムを工夫して作ることになる。
312:デフォルトの名無しさん
09/10/15 11:30:00
ありがとうございます。頼っていたサービスなので非常に怖い思いをしました。
なんか世界から拒絶されたような・・・
手で作業するよりも早ければそれでいいです。一分に5つぐらいのペースのを
つくってみます。一月ほど休むことにします。
プログラマー向けのページには一日5000までとは書いてあったのですが・・・
ヤフーは5万までみたいです。
313:デフォルトの名無しさん
09/10/15 12:03:54
外部にproxy用意して色んなIPから接続してやるのが定番
314:デフォルトの名無しさん
09/10/15 12:11:35
外部にボットを用意して色んなPCから接続してやるのはどうでしょうか。
315:デフォルトの名無しさん
09/10/15 12:41:52
ボットってか
もう
googleを攻撃しないであげて
316:デフォルトの名無しさん
09/10/15 13:47:02
なるほど良く考えたらスクリプトアタックか
317:デフォルトの名無しさん
09/10/15 14:58:17
OS:XP EXCEL2003、2007にて
Ctrl+6 や Ctrl+7といった数字のショートカットキー
を禁止にする方法はありませんでしょうか?
検索しても回答がなく、OnKeyでも拾えないので
困っています。
318:デフォルトの名無しさん
09/10/15 18:03:21
VBAとどのような関係が?
319:デフォルトの名無しさん
09/10/15 20:53:16
>>318
VBAでそのキーを押した際の処理を無効化したいんでしょ。
320:デフォルトの名無しさん
09/10/15 21:27:48
フックは簡単にできるでしょ。
と思いやってみたが本当に拾えないな。
APIにあったと思うけど、スレ的にどうなんだろ。
321:デフォルトの名無しさん
09/10/15 22:20:20
カーネルに入ってなかったっけか。
322:デフォルトの名無しさん
09/10/15 22:23:40
結構前まではAPIの話題が出ただけで拒否反応する人はいたな
ライブラリ参照したりAPI使うのはエクセルVBAの構築手段として十分範囲内だと思うけど
API自体の話でもなければ
323:デフォルトの名無しさん
09/10/16 13:30:41
グーグルって自分ではロボットつかいまくってるのに自分には使わないでというのは
やっぱりおかしいわ
324:デフォルトの名無しさん
09/10/16 15:39:10
>>323
325:デフォルトの名無しさん
09/10/16 16:25:15
XP SP3
EXCEL2002
現在、クライアントPCのファイルをデスクトップ上にあるイントラネットショートカットアイコンに
ドラッグアンドドロップでファイルをアップロードしているのですが、
クライアントPCのファイルをイントラネットにアップロードする事はVBAで処理可能でしょうか?
326:デフォルトの名無しさん
09/10/16 17:57:05
VBAでTCP/IPって話は難しいとおもうが
VBAでイントラネットショートカットアイコンにドラッグアンドドロップ相当の
作業を行うのは幾分は簡単かと思う
327:デフォルトの名無しさん
09/10/16 20:17:36
>325
ショートカットアイコンは
何処へのどんなショートカットなの?
サーバとかの共有フォルダへのショートカットなら
VBA使わなくてもって気もするが
あえてVBAなら
FileCopy すればいいだけのような気がするのだけど
そのへんどうなの?
328:デフォルトの名無しさん
09/10/16 20:48:18
質問させてください。
Excel2003ですが、任意の文字列を配列の中から検索して
インデックス番号を返すような処理はどのように行うのでしょう
か?
任意の文字列は必ず配列の中に完全一致で存在します。
また配列内に重複する文字列はありません。
myArray(0)="あああ"
myArray(1)="いいい"
myArray(2)="ううう"
myArray(3)="えええ"
myArray(4)="おおお"
の場合、"ううう"をキーにすれば2を求めたいのですが、配列
を回して比較する程度しか思いつきません。
Findメソッドなどで実現できないでしょうか?
よろしくお願いします。
329:デフォルトの名無しさん
09/10/16 21:38:56
>>328
残念ながらVBAだけで一発で検索する方法はない。
検索を第一に考えるなら、2次元配列にデータを入れておき、
必要に応じてワークシートに転送してからワークシート関数で検索するという方法がある。
文字列の長さがすべて一定ならJoinで1つの文字列にまとめてから位置を調べるという手もある。
330:デフォルトの名無しさん
09/10/16 21:41:08
>>328
目的によってはDictionaryオブジェクトが使える場合もある
331:デフォルトの名無しさん
09/10/16 21:49:56
System.Collections.ArrayList
332:デフォルトの名無しさん
09/10/16 22:03:32
配列がとても大きくて順次比較していては時間がかかるって言う事なら
配列のキーの部分が 昇順または降順でソートされているという条件で
古典的なバイナリサーチ手法を使えぱ時間は短縮できる
333:デフォルトの名無しさん
09/10/16 22:08:25
ハイルデータが固定で数が多くないとか、なら連想配列だろうなあ
データ入力時に連想セットできたりするかね
334:328
09/10/16 22:37:34
回答ありがとうございます。
フォルダ内にYYMMDD.xlsというファイルが複数あり、それをソートして
格納してある配列があります。
コンボボックスから2つのファイルを選択したらその期間内のファイルに
対して処理を行うことが目的です。
インデックス番号を取得してFor~Nextの初期値と最終値にしたか
ったので質問させていただきました。
対象ファイル数は100以下です。
後のメンテを考え、素直に全数比較して新たな配列に格納する
方法で対応してみます。
ありがとうございました。
335:デフォルトの名無しさん
09/10/17 08:07:18
>>334
要素数が65536以下ならWorksheetFunction.Matchが使える。
この関数でバイナリサーチも出来るが、要素数が65536も超える場合も考慮するなら自前の関数書いた方がいいな。
要素数がたった100以下ならバイナリサーチじゃなくても無問題だけどな。
336:325
09/10/17 10:22:18
>>326
D&D相当の作業、是非教えて頂きたいです。
>>327
ショートカットアイコンは通常のフォルダアイコンに地球の絵が描かれています。
FileCopyで試すと「パス名が無効です」
FS.CopyFileで試すと「ネットワークパス見つかりません」とエラーが出ます。
パス名は"\\サーバ名\フォルダ"」と間違いないと思うのですが・・・・
337:327
09/10/17 11:16:11
>>336
「パス名が無効です」 だと共有フォルダ名が間違っている可能性があるけど
確認した?
エクスプローラでそのサーバーが見えるなら パス名確認した方が良いかも
FileCopyは
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt
とかでいいはすなんだけど
サーバー系は、ここ数年やってないんで最新バージョンなんかで仕様が変わっていたら
お手上げですが....
338:337
09/10/17 11:19:58
あっチョット訂正
FileCopyの構文で 最後の " が抜けてた
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\test.txt"
FileCopy "c:\temp\test.txt", "\\サーバ名\共有フォルダ名\フォルダ名\test.txt"
です
失礼しました (^^汗
339:325
09/10/17 14:59:31
>>337-338
パス名は何回も確認しました。プロパティーからコピペしたので間違えてないはずなんですが。
エクスプローラーのプロパティではパス名「http://サーバ名/フォルダ名」なんで、
「http:」外して/を\に変えたんですけど、根本的に間違ってるんでしょうか。
あと、補足ですがサーバはSharePointのワークグループです。
340:327
09/10/17 15:16:03
>>339
プロトコルがhttpなら
>>337の方法は使えないね
341:デフォルトの名無しさん
09/10/17 17:01:58
createobject("shell.application").namespace("http://サーバ名/フォルダ名").copyhere "c:\temp\test.txt"
342:325
09/10/17 17:12:19
>>340
やっぱそうなんですね。
xlsやSLK形式のデータはVBAで上書き保存出来たので、試行錯誤してみたんですが残念です。
>>341
ありがとうございます。試してみた所エラーは出ませんでしたが、コピー出来ていませんでした。
どこか違う所にコピーされたんでしょうかね(゚ー゚;Aアセアセ
343:デフォルトの名無しさん
09/10/17 17:35:43
CreateObject("WScript.Network").MapNetworkDrive "Z:", "http://サーバ名/フォルダ名"
FileCopy "c:\temp\test.txt", "z:\test.txt"
344:デフォルトの名無しさん
09/10/17 17:43:22
>>341
非同期なのかも
msgbox "ちょいと待つ"
345:デフォルトの名無しさん
09/10/17 17:50:48
>>339
sharepointはブラウザ上でみるとhttp://~のリンクだけど、実際はWEBDAVでやりとりしてるよ。
http://~のアドレスをコピペして、新しいブラウザに入力してファイルを開いてみ?
読み取り専用になるから。
対して、\\鯖名\~だと読み書きできる。
「webdav vba」 で検索すると幸せになれるかも
346:デフォルトの名無しさん
09/10/18 11:54:53
excel2007です
vbaに登録されている(?)errの一覧を知る方法は無いでしょうか?
ループ内でロジックエラーが発生した時にerrに数値を設定してexitさせようと思ってるのですけど
その時にExcelに既に定義されているのとぶつかったら不味いかなと思いまして。
347:346
09/10/18 12:04:34
自己解決
Raise メソッドに
Visual Basic のエラー (Visual Basic の組み込みのエラーとユーザー定義エラー)
は、0 ~ 65535 の範囲の値です。0 ~ 512 の値はシステム エラー用に予約されてい
るため、ユーザー定義のエラーに使用できるのは、513 ~ 65535 の範囲の値です。
クラス モジュール内で独自のエラー番号を設定するときには、エラー番号を定数
vbObjectError に追加します。たとえば、エラー番号 1050 を発生させるには、名前
付き引数 Number に vbObjectError + 513 を割り当てます。
とありました。スレ汚しすんません
348:デフォルトの名無しさん
09/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 "URLリンク(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:デフォルトの名無しさん
09/10/18 21:33:33
ほれ土日だよ
350:デフォルトの名無しさん
09/10/18 21:36:25
>>348
IEオブジェクトに SendKeys メソッドはないんじゃないの?
そんなことをしなくても、指定のページが開いたら
objIE.document.body.innerText
とすることで現在表示中のページのテキストを文字列として取得できる
351:デフォルトの名無しさん
09/10/18 21:44:59
メッセージからすると
Do While objIE.Busy = True
でエラーになってて開けないんだろ
352:デフォルトの名無しさん
09/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 "URLリンク(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:デフォルトの名無しさん
09/10/18 22:03:35
>>348
ではあなたの月火をわたしにください
そうすればあなたに土日をさしあげましょう
354:デフォルトの名無しさん
09/10/18 22:17:16
月火だよー
火憐だぜ
355:348
09/10/18 22:21:19
>>350~352
神々・・・!
ありがとうございます。
現在>>352様が提供してくださったコードで試していますがうまくいきません。
実行するとクリップボードにあるものがA1に貼り付けられてしまいます。
IEが起動するときに、googleのサイトと空のIEが二つ起動してしまうのですが
これが原因なのでしょうか?
ちなみにVISTA,IE7,officeXPという環境です。
>>353
わかりました。
私のカレンダーから月火を捕まえる為の縄を下さい。
356:デフォルトの名無しさん
09/10/18 22:21:22
>>352
>ほい
だってw
357:デフォルトの名無しさん
09/10/18 22:22:58
保護モード Navigateでぐぐれ
358:デフォルトの名無しさん
09/10/18 22:33:05
>>355
わざと後出ししたな
359:デフォルトの名無しさん
09/10/18 22:41:16
Webクエリをマクロで記録は気に食わないのか?
Sub Macro1()
With ActiveSheet.QueryTables.Add(Connection:="URL;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
09/10/18 22:41:33
>>356
だめか?
>>357
保護モードを解除したがだめです。
>>358
すまん
361:デフォルトの名無しさん
09/10/18 22:45:47
webbrowserコンポーネント使えば?
362:348
09/10/18 22:48:17
金曜日の夜からVBAを触り始めまして、WEBクエリという単語は何度か目にしましたが
スルーしてました。
これだとテキスト形式での貼り付けになってしまいますね?
ページを丸ごとコピーして(HTML、画像も)貼り付けたいのです。
できるのかな?ちょっとクエリについて勉強してみます。
残り73分で!
363:デフォルトの名無しさん
09/10/18 23:03:06
OSとIEのバージョンを後出しされてしまったでござるの巻
364:デフォルトの名無しさん
09/10/18 23:06:24
> ちなみにVISTA,IE7,officeXPという環境です。
正直言おう
その環境を再現して動作確認するのが面倒
365:デフォルトの名無しさん
09/10/18 23:11:07
VistaにIE7にOfficeXPって、わざといらない子ばかり集めて何してんの?何かの罰ゲーム?
366:デフォルトの名無しさん
09/10/18 23:17:04
Webクエリで画像まで取り込む方法ってあったっけ?
367:デフォルトの名無しさん
09/10/18 23:24:31
>>348
VBA初めて作る初心者です
初めてでIEからデータ取得なんてできるわけないし、
ここにソースを貼ってもらっても使いこなせるわけ無い
むだ
368:348
09/10/19 00:29:41
できた。
みんなありがとう
369:デフォルトの名無しさん
09/10/19 00:32:13
シートにwebbrowser貼れば?
370:デフォルトの名無しさん
09/10/19 00:59:37
>>368
できたら何がダメだったか原因書こうな
たとえショボミスでも、だ
同じ質問がきたときウザいだろ
371:デフォルトの名無しさん
09/10/19 02:03:39
VBA使いの皆様へ
VBAとExcelは余り相性が良くありません。
VBAをExcelの上で使うとVBAもExcelも下手になることが
多いです。Excelを使う場合は、出来る限りVBAを使わず
シートの上の数式だけでなんとか出来ないか先ず考えま
しょう。
Excelで本格的な大量計算を行うのは向いていません。
Excelは概して計算が早く無いからです。
VBAを学びたいというのであればAccessのほうが
がおすすめです。
372:デフォルトの名無しさん
09/10/19 04:51:58
hagedo
373:325
09/10/19 12:55:44
>>343
ネットワークドライブの割り当てもやってみたんですが、「ネットワーク名がみつかりません」になってしまうんです。
>>341
やってみましたが、結果は変わらずでした。ありがとうございます。
>>342
オフコン系SEなのでWEBDAVとは初耳でした、ありがとうございます。色々調べてみます。
ちなみに新しいブラウザにURL入力しファイルを開いてもhttp://~のままでした。
374:デフォルトの名無しさん
09/10/19 13:33:05
>>371
WorksheetFunction使えばいいやん
375:デフォルトの名無しさん
09/10/19 13:47:51
userformを見えなくするのに
unload meと
userform1.hide
が有りますけど(他にもあるのか知りませんが)、この違いって何ですか?
376:デフォルトの名無しさん
09/10/19 14:33:00
>>375
hideは見えなくなるだけでまた復活させることができる。例えばテキストボックスの中身とかそのまま残ってる。
unloadは完全に消去
377:デフォルトの名無しさん
09/10/19 16:21:50
>>375
簡単に言うとUnloadはメモリから削除してしまう。
hideは字の如くメモリに残したまま見えなくするだけ。
378:デフォルトの名無しさん
09/10/19 17:22:44
>>376-377
ありがとです。
後で再利用するなら hide もう要らないなら unload ですね。
379:デフォルトの名無しさん
09/10/19 17:47:45
unload 378
380:デフォルトの名無しさん
09/10/19 18:28:22
>>379
379.visible = false
381:デフォルトの名無しさん
09/10/19 19:12:37
ユーザーフォームを印刷しようと思ってるのですが、ユーザーフォーム自体のサイズが大きいのでA4のサイズに納まらずはみ出てしまいます…
A4サイズに縮小して印刷する方法はないでしょうか?
コードはシンプルに
userform1.printform
だけです。
かなりググッたりしてみましたが、良いホムペもなかったので…
382:デフォルトの名無しさん
09/10/19 19:37:40
>>373
いやだからhttp://でアクセスできるんだけど読み取りになるんだよ。
それはhttpプロトコルの制約だから。
http://を\\サーバIPにして後ろの/を全て\になおしてみて。
383:デフォルトの名無しさん
09/10/19 19:43:01
>>381
縮小印刷はプリンタドライバの仕事。機種依存になるので自力で試行錯誤が必要
384:デフォルトの名無しさん
09/10/19 20:33:33
excel2007
リストボックスに3列データを入れる事が出来るようになったとこなんですけど
(1) これタイトルみたいなのを付ける事は出来ないんですか?
コード 商品名 支店 ←付けたいタイトル
9999 xxxxxxxxx xxxxxxx ←データ
みたいな感じで。
(2)
code=Userform1..ListBox1.Text
で選択したコードを拾う事は出来たんですが、この例で商品名を拾うにはどのようにすれば良いのですか?
385:デフォルトの名無しさん
09/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
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/19 22:07:56
今まで快適に使えていたエクセルファイルが、
突然アホみたいに重くなって起動が容易じゃない。
色々調べたけどさっぱり解らない…。
誰か助けてください。
・サイズは600KBほど
・隠れてるオブジェクト無し
・使用範囲以外に隠れデータ一切無し
(書式設定やリンクなど)
・シート30枚ほど
・モジュールの解放もやってみたが改善せず
389:デフォルトの名無しさん
09/10/19 22:13:45
特定ファイルだけ?
ハードディスクが死にかけてるとか
390:デフォルトの名無しさん
09/10/19 22:18:01
ウィルスチェックoffにして開いてみれ
391:デフォルトの名無しさん
09/10/19 22:19:53
他のファイルのシートと連動させてるようなのだと
ファイルの置き場所変わっただけで
リンク先行方不明連発で死亡とかあるから
Excelきらい
392:388
09/10/19 22:54:19
>389
特定ファイルだけです。
会社で作成したデータ集計用のファイルです。
これ1つだけが異常に重くなり、開く時に
CPU100%を食う状況になっています。
>390
ウィルスチェックoffにすることは出来ないです。
会社で常にネットワーク接続されてるもので…。
393:デフォルトの名無しさん
09/10/19 23:22:01
>>388
ここは Excel VBAスレなんでスレ的に考えると
VBAの処理が 異常に時間がかかってるのでは?
原因として
・VBAのコードを変更した為に 異常なループが発生した
・元々のVBAのコードにバグがあって あるデータの組み合わせで
異常なループとなった
とか?
だとすれば
とりあえずオープン時実行するイベント処理停めてみたら?
イベントプロシージャの先頭に Exit Sub を入れてみる
394:デフォルトの名無しさん
09/10/19 23:31:32
>>392
ローカルにコピって
スタンドアロンのPCでテスト汁
さらにウィルスチェックoffにして開いてみれ
395:デフォルトの名無しさん
09/10/19 23:46:05
>>392
xlbファイルを削除する。
CドライブをExcel*.xlbで検索してみて。
396:デフォルトの名無しさん
09/10/19 23:58:33
>>391
そんな使い方しないよ。
397:385
09/10/20 00:54:42
387さんありがとうございます。
値を保存するという便利な方法があったんですね。
勉強になります。おかげさまで単語帳っぽくなりました。
残りのチェックボックスにかかわる部分ですが、もう少し努力してみます。
ただ
・チェックを各英単語ごとに反映させる方法
・3回チェック済みの英単語を非表示にする方法(削除ではなく)
これらがどうにもできそうにないです… すんません
チェックボックスにチェック入れた単語のどこかの列に、何かしら数字など加え
その値を返して、状態を判断することしか思いつかないのですが、
何かもっと良い方法ありますかね?
398:デフォルトの名無しさん
09/10/20 01:21:27
とりあえず出来る方法を思いついたなら、それでやればいい
その方法だとこんな問題がある、とかならそれを質問すればいい
もっと良い方法とか漠然と聞かれると速度房がアップ始めるぞ
399:384
09/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:デフォルトの名無しさん
09/10/20 10:28:27
あらあらこんなに汚しちゃうなんて……イヤラシイ子ね……フフフ
401:デフォルトの名無しさん
09/10/20 12:38:07
ここに速度厨なんている?
俺は速度より美しいか汚いかにこだわるが、たまに速度厨と勘違いされる。
汚いのは遅いって大体決まってるけどな。
そこの君、お前だよw
402:デフォルトの名無しさん
09/10/20 19:25:43
>>385
完成したらサンプル見せてください。お願いします。
403:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/20 21:21:06
>>401
誰を煽ってるんだよw
唐突過ぎてわろたわ
405:デフォルトの名無しさん
09/10/20 21:49:07
>>403
100 という文字列での 1の部分でヒットしているみたいね
とりあえず下記ではどう?
Set rng = ActiveSheet.Range("A1:A11").Find(1, LookAt:=xlWhole)
406:デフォルトの名無しさん
09/10/20 21:56:20
Find関数はいろいろとバグがある。
407:405
09/10/20 22:08:06
>>406
たしかに今回の場合だと
セルの表示形式を数値にすると ヒットしなくなるね
408:デフォルトの名無しさん
09/10/20 22:09:02
たしかにオートフィルタとかのVBAの使い勝手がいい
409:392
09/10/20 22:43:00
解決しました。
tmpファイルを全て削除してみたところ、
かなり軽減されましたがまだ反応が鈍かったため、
思い切って新規エクセルに全て
コピーしてみました。
結果、快適に動くようになりました。
おまけにサイズも400kbまで小さくなりました。
410:デフォルトの名無しさん
09/10/20 22:57:36
>405
有難うございます。
明日になってしまいますけど、試してみます。
上手くいったら、その時に
LookAt:=xlWhole
の意味を理解したく教えて下さい。
411:デフォルトの名無しさん
09/10/20 23:29:44
特定の文字列にヒットする条件ならワークシート関数が強力だが
勉強しはじめなら、セルを一個一個確認してループさせる手法からハイルべき
特にエクセルVBAなら
412:405
09/10/20 23:37:10
>>410 & 411
>>411 の意見には賛成です
今回の場合は特に
>>410 の質問の回答ですが
Findは Excel本体の検索とほぼ同じものです
マクロの記録をいろいろしてみると分かると思いますが
"完全に同一のセルだけを検索する"です
それと>>407 へ書いたけど
セルの表示形式が数値だと失敗するかもです
一応 標準形式だとうまく検索できたのだけど
413:デフォルトの名無しさん
09/10/21 07:11:50
Findメソッドは基本的に文字列を検索するもんだ。
まさか数値を検索してバグがあるなんて言ってるんじゃねーだろうな。
414:デフォルトの名無しさん
09/10/21 13:53:11
ちょっと暇なときにVBA勉強しようと思うんですが、勉強するなら2003と2007どっちがいいですか?
415:325
09/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:デフォルトの名無しさん
09/10/21 15:37:47
>>414
自分が持ってんのがどっちなのかによるでしょ。
今からなら2007の方が良いのかなとは思うけど。
417:デフォルトの名無しさん
09/10/21 16:11:22
>>416
ありがとうございます。持ってるのが2000と2007だったので2007勉強することにしました
418:デフォルトの名無しさん
09/10/21 20:02:12
2000と2007しかもってないのに2003を選択肢にするとは・・・できる
419:デフォルトの名無しさん
09/10/21 20:03:45
>>415
URLリンク(q.hatena.ne.jp)
これでやってみな。
ヒントはきちんといかそうぜ。
420:410
09/10/21 21:43:51
>411-412
上手くいきました。有難うございます。
>413
そのまさかなんですが・・・
なんとか上手くいきました。独学&ヘルプ@2007ではなかなか上達しないですね。今度、本屋行ってきます!
421:デフォルトの名無しさん
09/10/21 22:04:58
いやバグはあるよ。
422:デフォルトの名無しさん
09/10/21 22:09:25
【合法】みんなズッキーニでヘヴン状態しようぜ!!
スレリンク(yasai板)
423:デフォルトの名無しさん
09/10/21 22:51:50
初心者です。質問させてください。
XP、office2000において、onactionで呼び出すsub hogeにsingleの引数を複数渡したいのですが、どのようにすればよいか教えてください。
.onaction("'hoge, arg1,arg2'")
とかだとうまくいきませんでした。
424:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/21 23:52:34
二十判定は出来ない
変数とかに格納したり論理結合したり
ただ1か2のどちらかなら、文字列結合すりゃいい
426:デフォルトの名無しさん
09/10/21 23:58:26
>>425
了解しました
427:デフォルトの名無しさん
09/10/22 09:32:17
>>423
.OnAction = ”'hoge””arg1””,””arg2””'”
428:デフォルトの名無しさん
09/10/22 11:55:51
java経験しかないまったくの初心者ですが、質問させてください
列AQの行n1の文字列hoge1を取得して、hoge1を列Cより検索、
発見したらその行n2の列Bの文字列hoge2を列AUのn1のセルに代入
これをAQの行全てで実行したいのです
Cにおいてhoge1が重複することはありません
どうかよろしくお願いいたします
429:デフォルトの名無しさん
09/10/22 12:04:24
vlookup
430:デフォルトの名無しさん
09/10/22 12:21:27
何行あるかしらんが、列全部にvlookupに限らず参照判定関数入れるのは
そーゆーときは配列に流して連想しる
431:デフォルトの名無しさん
09/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
09/10/22 14:38:41
>>419
そのURLはググってる最中に何度か訪れたんですけど、
ちょっと私には扱えそうもなかったんでスルーしてたんですけど、
頑張って調べながらやってみたら2~3度エラーが出ましたが、
希望通りアップロード出来ました!誠にありがとうございました。
一年分の便秘が治ったようなすがすがしい気分ですw
433:デフォルトの名無しさん
09/10/22 15:16:28
>>431
no
434:325
09/10/22 15:22:42
>>419
すいません、これってLZHファイルとかは扱えないんでしょうか?
TXTやSLK形式は成功したんですけど、LZH形式はエラーになったんです・・・
435:434(325)
09/10/22 15:26:16
自己解決しました。
LZH形式もいけました。ファイル名が不味かったようです。
436:434(325)
09/10/22 15:28:23
連投すみません。
LZH形式、エラーこそ出ませんでしたが、解凍すると文字化けしてまいした。
437:434(325)
09/10/22 15:46:49
再度自己解決しました。.typeと.charaset外したら正常に解凍出来ました。
スレ汚しすみませんでした。逝ってきます。
438:デフォルトの名無しさん
09/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)
09/10/23 09:54:04
>>419さんの方法でアップロード解決したんですが、半角カナ等のファイル名をうpすると、
実行時エラーになります。回避する方法ありますでしょうか?
D&Dでうpすると正常に出来るんですが・・・・
440:431
09/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:デフォルトの名無しさん
09/10/23 12:20:06
>>439
エンコードでぐぐりな。
442:デフォルトの名無しさん
09/10/23 12:29:34
>>440
そんなんで完成?
Findメソッドの引数が1個だけって大丈夫カヨ
WhatとLookInとLookAtの最低三つは必要じゃないの?
443:デフォルトの名無しさん
09/10/23 13:52:52
>>442
一応ちゃんと動作しましたよ!
今回一回だけ動けばいいマクロなので、結果に間違いがなければOKです!
444:デフォルトの名無しさん
09/10/23 14:17:40
>>443
そりゃたまたまでんがな。
何もいじくってない状態じゃ部分一致だが、それでいいの?
445:デフォルトの名無しさん
09/10/23 14:28:40
本人がOKってんだからいいんじゃね?
446:デフォルトの名無しさん
09/10/23 14:38:09
>>444
う、もしかして上手くいったと勘違いしてるだけなんですかね…
codeはxx01みたいな形で、nameは文字列(重複部分多々あり)なんですが
ちゃんと調べてみます!
447:お願いします><
09/10/24 01:26:35
VBA初心者です。
学校の宿題で
「y=sinXとY=Xの2本の直線で囲まれた面積をVBA関数を用いて求めなさい。」
という問題がでました><
ですが、今日初めてVBAという言葉を聞いたぐらいですので、まったく分かりません( ;∀;)
どなたか記入するコードを教えて頂けないでしょうか?
448:デフォルトの名無しさん
09/10/24 01:45:00
学校の宿題は自分でやらなきゃダメ><
何の前提もなしにそんな宿題が出るはずないから、わからないのは貴方がサボっていたってことでしょ
449:デフォルトの名無しさん
09/10/24 02:20:06
宿題スレ池
450:デフォルトの名無しさん
09/10/24 02:45:13
>>447
これは酷いwww
これが社会に出て行くと思うと末恐ろしいな
451:デフォルトの名無しさん
09/10/24 10:22:29
sinXって直線なのかね
452:デフォルトの名無しさん
09/10/24 10:57:44
>>424
遅レスですが、こんなアイディアも。
Select Case Cells(4,1) & Cells(4,2)
case "11"
case "12"
453:452
09/10/24 10:59:38
>>425 見てなかった… すまん
454:デフォルトの名無しさん
09/10/24 11:43:07
セル参照の計算式
=G5*K3+M1
セル参照+数字の計算式
=F6*G6*3.14
数字のみの計算式
=15*21*45
この数式を区別して色分けする事は可能ですか?
せめて上2つと下1つだけでも区別できればいいんですが
455:デフォルトの名無しさん
09/10/24 11:47:42
>>451
正弦波だから、Y=1 から Y--1 までを往復する曲線かな。
Y=Xの直線とは1点交差するけど、2点とは交差しなんじゃないか?
よくわかんないけどw
456:デフォルトの名無しさん
09/10/24 12:13:36
だいたい2本の直線で囲まれる面積ってなによ
問題の意味すらわかんないならVBA以前の問題
457:デフォルトの名無しさん
09/10/24 12:25:46
非ユークリッド幾何だと日常的
458:デフォルトの名無しさん
09/10/24 12:31:59
大圏航路かよ 何年生の課題だ
459:デフォルトの名無しさん
09/10/24 13:43:37
>>454
手元にPCがないから確認できないけど、今ぱっと思いついた案が1つある。
セルに入力されている数式を取得し、文字列操作関数を使用し演算子の部分で区切る。
区切られた文字列を確認して全てにアルファベットが含まれていれば、セル参照あり、全く含まれていなければセル参照なし。
その他は混合。
どうでしょう?
文系のおいらの考えなので、バカかと思う方はたくさんいると思うけど。
460:デフォルトの名無しさん
09/10/24 13:46:03
>>459だけど一部訂正。
「セル参照あり」→「セル参照のみ」だったよ。
461:デフォルトの名無しさん
09/10/24 15:08:03
問題文を写し間違えただけだろ
Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ
片方だけ積分して倍すればいい
462:デフォルトの名無しさん
09/10/24 19:24:38
>>459
0.100000000E+00
463:デフォルトの名無しさん
09/10/24 19:26:00
>Y=sinXとY=Xは3点で交わって、囲まれた領域は2つだ
kwsk
464:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/24 21:22:20
>>462
最初に「=」が付いてるか確認すれば問題ないと思う。
466:デフォルトの名無しさん
09/10/24 22:22:36
0.100000000E+00 +0.100000000E+00
467:デフォルトの名無しさん
09/10/24 22:27:46
絶対に関数は使われていないのだろうか?
468:デフォルトの名無しさん
09/10/24 22:36:56
"=*[A-Z][1-9]*"や "=*[A-Z]$[1-9]*"って何を表してるんですか?
469:デフォルトの名無しさん
09/10/24 22:42:26
性器
470:デフォルトの名無しさん
09/10/24 22:44:17
>>467
そういう話になってくると正規表現?
471:デフォルトの名無しさん
09/10/24 23:17:41
正規表現だと、
*[A-Z]$[1-9]*
の、文末一致or後方参照の $ が説明付かない。
472:デフォルトの名無しさん
09/10/25 00:45:26
userformのtext1に入力された値を使うとき、
userform.text1と書くと思いますが、
text1、text2と順番に参照していきたい時、イメージとしては"text"&i のように変数で指定したいんですがエラーになってしまいます。
何かいい方法はないでしょうか?
473:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/25 01:25:54
>>472
配列変数を使う(text1とtext2を配列変数に突っ込んで使う)
475:464
09/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:デフォルトの名無しさん
09/10/25 02:00:43
>>474
ありがとう
477:デフォルトの名無しさん
09/10/25 02:59:44
>>475
URLリンク(msdn.microsoft.com)
少しは調べろよカス
478:デフォルトの名無しさん
09/10/25 08:59:51
>>475
だから、正規表現じゃないって言ってるのだよ。
=$A$1 を判定させるマッチパターンは、
pattern = "=\$[A-Z]\$[0-9]"
479:デフォルトの名無しさん
09/10/25 15:58:07
色々教えてもらいここに辿り着きました
1つのフォルダーにあるいくつかのcsvファイルの全てのA列からC列のデータを削除したいのです
そういうvba作ってもらえませんか?
どうかお願いします
480:デフォルトの名無しさん
09/10/25 16:05:55
>>479
>>2の★5を100万回読むんだ
481:デフォルトの名無しさん
09/10/25 16:06:04
了解
待ってな
482:デフォルトの名無しさん
09/10/25 17:02:08
>>479
いくらくれる?
483:デフォルトの名無しさん
09/10/25 22:05:39
>>482
お金は…ないんです(T_T)
484:デフォルトの名無しさん
09/10/25 23:30:41
ユーザーフォームでつくったコンボボックス等をダブルクリックして編集画面を開きます。
ここに標準モジュールで作ったプロシージャをコールしても反映してくれません。
なぜでしょう?
485:デフォルトの名無しさん
09/10/25 23:38:10
・何がしたいのか
・現状どうなっているのか
・それに対する自分の意見
・自分の環境は何なのか(CPU,OS,Office)
・サンプルをアップローダーに。
このくらいは質問するなら情報として欲しいわ。
486:484
09/10/25 23:48:06
なんか勘違いしてたっぽい。
コンボボックスにあらかじめ入れておく項目は標準モジュールからは呼び出せないか。
487:デフォルトの名無しさん
09/10/25 23:54:43
最後疑問系なの
質問?
コンボボックス
リストボックスのリストは標準モジュールで指定出来るでしょ
値を入れておきたいならValueに入れればいいでしょ
488:デフォルトの名無しさん
09/10/26 09:00:41
マクロ記録
エクセルでCSV開く
該当行削除
保存
記録停止
↑で出てた正規表現ってよくわかんないんだが何が出来るの
489:デフォルトの名無しさん
09/10/26 09:57:05
日本語でOK
490:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/26 20:36:59
>>1の★4に該当しますが、他にいいスレがあったら誘導してください。
Long型の数値からリトルエンディアンByte(4)型に分割したいのですが、どのようにしたらよいでしょうか。
VBだとLong型が8バイトと聞いたので、こちらに質問しました。
よろしくお願いします。
492:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/26 23:13:30
>490
2007は知らんけど2003ならば
Application.StatusBar = False
494:デフォルトの名無しさん
09/10/27 00:26:15
>>491
VBAのLongは4バイトです
8ビットずつマスクとシフトしながら分割してください
495:デフォルトの名無しさん
09/10/27 00:27:36
>>492
VBSはスレチ
496:491
09/10/27 01:21:41
>>494
ありがとうございます。
ただ、そのままするとマイナスの値のときにおかしくなってしまいます。
もうすこし詳しく教えていただけないでしょうか。
497:デフォルトの名無しさん
09/10/27 01:34:34
>>496
MSBだけ別の変数にとっとけばいい
498:デフォルトの名無しさん
09/10/27 01:41:11
492はどうみてもJavaSな件
499:491
09/10/27 16:25:08
>>496
ありがとうござました。
マイナス関係なくできました。
難しく考えすぎてたみたいです。
500:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/27 20:01:28
Dim col As New Collection
502:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/27 23:15:04
解決しました。
理由は先ほどエラーが出ていたときは1度目の実行はうまくいくのにエクセルファイルを閉じても
エクセルのプロセスが残ったままになっており2度目はその影響(?)で失敗していました。
コード自体に問題はなく、参照設定のexcelオブジェクトの優先順位を一つ上にあげてやれば、
正常に2度目以降も動くようになりました。
ただ、凄く不安定な正常性ということなので、根本を解決できる何かがあれば
是非アドバイスおねがいいたします。
504:デフォルトの名無しさん
09/10/27 23:45:25
残ってるのはDBSオブジェクトじゃね
エラー出たときとか終わるときにちゃんと閉じてる?
505:デフォルトの名無しさん
09/10/28 00:36:54
そこでした。
オブジェクト指定をしっかり作ったエクセルアプリケーションにしていなかったり、
いきなり.Rangeにしてたりで、タスマネに5個ぐらいEXCELってありましたw
コード多すぎて無理臭いので、クエリのほうから指定することにしました。
以降はいい加減に組まないように注意せねばでした。
ありがとうございました
506:デフォルトの名無しさん
09/10/28 10:55:56
エクセルのマクロの問題に対する質問はここでいいですか??
507:デフォルトの名無しさん
09/10/28 11:13:24
OK
バージョン書いてね
508:デフォルトの名無しさん
09/10/28 13:01:21
ここは宿題かたずけますスレって考えてもいいんですか
509:デフォルトの名無しさん
09/10/28 13:19:44
>>508
質問の内容とタイミングによる
時間帯と曜日によって、宿題は自分でやれってレスが付くだけのこともあるし
VBA厨が喜んでプログラムを作ってくれることもある
510:デフォルトの名無しさん
09/10/28 13:55:04
とりあえず書いてみます
Excel2003
めっちゃ初歩的です…
Do~LoopかForーNextを使わなければならないみたいです。
1~10までの整数で
偶数の和をD1
奇数の和をE1
に表示せよ です。
511:デフォルトの名無しさん
09/10/28 14:02:20
ExcelはスプレッドシートソフトでVBAの練習台じゃ
ありません。
VBAの練習をしたいのなら、Accessでやれっつーの
(AccessではExcelでやれっていわれるかも)
てなわけで、Active BASICがVBAと文法互換だったら
いいのになとおねだりしよう
【サーバー各所】ActiveBasicその11【冬眠中】
スレリンク(tech板)
512:デフォルトの名無しさん
09/10/28 15:07:11
>>511
あほか。Access持ってる奴なんてごく少数だろうが。
513:デフォルトの名無しさん
09/10/28 15:22:58
ACCは初めにオブジェクトアクセスを経由する必要があるから、VBAの初学には向かないよ、と思ってる
エクセルなら(初めの内は)オブジェクト志向を意識しないでコードが組める上、マクロの記録がある
マクロの変換じゃなくて、操作をVBAに変換するから、体感出来る点が非常に優位
逆に初めからRecordset操作を理解したほうが後が楽かもしらんけども
514:デフォルトの名無しさん
09/10/28 16:37:27
>>513
VBA扱う場合はやっぱフォームから入るべきだろ。
テキストボックスで入出力でいいじゃん
Excelの場合CellをVBAで扱うのは、VBAだけじゃ不十分で
VBAの基本とExcelの基本が十分出来上がって独立
共存できるようになってからじゃないと両方駄目になる悪寒
Accessの場合はVBAが出来てからテーブルやらクエリ
やら覚えていく方法がとれる。
515:デフォルトの名無しさん
09/10/28 17:06:49
別のスレでやれ
516:デフォルトの名無しさん
09/10/28 18:30:39
VBAを使用してアルバイトの出勤簿を作成しています。
例えば、セルJ6に名前をInputBoxを使って入力した時に、セルJ5にフリガナをカタカナで
自動で表示する場合はどのようにすればよいでしょうか?
517:デフォルトの名無しさん
09/10/28 20:57:08
フリガナにはそれ用のワークシート関数を使う
518:デフォルトの名無しさん
09/10/28 21:23:03
PHONETIC関数でしょうか?
フリガナを表示しないで、氏名(漢字)が表示されてしまいます。
519:デフォルトの名無しさん
09/10/28 21:39:35
大した人数でないなら
名前と読み方リスト作ろうぜ
520:デフォルトの名無しさん
09/10/28 21:44:07
読み方リストを作り、セル参照を使うということですか?
521:デフォルトの名無しさん
09/10/28 21:51:46
でもなんでも
どう料理するかは考えてないけど
テキストボックスに名前入れると読み仮名ラベルに表示するとかかな
522:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/28 22:07:25
ワークシート関数を使うことに決めました。
524:デフォルトの名無しさん
09/10/28 22:08:51
Mod 演算子を使わないのは速度厨なせいでつか?
525:517
09/10/28 22:16:47
URLリンク(detail.chiebukuro.yahoo.co.jp)
なるほど、セルに直接入力しない場合で、phoneticを使用する場合は工夫が必要だね
526:デフォルトの名無しさん
09/10/28 22:40:03
ワークシート関数はVBAからでも呼び出せるっちゃ呼び出せる
527:デフォルトの名無しさん
09/10/28 22:49:49
変更して保存
↓
Excelを終了
とするにはどういうふうに構文をかけばよいでしょうか?
528:デフォルトの名無しさん
09/10/28 22:59:33
>>527
Application.Quit
529:デフォルトの名無しさん
09/10/28 23:49:49
そういえばかなり前に1からnまでの和をループを回して求めよってのに
For i = 1 To n
Next
和 = (1 + n) * n / 2
みたいなのがあったな。
530:デフォルトの名無しさん
09/10/28 23:53:53
>>522
ビット演算なんて分るやつあまりいないんだから、そういう知ったかぶりの回答はやめましょうね。
531:デフォルトの名無しさん
09/10/29 00:19:50
奇数 = 0
偶数 = 0
For i = 1 To 10 Step 2
奇数 = 奇数 + i
偶数 = 偶数 + (i + 1)
Next
Debug.Print 奇数, 偶数
532:デフォルトの名無しさん
09/10/29 00:26:27
>>530
>ビット演算なんて分るやつあまりいないんだから
え!そうなの?
533:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/29 01:18:45
>>533
ありがとうございます!!また頼むかもしれませんがよろしくお願いします。
535:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/10/29 09:15:12
>>532
officeのVBAだと使わないしねぇ
vbaだと知ってても使う場面がほとんど無い品
538:デフォルトの名無しさん
09/10/29 09:24:31
>>529
なにそれ面白い
ビット演算とか知識はかろうじてあるけどナニソレ
539:デフォルトの名無しさん
09/10/29 12:14:21
俺ならこうやって高速化するぜ
For i = 1 To n Step n
Next
和 = (1 + n) * n / 2
540:デフォルトの名無しさん
09/10/29 12:21:10
すまんが教えてください
vbaでie制御して、ieのframes(a)内を全選択してコピーしたい。
frames(a)を全選択することが重要で、frames(b)の情報は必要ないし、innerText等での情報取得は避けたい。
ExecWBとSendKeysでやってみたが上手く行かなかった。
やり方に問題があるのか、違う方法があるのか?
教えてください。
541:デフォルトの名無しさん
09/10/29 12:21:25
おれならこうだな
for i = n to n
next
542:デフォルトの名無しさん
09/10/29 12:46:51
速さならこっちかな?
For i = 1 To n
Exit for
Next
和 = (1 + n) * n / 2
543:デフォルトの名無しさん
09/10/29 13:08:40
さすがにこれは反則だろうな
Goto aaa
For i = 1 To n
Next
:aaa
和 = (1 + n) * n / 2
544:デフォルトの名無しさん
09/10/29 13:21:48
和 = (1+n)*n/2
Debug.Print 和
ループ
こうか!
545:デフォルトの名無しさん
09/10/31 10:22:29
質問させてください。(Excel2003 XP)
ExcelでRS-232-C通信を行おうとしております。
大昔に一度、何かを見ながら自作したマクロを参考にやっています。
当時はMSCommを使用しておりましたので、同様にツールボックスから
MSCommをフォームに貼り付けると、
「サブジェクトは指定された操作に対して信頼されていません。」
と表示され、貼り付けることができません。
Webで調べると、どうやら
ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
を実行したことで使用出来なくなってしまったようです。
対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
削除して回るのも非現実的です。
MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
更新プログラムの削除や新たに何かをインストールしなくても使用できる
方法はないでしょうか?
また他にWinAPIで行う方法もありましたがこちらで行う方法が主流?
なのでしょうか?
よろしくお願いします。
546:デフォルトの名無しさん
09/10/31 13:10:43
>ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)
>を実行したことで使用出来なくなってしまったようです。
>対策はこれを削除とのことですが他へ配布したりPC乗り換えごとに
>削除して回るのも非現実的です。
>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?
自分で何言ってるか分かってる?
547:545
09/10/31 15:21:48
>546
失礼しました。
>MSCommが分かりやすくて簡単ですのでこれを使用したいのですが
>更新プログラムの削除や新たに何かをインストールしなくても使用できる
>方法はないでしょうか?
MSCommのようなコントロールが分かりやすくて簡単ですのでこの様なコン
トロールを使用したいのですが更新プログラムの削除やフリーのアドインなど
をインストールしなくても使用できる方法はないでしょうか?
(MS系の更新インストールや代替コントロールのインストールは可)
WinAPIはサンプルを見てもまださっぱり理解できないので出来れば避け
たいのですが、今から作るのであればコントロールではなくWinAPIで行う
べきでしょうか?
よろしくお願いします。
548:デフォルトの名無しさん
09/10/31 19:18:22
MSCommを使いたいなら対策は「ActiveX Killbits に対するセキュリティ更新プログラム (KB969898)」を削除
549:デフォルトの名無しさん
09/10/31 19:33:45
セキュリティパックとは、古く多少リスキーでありながらも
公開されていたDLLとかの機能を殺してしまってモノシリッ
ク化しつつある疑似カーネル群のコードを間接的に使うように
することだったんでつね
550:デフォルトの名無しさん
09/11/02 11:29:29
>>545
URLリンク(ziddy.japan.zdnet.com)
これはどう?
551:545
09/11/02 22:21:47
>550
ありがとうございます。
投稿前にこれも試したのですがVB6が入ってないから
ダメと言われました。
WinAPIに挑戦してみます。
ありがとうございました。
552:デフォルトの名無しさん
09/11/03 05:55:57
>>551
EasyCommというモジュールを使うと、素人の自分でも簡単に機能実現出来ました。
553:デフォルトの名無しさん
09/11/03 13:19:49
>>551
VB6のSP6のruntimeのみってvectorとかに無い?
#自分はsp5の使ってるけど
554:デフォルトの名無しさん
09/11/03 13:36:56
Vector のダウンロード数が一番になってるランタイムって、
コメント読んだらシステム破壊の事が書かれてて怖いわw
俺は昨日ソフト更新系のサイトでコレを発見したので入れてみた。
URLリンク(www.hmpage.jp)
セットアップがVB6のプロジェクトのタイプなので、インストール後に
アンインストールして、ライブラリ類は全残しでいけた。
555:デフォルトの名無しさん
09/11/03 14:58:37
Frameworkさえいれておけば.NETの機能って使えるんだな
最近知ったけどStringBuilderとか使えて便利だ
556:デフォルトの名無しさん
09/11/03 15:35:51
>>555
知らんかった・・・・・
#まともなhash使えるとかなりうれしいなぁ
557:デフォルトの名無しさん
09/11/04 21:19:25
AOD.NET って使える?
558:557
09/11/04 21:20:45
訂正
ADO.NET
559:デフォルトの名無しさん
09/11/04 22:32:00
VBAで使えるのはADOであってADO.NETは使えないんじゃなかった?
俺は2007だけどADOでアクセス(という言い方でいいか)してる。
560:デフォルトの名無しさん
09/11/04 23:40:03
CreateObjectでインスタンスを無理やり生成してやれば使えるんじゃね
まぁ、そこまでしてやるもんでもないと思うしVSTOでも検討した方がいい
561:デフォルトの名無しさん
09/11/07 09:08:12
以前お世話になりました270です。
ネット検索で検索ヒット件数を取得し
A1A2・・・にある単語の件数をB1B2・・・に記録したいのですが、
グーグルでは取得拒否にあってしまい、ヤフーで挑みたいのですが、
送信するのに文字を %5%7 とかにしないといけない(どういうキーワードに
つなげるかもわからない)みたいなのですが、
この送信ワード URLリンク(yahoo.co.jp) %5%6
とかの、?????と 文字の変換方法を教えていただける方いらっしゃいませんでしょう
か?
562:デフォルトの名無しさん
09/11/07 09:13:04
アタックはやめろ
563:デフォルトの名無しさん
09/11/07 09:39:23
yahooのデベロッパーのサイトでは一日5万まで使って開発してくれ
というのです。別段500でもいいから自動化させたいのですが・・・
そこには例文がなくて・・・どこかにフォーラムでもないでしょうか?
URLリンク(developer.yahoo.co.jp)
564:デフォルトの名無しさん
09/11/07 11:05:12
Yahoo! JAPAN Web APIはあきらかにスレ違い
565:デフォルトの名無しさん
09/11/07 17:28:03
excel vbaで他のブックのセルデータを参照するにはどうすればよいの?
566:デフォルトの名無しさん
09/11/07 17:30:07
上、ちなみにexcel2003です。
Workbooks(“ブック名.xls”).Worksheets(“シート名”).Activate
これをやっても、インデックスが有効範囲にありませんが出ます。
どなたかお願いします。
567:デフォルトの名無しさん
09/11/07 18:13:11
フォームのTextboxにドラック&ドロップで任意の列データを持ってくることはできますか?
やりたいことは、2つの異なるブックのフォームの列データーを他のブックの列データーと比較をしたいのです。
568:デフォルトの名無しさん
09/11/07 20:06:01
>565-567
つマクロの記録
569:デフォルトの名無しさん
09/11/08 00:28:16
B列に1万近くの数値があり、そこから特定の範囲(例えば100~101など)に適した数値を
指定したセルに抽出し、複数ある場合はそのしたに並べて抽出するようなプログラムを作りたいのですが、
どのようにしたらよいでしょうか?
Excel2003です
570:デフォルトの名無しさん
09/11/08 00:32:48
VBAでRSSの読み込みって出来ますか?
571:デフォルトの名無しさん
09/11/08 09:22:15
>>570
こんなとこで聞くよりgoogleで「VBA RSS」で検索すれば
よっぽど早く結果に到達できますよ。その上でわからないことを
質問したほうが効率的では?
572:デフォルトの名無しさん
09/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-