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


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

Excel VBA質問スレ Part5



1 名前:デフォルトの名無しさん [2007/12/12(水) 17:27:44 ]
ExcelのVBAに関する質問スレです

質問前に 【 >>2-3 】 あたりを良く読むこと

前スレ
pc11.2ch.net/test/read.cgi/tech/1189814602/

445 名前:デフォルトの名無しさん mailto:sage [2008/01/20(日) 23:58:30 ]
>>442
全くためしてないんだが

Application.ScreenUpdating = 画面の更新をするか
Application.EnableCalculation = 再計算してるか

を考えれば幸せになるんじゃね?

俺的には全部コードでやっちゃうがw

446 名前:441 [2008/01/21(月) 01:01:55 ]
>>442での「実行時エラー」ってのが、気になった・・・
application.run関係ぐらいしか実行時エラーが出うる箇所はないように見えた。

もしかしたらだけど、ここが参考になるかも
 ttp://www.geocities.jp/happy_ngi/YNxv9cz56.html

おやすみ


447 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 01:59:57 ]
>>445
>>446
ありがとうございます。
441さんの指摘のようにapplication.runが原因みたいです
Excelの分析ツール使うと画面更新されてしまうみたいです
ワークシート上だけで乱数関数使って同じようなコードで実行したら、
画面は更新されないでうまくいきました。
鋭い指摘ありがとう!


448 名前:デフォルトの名無しさん [2008/01/21(月) 15:40:17 ]
例えば、C3からK11まで範囲指定するのに、
rangeを使わず、offsetを使って指定することは可能でしょうか。

やりたいことをイメージ化すると以下のようなのですが・・・

Sub hoge()
Range("A1").Select
Range(ActiveCell.Offset(2, 2).Select, ActiveCell.Offset(10, 10).Select).Select
End Sub

449 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 15:58:59 ]
あのさ、
いちいちこのスレで聞くよりもさ、
自分でググるなり本を買うなりして調べた方が圧倒的に早いと思うんだけど。

450 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:09:36 ]
range("A1").select
range(selection.offset(2, 2), selection.offset(10, 10)).select
--
dim r as range
set r = range("A1")
debug.print range(r.offset(2, 2), r.offset(10, 10)).address
range(r.offset(2, 2), r.offset(10, 10)).value = 12345


451 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:10:15 ]
>>448
つか、目的がよくわかんねーよ。 あと、その例文、.Offset に .Select付いてたらエラーになるぞ。

そもそも、Offset って、基本的にRangeのプロパティなんだが。Rangeを使わずにどうしろと?


452 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 16:57:48 ]
If 気に入らない or わからない Then
  スルーしろ
End If

453 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:01:03 ]
意味が分かれば協力する気持ちがあるから訊いてるんだよ。全否定すんな。
それとも、どこが分からないか、こちらが分かりやすく優しく丁寧に質問しないとダメなのかよ?




454 名前:448 mailto:sage [2008/01/21(月) 17:19:29 ]
すまん!

Sub hoge()
Range("A1").Select
Range(ActiveCell.Offset(2, 2), ActiveCell.Offset(10, 10)).Select
End Sub

selectとったらいけました。
逝ってくる

455 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 17:56:47 ]
>>453
やりたいことの「イメージ」って書いてるだろ。
これで意図がわからんというのがわからん。

456 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 20:42:56 ]
>>453はかわいそうな子


457 名前:451 mailto:sage [2008/01/21(月) 21:10:50 ]
>>455
レスの流れぐらい見ろよ。レスから読み取れる範囲で回答はしてる。
それとも、IDがないと同一人物かどうかも判断できんか?


458 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:47:53 ]
構造体の2次元配列の参照って
Kouzoutai(1,2).Member = 1

という形であってます?
オブジェクトが必要ですとかいうエラーが返ってくるんですが…

459 名前:デフォルトの名無しさん mailto:sage [2008/01/21(月) 23:59:26 ]
すごいな。
もう思いついたことをとりあえず質問するスレになってるな。
>>458なんてはなっから自分で調べる気ないもんな。

