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


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

Excel VBA 質問スレ Part14



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/

321 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 10:34:38 ]
文字列データを「"」でかこってないCSVをダブルクリックでまともに開きたいってだけでしょ
開いた後で自動なり手動なりでマクロから読み込み直しさせればいいだけじゃないの?


322 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 11:08:39 ]
>>312
> >>308
> まあExcelは違うわな
> パソコンと表計算ソフトの最初の利用目的が税金の計算だったってだけの歴史上の話だから

都合のいいところでお前のパソコンの歴史が始まったらしいな。
そんな話聞いたこと無いぞ。

323 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 12:22:22 ]
パソコンは戦争目的じゃなかったか?
弾道計算か何かだと思う
表計算ソフトは
ttp://ja.wikipedia.org/wiki/VisiCalc
だとさ。金融がどーとかで税金かどうかまでは分からないが、
まあ似たようなものといえなくも無いが間違ってるとも言える
ってかどっちでもいい

324 名前:293 mailto:sage [2010/02/18(木) 13:10:45 ]
なんかちょっとだけ盛り上がってますね。すみません

>>321
ああ、それがベストですね!
ルールを変えろ、って言ってる人は意味がわかりません
変えられない前提だって言ってるのになあ

325 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 13:33:05 ]
サッカーボールを手で運べ!

326 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 13:36:52 ]
ラグビーの発祥です

327 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 13:57:47 ]
なるほど

328 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:13:01 ]
どんな書類でもエクセルで作りそうw

329 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:16:17 ]
フローチャートをエクセルで作るウチの会社のことだな
俺は個人的なチャートならイラレで作ってるw



330 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 14:30:58 ]
アプリなんてどんな使い方してもいいよ
本来の目的からずれてようが、便利なら使えばいい

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はちょっとかわいそうだとオモタ






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

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

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