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/
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メソッドは基本的に文字列を検索するもんだ。 まさか数値を検索してバグがあるなんて言ってるんじゃねーだろうな。