2017-09-21 8 views
0

私はlistobject列ごとに一連の関数を持っています。ファイルは重くてクラッシュするので、各式の結果を静的な値として保持したいだけです。範囲に式を割り当てて、範囲を値に変換するようExcelに依頼することができます。しかし、式自体の代わりに範囲内の静的な値だけを書き込むようにVBAに依頼する方法があるかどうかは疑問です。ここで は、私がこれまで持っているものです:自分の質問への答えとしてVBAコードで式の結果をExcel範囲に直接書き込む方法

Sub calculate2() 
Dim i As Long, t As Long 
t = Timer 
    With Sheet3.ListObjects(1) 
     For i = 3 To 9 
     .ListColumns(i).DataBodyRange.ClearContents 
     .Range.Cells(2, i).Formula = sheets3.range("formula").cells(i,1).formula 
     .ListColumns(i).DataBodyRange = .ListColumns(i).DataBodyRange.Value 
     Next i 
    End With 
Debug.Print Timer - t 
End Sub 
+1

あなたは(2、I).Valueの= '.Range.Cellsを試してみました。 ListColumns(i)。合計 '? – UGP

+0

ちょっと、実際には、私は数式を保持するために合計行を使用しています。このようなものがそこに保存されます。 '= IFERROR(IF(COUNTIFS( 'ZZ84'!$ B:$ B、[@ WO]、 'ZZ84'!$ E:$ E、 '= * V99'、 'ZZ84'!$ L:$ L (ZZ84)!$ G: 'ZZ84'!$ B:$ B、[@ WO]、 'ZZ84'!$ L:$ L、 ( "ZZ84"!$ G: 'ZZ84'!$ B:$ B、[@ WO])/ 10)/ 10 = 1,0,1-SUMIFS( 'ZZ84 '!$ G:' ZZ84 '!$ B:$ B、[@ WO]、' ZZ84 '!$ L:$ L、 "")/((SUMIFS(' ZZ84 '!$ G:$ G 、 "ZZ84"!$ B:$ B、[@ WO]))/ 10)/10-0.01))、 "") 'コードを変更しました。数式は=で始まるテキスト文字列です。 –

答えて

0

、 は私が探していたことである:「application.Evaluateは」私は誰もが検索を見つけることができることでここに来たので、あればという掲示しています私が最終的に見つけたアイデアと解決策。この場合

Sheet3.ListObjects(1).ListColumns(3).DataBodyRange = [IFERROR(IF(COUNTIFS(ZZ84!$B:$B,[WO],ZZ84!$E:$E,"=*V99"‌​,ZZ84!$L:$L,"<>")=1,1,0),"")] 

がループする必要がなく、各範囲のコードの入用線(埋め込みIはexcatly探していたものVBA、関数)を書くことがあります。ここでの例です。上記の関数でexcelセルに直接置くことで唯一異なるのは、[@WO]の代わりに[WO]を使用することです。したがって、データの配列を評価し、指定された範囲に直接書き込んでください。 (ここではリスト列3の本文範囲)。

私にとっては、私の機能によって声調計算がクラッシュするのを避けるのに役立ちました。

別の簡単な例は次のようになります。

range("b1:b10")=[if(row(1:10),if(a1:a10>3,"big","Small"))] 

または

range("b1:b10") = evaluate("if(row(1:10),if(" & range("a1:a10").address&">3,""big"",""small""))") 

種類のよろしく、 M

関連する問題