460 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 00:30:46 ]
>>458
オブジェクトがないんだよ。
Dim Kouzoutai( 5, 5 ) as HOGE
って形になってるか?

どうせ
Type Kouzoutai
Member as integer
End Type
とかになってんだろ。

「VBA 構造体」でググればびっくりするくらいヒットするじゃないか。

461 名前:デフォルトの名無しさん [2008/01/22(火) 07:24:11 ]
OSはWindows XP Home Edition、
Excelは2003の11.8169.8172です。
VBA初心者でここも初めてです。質問させてください。
2種類のグラフをそれぞれ別のシート上のオブジェクトとして作成しました。
(2つ同時ではなく、まず1つ目のグラフを作り、その後別のグラフを作るというやり方です。)
2つ目のグラフを作る際、1つ目のグラフの数値軸で自動的に表示された軸の最大値と最小値を
2つ目のグラフにも反映させたい(同一の値にしたい)のですが、
どのように記述すれば1つ目のグラフの最大値や最小値を呼び出すことができますか?
With ActiveChart.Axes(xlValue)
.MinimumScale = ココと
.MaximumScale = ココです。
End With

ぜひヒントがほしいです、よろしくお願いします。

462 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 12:59:28 ]
>>461
確認する時間がないのでヒントのみ。 あとはヘルプ見ながら直して。
 Dim s As Worksheet
 Dim c As ChartObject
 Set s = Worksheets.Item("test")   ←"test" って名前のシートが取得できる
 Set c = s.ChartObjects(1)       ←取得したシートの、1つめの図を取得
あとは c.Chart.Axes.Item(xlValue).MinimumScale な感じで対応する値が取得できると思われ。
まとめて書くこともできるが、とりあえず入力補助に反応する書き方にしといた。


463 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:25:13 ]
E6からE26とN6からN26に数字を入力したのですが、このコードよりも簡単な方法はないでしょうか?


Dim c As Long
Dim f As String
Dim v1() As Variant
Dim v2() As Variant
With Excel.Range("E6:E26,N6:N26")
c = .Areas.Item(1).Count
f = "ROW(" & .Worksheet.Range("A1") _
.Resize(c).Address & ")"
v1 = .Application.Evaluate(f)
v1 = .Application.Small(.Cells, v1)
f = "ROW(" & .Worksheet.Range("A" & 1 + c) _
.Resize(.Areas.Item(2).Count).Address & ")"
v2 = .Application.Evaluate(f)
v2 = .Application.Small(.Cells, v2)
.ClearContents
.Areas.Item(1).Value = v1
.Areas.Item(2).Value = v2
End With




464 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:31:48 ]
>>463
日本語でやりたいことを書け

465 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:38:05 ]
>>463 観光客の人数をExcelで作成したのですが、E6からE26とN6からN26
に観光客の人数を入力したのですが、これを小さい順に書き換えるにはどうし
たらいいのですか?


466 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 13:46:13 ]
つ【並べ替え(S)】


467 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 18:25:19 ]
「セルが特定の値以外のとき、自分の行を削除」したい。
IFでセル内容を指定してから
Range.deleteでどうやって削除条件にすべきでしょうか。

468 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 20:22:56 ]
な、何なんだこのスレは・・・

469 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:05:12 ]
このスレは池沼のフリして教えたがりのうざいヲタを釣るスレですが、なにか?

470 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 22:13:25 ]
ってことはこれは釣れたってことでFA?

471 名前:デフォルトの名無しさん [2008/01/22(火) 22:49:21 ]
>>470
お前がなw

472 名前:デフォルトの名無しさん mailto:sage [2008/01/22(火) 23:03:33 ]
やたー☆

473 名前:デフォルトの名無しさん mailto:sage [2008/01/23(水) 11:53:11 ]
やったー +1



474 名前:デフォルトの名無しさん [2008/01/23(水) 18:41:55 ]
ここで良いかどうか分かりませんが・・・

