5

これは奇妙です... 誰かが何らかの知識を持っているか、なぜこれが起こっているのかを理解できますか?

以前は、数式の配列を Excel の範囲に割り当てることができました (高速割り当ての例: Range("A1:A1000") = ArrayOfFormulas )。セルごとに割り当てるのと比較して、正常に機能し、高速(非常に高速)でした(セルごとのループ Range("A" & i).Formula=ArrayOfFormula(i)遅いです!)。

現在、Excel 2013 を使用していますが、文字列の配列に保存されている数式を Excel の範囲に割り当てようとしても機能しません (下の図の左側の部分のように、数式は表示されますが、計算は表示されません)。残念ながら、古いコードを取得して比較することはできません。たとえば、次のコードは、A1 から A1000 の範囲で "3" ではなく "=1+2" を示します。

Sub AssignFormulas_1()
    Dim i as Long
    Dim FORML_ARRAY(1 To 1000, 1 To 1) As String
    For i = 1 To 1000
         FORML_ARRAY(i, 1) = "=1+2"
    Next i
    Range("A1:A1000").Formula = FORML_ARRAY  '<- Don't work as formula
                                             '   It put the value!
End Sub

ただし、数式の配列を使用しない場合は正常に機能します (下の図の右側のように、すべてのセルに「=1+2」ではなく「3」が表示されます)。ここにコード:

Sub AssignFormulas_2()
    Dim i as Long
    Dim FORML_SINGLE As String
    FORML_SINGLE = "=1+2"
    Range("A1:A1000").Formula = FORML_SINGLE '<- works ok, not practical for my
                                             '   real life case as I need 
                                             '   different formula for each cell.
End Sub

次のコードもうまく機能します (この場合、数式をセルごとに割り当てるため、より柔軟ですが、大きな数式の場合は遅くなります)。

Sub AssignFormulas_3()
    Dim i as Long
    Dim FORML_ARRAY(1 To 1000, 1 To 1) As String
    For i = 1 To 1000
         FORML_ARRAY(i, 1) = "=1+2"
         Range("A1:A" & i).Formula = FORML_ARRAY(i, 1) '<- works ok, but slowly
    Next i
End Sub

上記のすべてのコードの出力を含む写真:

間違った結果 (左) と正しい結果 (右) の例


注: セルは、テキストではなく数値として適切にフォーマットされています。

4

3 に答える 3

2

別のオプションを追加するだけで、あなたが言ったように、アレイを正しく暗くしたいのですが、これにより、全体のサブに1/250秒しか追加されません(ループごとではありません)が、アレイを暗くすることができます文字列として。

Sub AssignFormulas_2()
    Dim i As Long

    Dim FORML_ARRAY(1 To 1000, 1 To 1) As String

    For i = 1 To 1000
         FORML_ARRAY(i, 1) = "= " & i & " + 2"
    Next i

    Range("A1:A1000").Formula = FORML_ARRAY  '<- Don't work as formula
                                             '   It put the value!

    Range("A1:A1000").Value = Range("A1:A1000").Value
End Sub

Excel が文字列を定数として読み取る理由はわかりませんが、元の数式を実行して [数式の評価] に移動すると、セルに定数が含まれているというエラーが表示されます。これは本当にバグのようですが、何か他のものを見つけて、答えも編集します。

注:この回答は、受け入れられた回答としてより良い回答になることを意図したものではありません。これはより遅い回答であり、より代替的なものです。配列を文字列で暗くしたいという要求に答えます。

更新:この方法は、受け入れられた回答と上記の方法の違いを分割します。これにより、潜水艦の実行時間が 1/500 秒だけ追加されます。

Sub AssignFormulas_Transpose()
    Dim i As Long

    Dim FORML_ARRAY(1 To 1000) As String
    For i = 1 To 1000
         FORML_ARRAY(i) = "= " & i & " + 2"
    Next i

    Range("A1:A1000").Formula = Application.Transpose(FORML_ARRAY)  '<- Don't work as formula
                                                                    '   It put the value!
End Sub
于 2013-10-08T13:39:25.773 に答える