advanced help
per page, with , order by , clip by
Results of 1 - 1 of about 37655 for IF (0.008 sec.)
[[20130828173208]]
#score: 1592
@digest: e3b379f42f8af8ff764c02dbb6d64468
@id: 63314
@mdate: 2013-08-29T23:51:41Z
@size: 5212
@type: text/plain
#keywords: hitdata (87217), 字調 (30995), koutei (25546), hit (16964), 字di (8810), 値管 (6425), スdi (4709), ス回 (3920), 数自 (3899), 行di (2852), ーイ (2739), ci (2706), 列ぐ (2565), 義型 (2239), 別列 (2029), rw (1540), 稲葉 (1286), function (1243), にdi (1220), 要因 (1215), カラ (1198), interior (1160), 速度 (1131), デッ (1056), colorindex (954), 用途 (914), セス (819), ンデ (784), (稲 (761), やつ (752), 依存 (739), 葉) (728)
『ユーザー定義型関数の速度を上げる方法について』(BB)
Windows Vista、Excel2003です。 エクセル上のセルの色にて数量を数える関数を作っているのですが、 データの更新にすごく時間がかかります。 関数自体は、100行の200列ぐらいに使用しております。 速度を上げる方法は、ないでしょうか? 下記が現状の関数です。 よろしくお願いします。 Function koutei(a, b As Range) As Integer Dim HitData As String Dim c As Range HitData = a hit = 0 For Each c In b If Len(c.Text) = 0 Then If c.Interior.ColorIndex = 36 Then For i = -1 To -1000 Step -1 If Len(c.Offset(0, i)) > 0 Then Exit For End If Next If HitData = c.Offset(0, i).Text Then If c.Row > 37 And c.Row < 106 Then hit = hit + 2 Else hit = hit + 1 End If End If End If Else If HitData = c.Text Then If c.Row > 37 And c.Row < 106 Then hit = hit + 2 Else hit = hit + 1 End If End If End If Next koutei = hit End Function ---- よくわかってないけど・・・ どういう時にどうやって使うの? 一応セルへのアクセス回数を減らすため、変数に入れる案 Function koutei(a, b As Range) As Integer Dim HitData As String Dim c As Range Dim rw As Long '行 Dim t As String '文字 Dim d As Variant 'よくわからないけど、文字調べてるやつを配列に Dim ci As Long 'カラーインデックス Dim x As String '文字調べてるやつ HitData = a hit = 0 For Each c In b t = c.Text ci = c.Interior.ColorIndex rw = c.Row cl = c.Column If Len(t) = 0 Then If ci = 36 Then d = c.Resize(, c.Column - 1).Text For i = 1 To cl Step 1 x = d(1, cl - i) If Len(x) > 0 Then If HitData = x Then If rw > 37 And rw < 106 Then hit = hit + 2 Else hit = hit + 1 End If Exit For End If End If Next i End If Else If HitData = t Then If rw > 37 And rw < 106 Then hit = hit + 2 Else hit = hit + 1 End If End If End If Next c koutei = hit End Function (稲葉) ---- (稲葉)さま ありがとうございます。 さっそく試してみます。 (BB) ---- 間違えてた! -方向のOFFSET後にリサイズ 配列をtextじゃなくてvalue あと処理まとめた Function koutei(a, b As Range) As Integer Dim HitData As String Dim c As Range Dim rw As Long '行 Dim t As String '文字 Dim d As Variant 'よくわからないけど、文字調べてるやつを配列に Dim ci As Long 'カラーインデックス Dim x As String '文字調べてるやつ Dim flg As Boolean 'hit加算処理をまとめるため HitData = a hit = 0 For Each c In b t = c.Text rw = c.Row cl = c.Column d = c.Offset(, -cl + 1).Resize(, cl).Value ci = c.Interior.ColorIndex flg = False If Len(t) = 0 Then If ci = 36 Then For i = 1 To cl - 1 Step 1 x = d(1, cl - i) If Len(x) > 0 Then If HitData = x Then flg = True Exit For End If End If Next i End If Else If HitData = t Then flg = True End If End If If flg Then If rw > 37 And rw < 106 Then hit = hit + 2 Else hit = hit + 1 End If End If Next c koutei = hit End Function (稲葉) ---- >関数自体は、100行の200列ぐらいに使用しております。 20000箇所でこの関数を実行すると、遅いでしょうね。特に引数 b で指定される範囲が 広い場合は一回の関数呼び出しで多量のセルアクセスが発生するので、現行の構成だと どうしても時間がかかると思います。 一番時間のかかる要因はセルの色に依存して処理しているからですが、これを別列のセルに ステータスとセットで数値管理するようにできないでしょうか。 あるいは計算範囲がシンプルなのであれば、ユーザ定義関数ではなくマクロの一括処理で 行えば早くなると思います。 今回の関数は少量のセルでの使用でしたら問題ないかもしれませんが、広範囲で使用する 用途には適さないように思います。 (Mook) ---- (稲葉)さま (Mook)さま ありがとうございました。 二層構造にして、値のみで管理してみます。 (BB) ...
http://www.excel.studio-kazu.jp/wiki/kazuwiki/201308/20130828173208.txt - [detail] - similar
PREV NEXT
Powered by Hyper Estraier 1.4.13, with 97038 documents and 608037 words.

訪問者:カウンタValid HTML 4.01 Transitional