ビデオカードの現在の解像度(できればモニタのインチ数も)によって、
ActiveWindow.Zoomの値を変更するプログラムを考えているのですが、
vbaでビデオカードの現在の解像度を調べるのは不可能でしょうか?

475 名前:デフォルトの名無しさん [2008/01/23(水) 21:16:04 ]
>>474

vba api 解像度 でぐぐれば、2番目にあなたの望む回答が

476 名前:デフォルトの名無しさん [2008/01/24(木) 08:57:54 ]
良回答認定

477 名前:デフォルトの名無しさん [2008/01/24(木) 09:11:24 ]
>>475
ありがとうございます!

下調べはしてたつもりだったのですが、
甘かったです・・・orz

478 名前:デフォルトの名無しさん [2008/01/24(木) 10:01:12 ]
恥ずかしながら全く分かりません。
何卒お願い申し上げます。


次の選択肢より正しい記述をすべて選びなさい。

1:java.io.FileReaderはテキストファイルから文字を行単位で読み込むクラスである。
2:new File("bbs.txt")と記述すると、新しいファイルが作成される。
3:ファイルの操作を行う前には、Fileクラスのopenメソッドを必ず使用する。
4:BufferedReaderクラスのreadLineメソッドは、ファイルの終端までを読み込む。
5:FileクラスのisFileメソッドの戻り値がfalseだった場合は、そのファイルが無いか、またはその名がディレクトリである事を示している。


479 名前:デフォルトの名無しさん [2008/01/24(木) 10:06:39 ]
>>478です。
申し訳ありません、スレ違いでした。
失礼致しました。

480 名前:デフォルトの名無しさん [2008/01/24(木) 10:33:36 ]
アクセスのVBAのスレが見付からないのでここで質問します。
アクセスのVBAで、フォーム1
ユーザ登録画面
ユーザ名[ ]
パスワード[ ]
登録
があり、2つを入力し、登録を押したら登録できるのを教えてください

481 名前:デフォルトの名無しさん [2008/01/24(木) 10:37:07 ]
>>478です。
何度もすみません。もうこのスレに書いてしまったので、
ほかのスレに書いたら、マルチポストとか云うのに
なってしまいますので、もしよろしければこのスレで
教えて頂けないでしょうか?

482 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 11:04:47 ]
>>481
誤爆はマルチにはならないと思うよ。
マルチポストだって言うヤツは居るかもしれんが、普通に教えて貰えると思う。
俺も多少は分かるけど、このスレで回答したくない。回答が違ってても突っ込みがなさそうだから。


483 名前:デフォルトの名無しさん [2008/01/24(木) 11:06:44 ]
>>482さん。
ありがとうございます。
助かりました。



484 名前:デフォルトの名無しさん [2008/01/24(木) 12:07:30 ]
AutoFilterが設定されたシートで選択されたセルの行数を知るには、下記の方法で
出来る事が分かったのですが、もっと簡単な方法がありますでしょうか?

Dim r As Range, rcnt As Long
rcnt = 0
For Each r in ActiveWindow.Selection.Rows
If Not r.Hidden Then
rcnt = rcnt + 1
End If
Next


485 名前:デフォルトの名無しさん [2008/01/24(木) 17:23:24 ]
すいません、VBA超初心者です。
"地域A"というシートから魚名前を検索して個数(魚の名前の2つ下のセル)と総量(個数のセルの1つ右)の数値を
台帳(以下の記述ではシート名”漁獲量”)シートの各魚の行に転記させたいのですが、
一生懸命ヘルプやネット検索しながら自己流で記述しましたが
「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
と出ます。
どなたか正しい記述をアドバイスしていただけませんでしょうか?

486 名前:485 [2008/01/24(木) 17:24:49 ]
Private Sub CommandButton1_Click()

Dim fish As String
Dim i As Integer
Dim wrkA As Integer
Dim wrkC As Range
Dim wrkB As Range

