>>951 一つ一つ処理したら何が確実になるの?
一つ一つSelectして処理したらどうして駄目なの?
横レスだけど、 1つに対して出来たら、後はforやfor eachで対象を増やすだけ。 selectしなくても直接操作できるならしない方が動作が早い。
954 :
デフォルトの名無しさん :2009/07/12(日) 18:30:54
>>953 >1つに対して出来たら、後はforやfor eachで対象を増やすだけ。
例えば1行1列の行列掛け算プログラムを正しく作ったとして、
それをn行n列の行列掛け算に拡張するとする。
その拡張が正しいというのはどのように判断するの?
2行のデータをソートするプログラムを正しく作ったとして、
それをn行のソートに拡張するとする。
その拡張が正しいというのはどのように判断するの?
まとめてやった方が早いかどうかは処理によるんじゃね?
956 :
デフォルトの名無しさん :2009/07/12(日) 18:34:41
>>953 >selectしなくても直接操作できるならしない方が動作が早い。
早く動作させたい場合、データを一つ一つループで回して処理するより、
データの塊りをライブラリに与えるほうが速いことが多いよ。
>>951 >>953 データを集合で扱ったほうが、確実(正しい処理)で速いよ。
selectがどうとかバカらしいよ。
とりあえず速さがどうとか言ってる奴はサンプルを提示して、実行速度の比較結果をここに貼れよ
>>954 ダミーデータ入れて検証するか、ステップアップで確認しろよw
まとめて処理が速いと思ってる馬鹿どもが、例の低レベルUnion使ったりするんだろうねぇ。 なにせ普通にUnion使ったらエリア数の惨状に比例して遅くなる。
高レベルのロジックを貼ってください><
いちいちSelectするよりRangeオブジェクトをそのままメソッドに渡した方が速いことが多い。 これはあくまでも一般論。 Selectしたあと何をやるか質問者が一切書いてないのに先走ってケンカして、単なるアホ。
963 :
デフォルトの名無しさん :2009/07/12(日) 20:28:13
>>962 Selectした後コピーして別のシートに貼り付ける
>>960 を受けてだが、A1:CV10000に1〜100のランダムな数値を入れて、各行の最大値のセルに色を付けるコードを書け。
ただし条件付き書式は使わないものとする。
まぁ条件付き書式でも実用に耐えるものを設定出来るやつ何人いるか分らんが。
ちなみに=A1=MAX($A1:$CV1)の条件は不合格です。
>>962 実際よくUnuion使った手法を見るから
>>960 が書いてるように勘違いしてるやつは多い。
>>959 行列計算やソートしてくれるライブラリがあるなら、そっちを使うなあ。
検証好きなんだな。お前。
荒れると伸びるよなお前ら 速さの話題出るたびに検証検証言ってるのは一人だけなのか? 質問が早さを求めていない以上レスポンス云々の回答が的外れであるのは否めないが 何度もそう健勝言われてもうざいです^^q^
>>951 みたいなやつが出てくるとからかいたくなる。
>そのまとめて処理という発想をすてて、一つ一つ処理した方が確実。
ほうどうして?
>ただ一つ一つSelectして処理は駄目。
>Selectしない方法を身につけないと。
へえなんで?
>>970 は引っ込んだ方がいいんじゃねーの?
Selectしないなんてのはごく一般常識だ。
>>969 質問が速さを求めてないんだから確実に動かない
>>938 は駄目だね。
ダブルクォーテーションの問題をクリアーしても255文字の制限で駄目なのは目に見えてる。
>>971 Selectしたってちゃんとした結果が出るんならいいじゃない。
視野がせまいんじゃないの?
まったく500連発級のアホがいるなw
>>964 なんとなく試したら平均2秒もかかるコードしか組めなんだ。
しかも、各行の最大値は重複しないという条件で。
ところで、
>ちなみに=A1=MAX($A1:$CV1)の条件は不合格です。
は何故不合格なのか教えてもらえるとうれしい
>>975 2秒だろうが10秒だろうが、手作業よりよほど速いんだから気にすんな。
Selectしようがしまいがちゃんと結果を出せるんなら実用上問題ない。
それよりも本当に最大値を間違いなく出せているのか?
それだけが重要だ。
UNIONがだめとか何言ってるの 複数のコード書いて質問者に選ばせればいいじゃん 自分のスタンスじゃないからって否定すんなよ 行選択ならrows()の組み合わせが使えるんじゃね
>>977 たとえばもクソもねーよ。
255文字を超えると使えないような手法が使えるわけねーじゃん。
それこそ誰かがどこかで書いてた小売店レベルでしか使えねーな。
>>975 もしかして1〜100の乱数書き込みを入れての時間?
そうじゃなかった少し古いパソコン?
Vista 2007 Core2Duo3.00GHzでおまいの書いたであろうコードを書いてみたら0.7秒だった。
重複対応のmatch使わないで配列ぶん回すやつはこれに0.1秒余計にかかるだけだった。
ちなみに普通にUnion使ったら20分だったw
>>979 255文字を超えない文字数で何回かに分けて処理する方法はあるよ。
ただかなり複雑になるけど。
>普通にUnion がさっぱりわからん。
>>984 Unionでも工夫すれば速くなるとかいう達人が前にいたからねぇ。
その工夫がめちゃめちゃ面倒で、俺みたいな凡人にはとても書けるものじゃなかったよ。
普通のUnionならたとえば下みたいなのじゃね?
Sub foo()
Dim r As Range, c As Range, u As Range, maxV As Double
With Application.WorksheetFunction
For Each r In Range("a1:cv10000").Rows
maxV = .Max(r)
For Each c In r.Cells
If c.Value = maxV Then
If u Is Nothing Then
Set u = c
Else
Set u = Union(u, c)
End If
End If
Next
Next
u.Interior.ColorIndex = 3
End Sub
これなら数十分かかるかもね。
配列やItemプロパティで工夫しても同じようにUnion使う限り似たような時間だろう。
>>975 の重複なしのやつは多分下みたいなやつだろう。
With Application.WorksheetFunction
For Each r In Range("a1:cv10000").Rows
r.Cells(.Match(.Max(r), r, 0)).Interior.ColorIndex = 3
Next
End With
エクセルに表示されている省略されているアドレスを 本来のアドレスに戻すことはできますか? リンクの編集からリンク先のリンクがわかるのですが、 それをいちいちコピペで変換するのが大変なので。
>>985 何がしたいのか知らんけど、バグってるよねそのコード
>>986 マクロ使わないと無理
Range("A1").Hyperlinks(1).Address
>>979 どうでもいいんだが、「小売店」の意味を勘違いしてる
まあお前が言い出したんじゃないかもしれないけど
VBAだからどうでも良いって考える人が多いだろうけど、 プログラムをやるならば、他人がメンテする事も踏まえて可読性の高い、 一般的かつ美しいロジックの構文を心掛けるべきだな。 省略した方が一般的ならば省略すべきだし、 省略すると、動くけどマニアックならば省略すべきでは無い。 デフォルトプロパティの省略なんか分かりやすいかな。
>>988 B列にあるアドレスということで
Range("B").Hyperlinks(1).Address
としてやってみたのですが、駄目でした。
マクロは
Sub リンク()
Range("B1").Hyperlinks(1).Address
End Sub
こんな感じになってます。最後のaddressってのが黄色く表示されます。
>>990 そうだねぇ。
省略するのが一般的なものの一番はItemだな。
Set w =Worksheets.Item("Sheet1")とかやられるとかなりくどくて嫌味だな。
>>987 End Withが抜けてるだけだな。
インデントつけりゃすぐわかることだ。
Application. とか普通つけないしな
Microsoft Excel では、ワークシート上で =0^0 という数式を入力すると #NUM! というエラーを返すが、 同ソフトウェアに搭載されている VBA では1と定義されている。
SelectしないのはSelectの省略とは言わんなぁ。 あれはつけないのが当たり前だからな。 つけたら可読性は最低レベルだ。
>>996 VBAでは、0^0が1というより、n^0が1(nが負数なら-1)となる
算術演算的には0^0はエラーでいいんだが
論理演算的には1や-1になった方が都合がよいからな
銀河鉄道
Windows
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。