1 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 12:34:58 ] 過去スレ 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/ 13 pc12.2ch.net/test/read.cgi/tech/1254281104/
331 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:38:19 ] webページから一部分だけエクセルに取り込むコード作りたいんだけど、webクエリだと大きく取り込んでしまうので困ってます。 具体的には、ヤフーファイナンスからコードと社名と業種だけ(他はいらないです)欲しいんだけど、そういうピンポイントで取り出すみたいな事出来ますか? また、そういうデータ取り込み系統の技術を得るための参考書籍とかあったら紹介して下さい。
332 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:59:06 ] >>331 Webクエリなら特定のテーブルだけを取り込むこともできるけど、 ヤフーファイナンスはページ全体が大きなテーブルになってるから一部を取り出すことはできない。 こういう時はページのソースを文字列変数に読み込んで、 タグなどを調べながら必要な部分だけをセルに入れることになる。 あと、やりたいことがピンポイントで決まってるなら書籍よりGoogleで検索した方が早い。 サンプルも必要な部分をコピペするだけだし。
333 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:05:25 ] レスありがとう。 自分が目指してるのは、多分こういう感じのを応用させるんだろうなとは思ってるんだけど(下、動画のアドレス) ttp://www.youtube.com/watch?v=MVsh1XnfYOw だんねんながらVBAスタンダード程度のレベルでは意味不明でしたw
334 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:20:59 ] >>333 その動画サイトからソース置いてあるページにリンク貼ってあるし ダウンロードして改造して使えばいいじゃん。 そのビデオ見てわかんないんだったら、ここで同じこと説明しても やっぱりわかんないんじゃないの? 企業コードが知りたいだけなら、そういう一覧表がきっとどこかにあるはず。 検索してみたら?
335 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 16:45:51 ] >>331 新・ExcelVBAで極めるシステムトレード 〜最強パワーアップ編 正規表現による取得方法を書いてる
336 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 18:44:01 ] >>331 Sub test() Dim URL As String Dim WebTbl As String URL = "URL;quote.yahoo.co.jp/m3?u " ' 読み込むテーブルNoを指定する WebTbl = "4" With ActiveSheet.QueryTables.Add(Connection:=URL _ , Destination:=Range("A1")) .WebFormatting = xlWebFormattingNone .WebTables = WebTbl .Refresh End With End Sub ちょっと違うかな?
337 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 19:00:35 ] >>331 ごめんorz ちょっとどころか全然違ったねw
338 名前:デフォルトの名無しさん [2010/02/18(木) 22:19:02 ] VBAでJavaにおけるExceptionみたいなものってあるのでしょうか? つまり何らかのエラーがおこった時点でどのメソッドに強制的に移動するみたいな感じで
339 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:40:22 ] 色々レスありがとう。 エクセル入ってるのが2ndPCなので後でコードコピーして試してみる。 あと、オススメ本は明日本屋で探してみます。 コレで勉強してたんだけど、少し不足を感じてたので助かったわ。ちなみに誤字脱字も多いしあんましオススメしない。 ttp://www.tradersshop.com/bin/showprod?c=9784775990391 ttp://www.tradersshop.com/bin/showprod?c=9784775990513
340 名前:デフォルトの名無しさん [2010/02/19(金) 02:24:55 ] 〜 Range("K" & Rows.count).End(xlUp) みたいにK列を固定させているのですが こう書いた場合Excelのシートを列削除したり追加したりするたびに 書き変えなきゃいけないのですが 列を追加したりすると自動的に変更って出来るのでしょうか?
341 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 07:40:16 ] >>340 目的の列を探すコードを追加すればいいんでない?
342 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 20:43:17 ] >>340 下記どうでしょう? 案1 Range("K1").End(xlUp).Offset(r, c).Value r, c に増減した行・列の数を代入すると、 移動した先のセルでValueなどRangeの機能を使えます。 案2 ターゲットのセルがsheet1のD1であるとする。 sheet2のセルA1に式"=Sheet1!D1"を記入する。 VBAからは、常にsheet2のセルA1を読む。 例えば、列Bを削除してセルD1がC1に移動した場合、 sheet2のセルA1に記入してある式は、 自動的に"=Sheet1!D1"から"=Sheet1!C1"に変わって追いかけてくれる。
343 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:54:00 ] 初心者質問でごめんなさい for i = 1 to 33 良くある構文ですけど、iの値を16進法で返す事って出来ますか 9の次は10でなくてAで返したいんですけど。
344 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 23:59:28 ] Hex(i) ってするってこと?
345 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 00:13:19 ] 質問させてください。 Excel2000でSortメソッドを使うVBAコードを走らせているとき、 そのExcelウィンドウをバックグラウンドにすると、Sortメソッドの部分だけが滅茶苦茶遅くなります。 (計測するとフォアグラウンドの時と比べて10倍くらい時間が掛かる) フォアグラウンドに切り替えると高速に動作します。 環境はXPpro、Excel2000で、Core2Duo・Corei7 いずれのPCでも再現します。 パフォーマンスオプションはバックグラウンドサービスに設定しています。 これって仕様なんですかね。Excel2003や2007だと改善されていますか?
346 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 01:50:57 ] >>344 ありがとうございます。恥ずかしながらHexという関数を始めて知りました。 出来ればストレートに大文字で返して欲しいですけど、これでかなり楽になりました。
347 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 09:09:59 ] >>340 K列またはK列の一番後ろのセルに名前をつければいいんじゃね?
348 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2010/02/20(土) 09:46:08 ] >>340 >>341 もいいね。 行追加がないものとして、列見出しが"日付"だったら Set target = Rows(1).Find("日付").EntireColumn.Cells MsgBox target(target.Count).End(xlUp).Address とか 行追加があるならRows(1)をCellsにでもすればいいだろう
349 名前:デフォルトの名無しさん [2010/02/20(土) 15:59:46 ] セルの計算式を下記のようにして =TEST() 標準モジュール関数TESTを呼出した場合、関数側で 呼出し元のセルの位置を取得するにはどうしたらいいですか? アクティブセルの位置ではなく、関数呼出しの計算式が 書かれているセルを知りたいです。 Windows7、Office2007です。 よろしくお願いします。
350 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 16:22:21 ] >>349 関数の引数にRow,Column
351 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 16:24:48 ] ttp://www.ne.jp/asahi/hishidama/home/tech/excel/workfunc.html#Application.Caller
352 名前:デフォルトの名無しさん mailto:sage [2010/02/20(土) 17:36:52 ] >>350 >>351 ありがとうございます。 Application.Caller と Application.Volatile を使い それらしい動きにはなったのですがセルの再計算時の挙動に 癖がありますね。 別シートをいじってからシートを切り替えると#VALUE!になって しまい、元のシートで再計算しなおしてやらないといけません。 関数を諦めて計算式で全部やる方向も検討してみます。
353 名前:286 mailto:sage [2010/02/20(土) 20:43:44 ] C A B D F
354 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 15:36:41 ] ソートの話が出たので便乗するんだが、 結局、どのソートが一番速く安定性があるのか。。 エクセルのVBA限定の話で、 項目数が100程度の場合、項目数が100,000の場合、ほぼ並んでいる場合、まったくのランダム。 状況によっていろいろあるんだろうが、とりあえずこのソートをよく使うっていうのを教えてくれ。
355 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 16:25:34 ] エクセルのVBA限定の話ならエクセルのソートをまんま使っちゃう 中身がなんなのかは知らんwだれか知ってる?
356 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 17:12:06 ] クイックソート
357 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 18:27:22 ] 一般機能優秀じゃない? わざわざコードを組むより、一般機能や関数を使った方が早い場合が多い ・・・とどっかに書いてあったw
358 名前:345 mailto:sage [2010/02/21(日) 21:13:08 ] >>345 のような現象は自分だけなのかな? 仕様ならばSortメソッドを使わずにソートするしかない Sortメソッドの場合、常にエクセルをアクティブにしていれば問題ないけど、 エクセルを複数起動して同じコードを並列処理させる場合、 アクティブなエクセルでは問題ないけど 他の非アクティブなエクセルは極端に遅くなってしまう。
359 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:34:43 ] 先月自作のエロ画像処理ツールでクイックソートを使ったよ。 理由は使ったことが無かったから。 ソートのプログラムを書いたのは後にも先にもこれだけ。 DBのorder byとかエクセルの並べ替え機能さえ使えればプログラムで書くことはまず無い。
360 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:37:46 ] >>358 自動計算や画面更新を止めてもおそい?
361 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:43:26 ] 構造体の配列例えば、生徒(学籍番号、名前、身長、体重)を体重で並べ替える場合って 学籍番号や名前や身長も全部入れ替えるの?
362 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:47:48 ] 入れ替えないとデータが壊れるでしょ
363 名前:デフォルトの名無しさん mailto:sage [2010/02/21(日) 21:53:47 ] >>362 別の配列に学籍番号だけを取り出して ソートしてもとの配列と紐付けるとかはあり? 学籍番号、名前、身長だけなら入れ替えてもいいけど 他の項目が100個とかあったら大変じゃね?
364 名前:358 mailto:sage [2010/02/21(日) 22:39:11 ] >>360 もともと自動計算も画面更新も止めてます。 Sortメソッドを含むVBAコードがアクティブなエクセル上で高速に動作してる最中に、 デスクトップをクリックしてエクセルを非アクティブにすると、途端に実行速度が十分の一ほどになる。 再度エクセルをアクティブにすると高速に動作する。という状態です。
365 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 01:08:44 ] XPでExcelは2003を使用しています。 VBA(マクロ)を触りだして3日程です。 ブックA(1日の記録) ブックB(数ヶ月のデータ・縦に日付、横に種類や個数等) ブックAの日付入力箇所に、日にちを打ち込みます(マクロでは無く手打ち) ブックAのデータ入力箇所に、ブックBのデータを引用する為に ブックAを開いた状態で、「マクロを記録する」で ブックBを開き、ブックAに戻り手打ちした日付のセルをコピーして ブックBに移動して、ctrl+Fでコピーした日付を貼り付けて検索 検索した右側に、必要なデータがあるので、キーボードで右側を押して 目的のデータ(種類や個数等)をブックBからブックAにコピーしてペーストを繰り返す (繰り返す理由は、必要なデータが飛び飛びな為と、横に並んでいるのを縦に並べる為) コピペ終わると、ブックBを閉じる。 というマクロを作ってみたのですが 日付を変えて実行してみたり、VBA?を見てみると問題点が沢山ありまして 問題点1、Aで日付をコピーして、Bで検索時にペーストして検索する所で 2010/1/1をコピーして、マクロを作った為か 日付を2010/1/2に変更してマクロを実行しても 2010/1/1で検索した、データを引用してしまう 問題点2、検索した日付の横のデータをキーボードで右側に移動してコピーの部分で VBA?で見てみたところ、単純にあるセルをコピー となっているようなので 日付の問題が解決しても、検索した日付の右側ではなく あるセルをコピーしてしまう為、日付とは関係の無い特定のセルをコピーしてしまう 色々試したり、VBAで見たところ 問題点1は、検索時にコピペした日付では無く、マクロを記録した2010/1/1で検索しているので 日付を変更しても意味が無い?若しくは、検索自体がマクロで出来ない? 問題点2は、キーボードの右等の操作は記録されない 検索ではなく、オートフィルタを使い、特定の日付を1行だけにすることにより 行移動を無くせば解決?
366 名前:365 mailto:sage [2010/02/22(月) 01:09:58 ] 自分がしたい事を簡単にまとめると ブックAに日付を入力後、マクロ実行 ブックAに入力した日付に対するデータを ブックBから引用 日付等は、=today() で入力したいのですが ブックBのデータを引き出す為の、日付の部分が 2010年1月1日が、20100101 となっているので オートフィルタでデータを絞る為にも、20100101 というデータが必要なので 日付は手入力という手段しか無いと思いました 後は、ブックBをオートフィルタで絞りこんだとして データをAに入力したら、ブックBを閉じたいのですが オートフィルタを実行した後だと、「変更を保存しますか?」と 窓が出てくるので、出てこない様にするにはどうしたらいいのでしょうか 長くなって申し訳ないですが、よろしくお願いします
367 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 07:37:15 ] 少しは自分で書く努力しようぜ
368 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 08:39:56 ] year関数、month関数、day関数 オートフィルタは2種類 アプリケーションアラートの停止
369 名前:365 mailto:sage [2010/02/22(月) 10:08:10 ] >>368 その辺りを、調べてみますありがとうございました。
370 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:09:25 ] テキストボックスにInteger型のデータと文字列を結合して表示させたいのですがどう打ち込めばいいでしょうか? イメージ的には textbox1.text = integer型のデータ + "文字列" としたいのですが
371 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 10:14:05 ] >>370 integer型のデータ & "文字列" じゃ駄目か?
372 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 11:02:40 ] >>371 出来ました ありがとう
373 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 12:56:33 ] ソートの話の続きなんだけど、 一次配列100個の右4文字を昇順でソートするっていう場合は記述するしかないんじゃない?
374 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 14:36:56 ] >>373 セルに入れたくないならそうだろうね でもエクセルを使ってるからには どのみちセルにぶち込むデーターなんだろうし 右4文字を取り出した列を作ってやればいいんでない?
375 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 18:47:48 ] なぁ、EXCEL2000から2007に最近環境を変えなきゃならんオレに 表示とか環境設定みたいなのどうしてるか教えろ。 取り敢えず立ち上がったところから気に喰わないし自作DLLは変な文字吐くし泣けるんだわ。 他のスレで聞いてもいいんだけどVBA使ってる人に聞いてみたいんだ。 デフォルトのに慣れろってんならそうする。
376 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:49:33 ] >>375 2003と同じツールバーを出すサードパーティーのアドインがあったよ 即効で使わないといけないならとりあえずこれ 最近チェックしてないのでなくなってたらゴメン 2007に移行した人に聞いてみたら慣れたら2007のほうが使いやすいって言ってたので 時間的余裕があるなら耐えて使うかなw うちもまだ2003でふんばってまふ
377 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 19:54:38 ] Office 2007にOffice 2003互換メニューを追加する ttp://www.atmarkit.co.jp/fwin2k/win2ktips/1173oldmenu/oldmenu.html ↑を入れてるw
378 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 20:40:31 ] まあ、2010も同じ形式なので、諦めて慣れた方がいいような気もするけどね
379 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:05:50 ] とっくの昔に2007になれた。 2007のほうが使いやすいんだが、周りの全員がオレに聞いてくるのでうっとうしい。
380 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:06:21 ] >>376-378 サンクス フリーのアドイン見てみたけど、MSは基本このまま使えって言ってるって事みたいだね。 最初見たときマジでOOoに乗り換えようかと思ったわ。 XPの頃のPCがそろそろ更新のサイクルに来てると思うんだけど乗り換える人もある程度出てくるんじゃね? まああ、VBA関連のコードも書き換え(1から作り直し?)無きゃならんしオレがUIに慣れる方向でやってみて、 同僚の反応とか聞きながらこの先の事は考えてみるわ。
381 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 21:23:19 ] >>379 そらそうだろ。知ってるやつ居るならオレも聞きたいわwww てか、どのくらいで慣れるのか聞きたいわ。 あと、DLLのインタフェースにXML使うの実装しといたの思い出したらなんとかなった。 とにかくサンクス。
382 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 22:43:46 ] 2003と2007の両方入れてる 常用は2007なんだけどマクロの記録がタコなんでどうしても2003は消せない UIは慣れるしかない
383 名前:デフォルトの名無しさん mailto:sage [2010/02/22(月) 23:04:21 ] >>364 アクティブでないアプリケーションの処理が遅くなるのはWindowsが そういう風にCPU処理を配分してるからでしょ。システムのプロパティで 裏のプログラムも同等に処理するように設定したら? その代わりアプリが表側に来てるときの処理速度は落ちるけど PCの性能が無限でない以上仕方ない。
384 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 00:30:51 ] >>383 デュアルコアだと快適になるかな?
385 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 05:51:45 ] ダブルクリックで複数立ち上げるとエクセル本体は一つしか立ち上がらないので マルチCPUでも一つのコアしか使ってくんない スタートメニューからエクセルを必要数起動しエクセルからシートを読み込んでやると 別プロセスで動くので各コアに分担させることが可能 割り振りはたすくマネージャから手動で変更可 これでどれだけ快適になるかはやってみなきゃわかんない よほど処理時間長いものじゃなきゃごちゃごちゃやってる間に終わっちまうしな
386 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 12:32:43 ] 指定のzipファイル内にあるcsvファイルを配列に落とすにはどうしたらよいでしょうか 配布の都合上外部DLLは使用出来ません
387 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 18:06:44 ] 自己解凍ファイルにするとか
388 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 18:54:41 ] >>386 きっとそのzipファイルは変えられないんでしょ。 XPならzipって標準でライブラリなかったっけ? 外部dllには違いないけど、それ読み込んで解凍させるとか。
389 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 19:15:51 ] ★4 とりあえず、Excelのインスタンスを作らずにVB6で出来ることは全てスレ違いだと思ってください。 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
390 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 21:26:22 ] OS:windows Excelバージョン:2003 条件付き書式を設定していくマクロについて質問です. [問題] C1:E3の各セルに文字 aもしくはbもしくはcが入力されているとします. このときA1のセルにa,A2のセルにbが入力されたとき C1:E3の各セルでaもしくはbが入力されているセルのみ背景を赤にしたいのですが どうすればよいでしょうか? [自分なりの解答] 以下のような条件付き書式を各列で設定していくマクロを作ってみたのですが、 $C$1のところが$C$1〜$E$1とすることができず詰まっています... Do Until ActiveCell.Value = "" Selection.FormatConditions.Delete Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=COUNTIF($A$1:$A$2,$C$1)>=1" Selection.FormatConditions(1).Font.ColorIndex = 2 Selection.FormatConditions(1).Interior.ColorIndex = 3 ActiveCell.Offset(1).Select Loop End Sub
391 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 21:58:13 ] こういうことか? Sub test() Dim i As Integer, j As Integer For i = 1 To 3 For j = 3 To 5 If Cells(i, j) = Cells(1, 1) Or Cells(i, j) = Cells(2, 1) Then With Cells(i, j) .Font.ColorIndex = 2 .Interior.ColorIndex = 3 End With End If Next j Next i End Sub
392 名前:デフォルトの名無しさん [2010/02/23(火) 22:27:24 ] >>390 よくわかんないけど Sub testestes() Dim myRange As Range, r As Range Set myRange = Range("c1:e1") myRange.FormatConditions.Delete For Each r In myRange r.FormatConditions.Add Type:=xlExpression, Formula1:= _ "=COUNTIF($A$1:$A$2," & r.Address & ")>=1" r.FormatConditions(1).Font.ColorIndex = 2 r.FormatConditions(1).Interior.ColorIndex = 3 Next r End Sub
393 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 22:43:53 ] >>390 条件付き書式を間違ってないか C1は=COUNTIF(A1:A2,C1)>=1で E1は=COUNTIF(A1:A2,E1)>=1といれるべきだと思う
394 名前:デフォルトの名無しさん mailto:sage [2010/02/23(火) 22:52:26 ] >>391-392 レスありがとうございます. お二人のおかげで作りたいものができました. 勉強になりました.本当にありがとうございます. >>393 レスありがとうございます. ご指摘のとおりです. >>392 さんのレスに有る > & r.Address & のような方法を探してました.
395 名前:345,358,364 mailto:sage [2010/02/24(水) 00:55:58 ] レスくれた方ありがとうございます。 上手く伝わりませんが、>>345 で書いた通り、 PCはデュアル又はクアッドコアで、システムのパフォーマンスオプションはバックグラウンドサービスに設定。 エクセルを複数起動して並列処理しており、ウィンドウが表でも裏でも全て高速動作してる。 画面更新や再計算停止等の高速化は実施済み。 ただし、VBAコードの中にSortメソッドが含まれており、かつ非アクティブウィンドウである場合に限り、Sortメソッドの処理が極端に遅くなる。・・・という事です。 >>385 の方法をスクリプトで自動化してるので、Core i7でExcel2000を8つ起動して同じコードを走らせると8コア100%までぶん回して高速に演算できてるけど、 Sortメソッドを使うとそこが激しくボトルネックになる。 ちなみに普通にエクセルを1つだけ開いてSortを何万回も繰り返すコードを実行中に、デスクトップをクリックしてエクセルを非アクティブにするだけでも途端に劇遅になる。 これ多分Excel2000の仕様というかバグなんだけど、同じ現象についてはググっても見つからなかったので、これが問題になるほど何時間もぶん廻す使い方がよほど特殊なんだろう。 Sortメソッドを使わない方向で解決する事にします。
396 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 19:57:09 ] すみません教えて欲しいんですが SET A = Range("B1:E10") SET X = Range("C5") のような時に 単一セル X はセル範囲 A の 範囲内にあるかどうかの 判定方法はどうやったらよいのでしょうか?
397 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 20:01:38 ] intersect
398 名前:396 mailto:sage [2010/02/24(水) 20:05:39 ] >>397 あ!なるほど ありがとうございました
399 名前:デフォルトの名無しさん mailto:sage [2010/02/24(水) 20:53:23 ] >>395 何がやりたいのか判らないけどアクセス使ったほうがいいんじゃないか? それはさておき、こことか。 chotosplus.sakura.ne.jp/wordpress/2009/07/16/excel-vba%E3%81%8B%E3%82%89%E5%88%A9%E7%94%A8%E3%81%A7%E3%81%8D%E3%82%8B%E5%90%84%E7%A8%AE%E3%82%BD%E3%83%BC%E3%83%88%E6%96%B9%E6%B3%95%E3%81%AE%E9%80%9F%E5%BA%A6%E6%AF%94%E8%BC%83/
400 名前:デフォルトの名無しさん [2010/02/25(木) 04:03:34 ] すみません、教えていただけないでしょうか OS:windows Excelバージョン:2003 反復型の成績判定で10人分の得点を一人ずつ成績判定を行うプログラムを作りたいのですが、 Sub 反復型の成績判定() Dim X As Variant X = Array(60, 82, 87, 50, 56, 86, 89, 76, 58, 68) Dim hantei As Variant hantei = Array("不可です", "可です", "良です", "優です", "対象外です") Dim h As Integer Const n As Integer = 10 Dim i As Integer Dim tokuten As Integer For i = 1 To n tokuten = X(i - 1) Next Select Case tokuten Case Is < 60 Debug.Print Format(tokuten, "#点は ") & Format(hantei(0), "不可です") Case Is < 70 Debug.Print Format(tokuten, "#点は ") & Format(hantei(1), "可です") Case Is < 80 Debug.Print Format(tokuten, "#点は ") & Format(hantei(2), "良です") Case 80 To 100 Debug.Print Format(tokuten, "#点は ") & Format(hantei(3), "優です") Case Else Debug.Print Format(tokuten, "#点は ") & Format(hantei(4), "対象外") End Select End Sub これだと68点の成績判定しかされないのですが、どこを直せば良いのでしょうか?
401 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 06:16:13 ] >>400 nextを end select の後に移動
402 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 06:21:10 ] >>400 Sub 反復型の成績判定() Dim X As Variant Dim element As Variant Dim hantei1 As Variant Dim hantei2 As Variant Dim h As String X = Array(60, 82, 87, 50, 56, 86, 89, 76, 58, 68) hantei1 = Array(0, 60, 70, 80, 101) hantei2 = Array("不可です", "可です", "良です", "優です", "対象外です") For Each element In X h = WorksheetFunction.Lookup(element, hantei1, hantei2) Debug.Print Format(element, "#点は ") & h Next End Sub
403 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 07:27:05 ] え!?hentai???と思ってしまった・・・orz
404 名前:デフォルトの名無しさん [2010/02/25(木) 12:04:56 ] できました! 助かりました。ありがとうございます。
405 名前:デフォルトの名無しさん [2010/02/25(木) 12:14:46 ] すみません、もうひとつ聞きたいことがあるんですが、 星の表示で1〜n個の*を順番に表示させるプログラムをつくったんですが、 Sub 星の昇順表示() '1 〜 n個の”* ”を順番に表示 Dim i As Integer, n As Integer n = 10 Do Debug.Print Format(i, "00") & String(i, "*") i = i + 1 Loop While i < 11 End Sub これをn〜1個の*を順番に表示させるためにはDo〜Loopを使ってどのように変えればいいのでしょうか? 教えていただけないでしょうか。
406 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 12:45:59 ] >>405 初期値 加算値 終了条件 宿題け?
407 名前:デフォルトの名無しさん [2010/02/25(木) 17:48:25 ] Dim y As Integer Dim x As Integer Dim objTableItem As Object '.body ‚loop body data For Each objTAG In objIE.document.body.all 'search for table tag If objTAG.tagName = "TABLE" Then 'add new sheet Sheets.Add y = 0 'row 'loop item in table For Each objTableItem In objTAG.all If objTableItem.tagName = "TR" Then y = y + 1 'row +1 x = 1 'columm=1 End If If objTableItem.tagName = "TD" Then 'set text data Cells(y, x) = objTableItem.innerText x = x + 1 'next columm End If Next End If Next このままだと、Excelを使ったIE操作に関する質問です。 website上のテーブルをコピーして、エクセルにペーストしたいのですが、このままではテキストにリンクが貼られていても、 テキストしかコピーできません。 例えば、<a href ="http.....">VBA</a>の場合、テキストのみがペーストされますが、エクセル上でVBAをクリックすると、URLにジャンプできるようにしたいのですが、何かいいアイディアはございますか?
408 名前:デフォルトの名無しさん [2010/02/25(木) 18:58:19 ] >>406 回答ありがとうございます。 すみません、具体的にはどこをどう変えればいいのでしょうか。 本当に初心者なので、どこをどういうふうに変えたら*の数が下がるようになるのかわからないんです。
409 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 22:22:30 ] >>407 If objTableItem.All.tags("A").Length > 0 Then Debug.Print objTableItem.All.tags("A")(0).href End If で http..... が取得できると思うけど
410 名前:デフォルトの名無しさん mailto:sage [2010/02/25(木) 23:46:43 ] >405 ★5 レベルはどうあれ、ここはプログラマ用の板スレです。プログラマとは、自分でプログラムを組み コードを書く人の事なので、自分でやるきは全く無く、丸投げしようって人はお断りです。 ヒントを貰えばあとは自力でなんとかしますって人のみどうぞ。
411 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 00:30:18 ] ユーザーフォーム上のテキストボックスに前のデータを表示させたまま下に出力し続けることは可能でしょうか?
412 名前:デフォルトの名無しさん [2010/02/26(金) 00:58:33 ] >410 仰るとおりです。本当に申し訳ありません。 ただ、時間がなくプログラムもどう変えればいいか全然わからず、丸投げしてしまいました。 厚かましいお願いではありますが、初心者でもわかる範囲でヒントをもらえないでしょうか。 見よう見まねで上のプログラムは組めたんですが、反対に星の数を少なくしていくやり方がどうしてもわかりません。 どうかよろしくお願いします。
413 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 01:52:16 ] >>408 なんかの宿題だろうけど 見よう見まねだとしても >>405 の コードでなぜ星の数が多くなっていくのか それを理解するのが先だと思う じゃあ逆に質問 1〜5個の"*"を順番に表示にするには?どう修正する? 実行結果は下ね 01* 02** 03*** 04**** 05***** ちなみに下だと失格だよ 00 01* 02** 03*** 04**** 05*****
414 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:06:08 ] >>412 i = 10 i = i - 1 i > 0
415 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:41:02 ] Dim i As Integer, j As Integer, n As Integer, s As String n = 10 For i = 1 To n Step 1 s = Format(i, "00") For j = 1 To i Step 1 s = s & "*" Next j Debug.Print s Next i End Sub そういえば、iとかjとか一文字の変数名はよくないって話はどうなってんの
416 名前:デフォルトの名無しさん [2010/02/26(金) 03:02:49 ] >414 できました!助かりました!本当にありがとうございます。 >413 i = 1 という条件を付け加えればよかったんですね! 一人じゃ何もわからず、途方にくれていました。本当に助かりました。 ありがとうございました。
417 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 08:18:56 ] >>415 変数名1文字なんてどうでもいい それよりループ回してs=s&"*"なんて恥ずかしいからやめろ >>405 さえString関数使ってるだろ?
418 名前:415 mailto:sage [2010/02/26(金) 09:54:18 ] なんで? 01* 02*+ 03*+* 04*+*+ 05*+*+* こういうのやる時必要でしょ?
419 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 11:01:47 ] >418 ヲイヲイ・・・
420 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 11:23:13 ] For文で変数にiとjを使うのは昔からの慣習なので問題ない
421 名前:デフォルトの名無しさん [2010/02/26(金) 15:39:29 ] 時間がないと言ってるのに>>413 はちょっとかわいそうだとオモタ
422 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 19:40:12 ] 名簿から名前(アルファベット)を拾って 頭文字別の一覧表シートを作成しようとしています。 ソート後に頭文字を if str[i] == str[i+1] hoge列に代入 elseif str[i] != str[i+1] hoge = hoge+1 hoge列に代入 という方法でやろうと思ってるんですが (if a 〜 if z では長くて面倒ですし・・) 他に方法というかVBA側で用意されてるものってあったりしますか? リスト構造体的なものがあってそこに文字列ぶちこんで 検索文字抽出→GetNextで抽出文字列を順々に引っ張り出せたりとか・・ そういったものがあったりしないかなぁと思い質問させていただきました。
423 名前:422 mailto:sage [2010/02/26(金) 19:43:33 ] == → = != → <> に訂正します。 比較演算子がC++になってしまいました・・
424 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 21:19:44 ] >>422 (if a 〜 if z では長くて面倒ですし・・) の部分が何が言いたいのかよくわからん。 例示されたプログラムのどこにも出てきてないのに、いったい何がやりたいんだ。
425 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 21:36:06 ] >>422 1Byte文字かつアルファベットのばあい。 文字列の先頭1文字の文字コード(アスキーコード)取得して適当に計算して Cell位置に変換してそこにぶち込む。をLoopすれば? カラム方向のカウンタも配列にして。
426 名前:422 mailto:sage [2010/02/26(金) 22:06:04 ] >>424 if str[i] like "Aa" 〜 if str[i] like "Zz" ということでした。わかりづらくて申し訳ありませんでした >>425 やはりLoopで回すのが手っ取り早そうですね。 ありがとうございます。
427 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 22:22:51 ] >>417 別にええやんと思う人間が実はここにもいる。 性能的な違いはある?
428 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 23:57:22 ] >417 >それよりループ回してs=s&"*"なんて恥ずかしいからやめろ 途中の結果も必要なんだから別に恥ずかしいとは思わんが・・・
429 名前:427 mailto:sage [2010/02/27(土) 01:21:43 ] あ、文字列を作るためだけにループ使うなと言いたいのか。 でもString関数なんて今まで知らなかったよ。 ところで文字を連続させる関数て何に使うんだろうか。
430 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 08:35:11 ] >>429 文字を連続させるために使う。
431 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 08:55:01 ] 使いたい人が使いたいときに使う。 例えば*を100個書きたい場合(101個だとダメ99個でもアウト〜)に String()を使えば間違わないで書けるとかじゃろ?