With Sheets("地域A")
wrkA = .Cells(1, Columns.Count).End(xlToLeft).Column
wrkC = .Range("A1").Resize(1, wrkA)
wrkB = .Range("A3").Resize(1, wrkA)

End With
Dim wrkD As Integer
With Sheets("漁獲量")
wrkD = .Cells(Rows.Count, 1).End(xltoUP).Row
wrkE = .UsedRange
fish = .Range(wrkD, 1).Value
End With


487 名前:485 [2008/01/24(木) 17:25:54 ]
つづきです

For i = 1 To wrkA

If fish = wrkC("wrkA,i") Then
fish = wrkB(1, i)
Cells(wrkD, 1).Offset(0, 1) = wrkB(1, i + 1)

Else
fish = " "
Cells(wrkD, 1).Offset(0, 1) = " "

Exit For
End If
Next i

End Sub

488 名前:デフォルトの名無しさん mailto:sage [2008/01/24(木) 17:55:01 ]
>>485
ちょっと突っ込みどころが多すぎるので、全部回答はできないんだけど、
まだ基本を分かりきってないみたい。
とりあえず、 With Sheets("地域A")   With Sheets("漁獲量")  のトコを
Dim ws As Worksheet    ←もちろん最初(1箇所)だけ
Set ws = ThisWorkbook.Worksheets("地域A")
With ws
のような形に修正すれば、"."キーを押したときに入力補助が反応するから、
それを参考に修正するといいと思う。この入力補助が反応するようなコードってのは結構重要。
("."を押してもメソッドが出なければ、記述したところでほとんど実行時エラーになる)

あとは、.End(xltoUP) の定数は xlUp がいいのと、
fish = .Range(wrkD, 1).Value の行みたいに、Cells と Rangeの使い分けが混乱してるかな。


489 名前:485 [2008/01/24(木) 18:00:49 ]
>>488
どうもありがとうございます!!
突っ込みどころ満載ですか…笑
ご指摘を元に再度勉強してがんばってみます!!

490 名前:488 mailto:sage [2008/01/24(木) 18:30:38 ]
>>489
ゴメン、もっと重要なポイントがあった。
wrkC = .Range("A1").Resize(1, wrkA) は、オブジェクト型変数への代入になるので、
Set wrkC = .Range("A1").Resize(1, wrkA) という書式を必ずとること、です。


491 名前:デフォルトの名無しさん mailto:sage [2008/01/25(金) 09:36:51 ]
漁獲量・・・

492 名前:デフォルトの名無しさん mailto:age [2008/01/25(金) 23:56:11 ]
すみません。vlookupのワークシート関数がうまく動きません。
普通のvlookupのようにvlookup(値、範囲、2、False)としましたが
エラーが出てしまいます。範囲がおかしそうですが
どう書き方が誤っているのかがよく判りません。
どなたか、御指摘願えませんでしょうか?

With Worksheets(2)
'Xは適当な自然数です。
For i = 1 To 100
Cells(i + 1, 2) = Application.VLookup(Cells(1, 1).Offset(i, 0).Value, .Range(Cells(2, 3), Cells(X, 4)).Address, 2, False)
Next i

493 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 01:11:11 ]
すみません。色々試行錯誤していたら解決しました。有難うございました



494 名前:デフォルトの名無しさん [2008/01/26(土) 17:35:21 ]
かなり高度な質問です。
Me.Controls.Add("Forms.textbox.1","品名",True)
のFormsって一体何なのですか?

495 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:48:24 ]
余りに低レベルなので泣けてきました。

496 名前:デフォルトの名無しさん mailto:sage [2008/01/26(土) 17:52:19 ]
OLEコントロールの名称でないの。
Microsoft Forms 2.0 TextboxのPROGID

497 名前:デフォルトの名無しさん [2008/01/27(日) 13:51:07 ]
VBAの中でソルバ関数を実行しようとしてます。
その目的セルの評価値を計算する際に、さらにソルバを実行したいです。
(つまりソルバの2重ループになる感じ)

が、これを実現できなくて困っています。
考えてたのは、内側のループのソルバ部分を関数にして
ワークシートから呼び出せるようにして、
それを外側ループのソルバの目的セルの数式に放り込んでやればいい、
という方法なんですけど、
VBAのFunctionの中でソルバをまわそうとすると
シート上の値を書き換えなければならないのでエラーになってしまいます。
かといってそれをサブプロシージャにしても
ワークシート上の数式として表せないので、
結局外側のループで使えません。

何とかこれを達成する妙案はないですかね…
達成したとしても重くて不安定にはなると思うんですが、
それは承知の上です。

環境はWinXP SP2+Excel2000です


498 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 13:57:52 ]
↑根本的に何かを勘違いしてないか?

499 名前:デフォルトの名無しさん [2008/01/27(日) 14:03:45 ]
勘違い・・・っすか
どのへんがおかしいんでしょう?
それすらわからんです

500 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 18:11:32 ]
ソルバ?
ttp://www.joy.hi-ho.ne.jp/ngchsny/xevious_sol.jpg

501 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:00:39 ]
Excel2003です。
OnErrorでエラーメッセージの出力を指定しても、

エラーだとそのエラーで無事処理は終わるのですが、
本来エラーにならない場合でも、エラーメッセージ出力→正常処理 となるんですけど。

何か原因は考えられますか?
(プログラム持ち出せないのでここに書けないのです)


502 名前:デフォルトの名無しさん mailto:sage [2008/01/27(日) 23:16:08 ]
デバッグトレースシテクダサーイ

503 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:09:18 ]
>>501
On Error で飛ぶタグの前に Exit Function を書いてなかった、とか言ったら頃すぞ?




504 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 00:49:26 ]
Exit Function を書いてなかった位で殺されるんじゃタマッタもんじゃない。

505 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:15:06 ]
マジレスのハズもないのに、
ネタや回答の一つも返さず、つまらんマジツッコミを入れるとは一体どういう了見か?


506 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 01:16:04 ]
>>504
金払って許してもらおうぜ

507 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 10:02:19 ]
うんこ出た
超きもちいい


508 名前:501 mailto:sage [2008/01/28(月) 12:59:32 ]
マクロの最初に

On Error Msgbox
On Error exit Sub

で、以下正常時の処理を記述しているのだが。
Exit Function書くとエラーが出る。

509 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 13:09:09 ]
>>508
そもそもそれコンパイル通るの?
↓なら問題ないと思うけど。

Privete Sub 処理()
 On Error GoTo ラベル
 (通常処理)
 Exit Sub

 ラベル:
 (エラー処理)
End Sub


510 名前:デフォルトの名無しさん [2008/01/28(月) 16:54:46 ]
Sub abc
Dim rng As Range
Set rng = Selection
test rng
End Sub

Function test(r As Range)
Dim c As Range
For Each c Iin r
  'cの処理
Next
End Sub

と選択範囲を引数にしてtestを呼び出しますが、testの引数rはByValにした方がいいんでしょうか?
きちんと動くには動くのですが、ちょっと不安になったもので教えてください。

511 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:48:36 ]
>>510
その程度のものを分ける必要があるか知らんが、ByValは無意味。
そこはそのまんま参照渡しが正解。
それよりFunctionは気持ち悪くないかい?
Private Sub test(r As Range)
とするのが普通だろ?
Functionって戻り値を得るものに限定した方がいいと思うが。

512 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 17:52:07 ]
なんだ、下はEnd Subになってるじゃん

513 名前:510 mailto:sage [2008/01/28(月) 19:47:40 ]
>>511-512
すみません、実際は最後はEnd Functionとなってます。
Functionはおかしいんですかねぇ。
それはさておき、実は某所で引数が参照型の場合、ByValが速いとかByRefは気持ち悪いとかいう方がいるんですがどうなんでしょうか?
ご存知でしたらお願いします。



514 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:22:33 ]
>>513
byrefだと参照の参照が渡されるから
確かに気持ち悪くて遅いわな。
大差ないけど。

515 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:32:01 ]
ByRef の方が遅いのか・・・。 知らなかった。
値渡し=全引数を別アドレスにコピー ⇒ 少し余分に時間が掛かる と思ってた。


516 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:40:11 ]
そのsubなりfunctionなりの内部で変更する場合のみbyrefで、
それ以外はbyvalでという方針にしておくのが良い。
(自分で定義したサイズが大きな型は別)

517 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:41:15 ]
>>514
なんか勘違いしてない?
実際にやってみたらどうよ。
ByValが速いはずねーだろ?
>>510のおかしなコードじゃ分からないだろうが、なんか戻り値のあるFunctionで試したら?

518 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:42:00 ]
>>515
やってみりゃわかるけど、byrefの方が速いよ

519 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:43:16 ]
>>514
「参照の参照」という表記が、参照がわかってない証拠。

520 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:51:52 ]
ポインタのポインタかよ

521 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 20:53:43 ]
&*p ← キモチワルイ

522 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:06:45 ]
俺もやってみたが何度やってもByRefが少し速いな。
Range型の引数でByValが速いケースってどういうケースだ?

523 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:27:27 ]
測定誤差



524 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 21:33:15 ]
うちではRangeの場合、ByRefの方がByValの2倍早かった@Excel 2007

525 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:28:34 ]
試してみたけど全然違った(Excel 2003)
もちろん、Byrefの方がかなり速い

526 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:38:42 ]
エロい方timeGetTimeで測定オナがいしますorz

527 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:41:48 ]
軽くぐぐったら、ocamlには「参照の参照」という概念があるらしい。

528 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:53:34 ]
>>526
timeGetTimeで計ったが参照私が速かった。
言っとくがtimeGetTimeだって1/1000秒の精度はないからな。

529 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:56:30 ]
渡すのは参照の方が早い。実質ポインタ(4byte)だから。
ただその分使用時に一段間接参照のコストがかかるだけ。

530 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 22:57:51 ]
えええ?

531 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:06:12 ]
そう言えばExcel総合相談所だったか、それともここだったか忘れたが、Worksheet型の引数をByValにしろなんて
意味不明なこと言ってたやつが前にいたな。彼は勘違いしてるんだろうね。

532 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:06:27 ]
基本的にオブジェクト型は参照渡しでいいんです
JAVAと一緒


533 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:07:39 ]
なんか思いっきり勘違いしてる人がいない?



534 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:08:44 ]
>>533
ちゃんとポイントして指摘しろ

535 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:10:19 ]
いや彼にはそのままでいて欲しいからやめとく

536 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:25:40 ]
なら最初から黙っとけよ

537 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:28:20 ]
センセー、何で一段間接参照が入るのに速くなるんでつか?

538 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:32:10 ]
ここVBAのスレだよなぁ?

539 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:37:01 ]
ByValでRangeが渡されると、内部で「Set 仮引数 = 実引数(か、それと同等の処理)」
されてるんじゃないの?
だから、使用時に間接参照のコストなんかかからないんじゃ?

540 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:45:18 ]
>>539
試せばわかる

541 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:47:58 ]
ところで514とか516とか529は試したんだろうか?

542 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:54:37 ]
ん、俺516だけど、今回は計測してないよ。
俺のは、多少遅くとも516のポリシーが良いという主張。
VB.NETも、デフォルトByValになったことだし。

543 名前:デフォルトの名無しさん mailto:sage [2008/01/28(月) 23:59:10 ]
>>542
そっか遅いのは認めるわけね。
ByRefが遅いと書いた514はどうだろう?




544 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:00:11 ]
ここまで実計測データ無し。
Excelってベンチマークデータの公表禁止だったっけ?

545 名前:デフォルトの名無しさん mailto:sage [2008/01/29(火) 00:05:23 ]
>>544
別に禁止じゃねーだろ?
ただみんな自分で計測して分かってると思うけどな
計測してないやつが思い込みでおかしなこと言ってるだけ






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

前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