#值!编写公式时出错

时间:2015-09-04 20:24:49

标签: excel excel-vba excel-formula vba

我有一段代码循环一列,并将公式插入该列的每个单元格中。代码运行,唯一的问题是公式插入的每个单元格显示#Value!有谁知道如何解决这一问题? 以下是带有问题的代码:

Dim j As Long

'Loop down the rows in mainfile

For j = 2 To lastFullRow2


 ' Make each argument a string, then concatenate it all all into large string

    Dim firstArgument As String
    firstArgument = "ws_multidax.Range(" & valuecolumnLetter & "2:" & valuecolumnLetter & lastFullRow1 & ")"

    Dim secondArgument As String
    secondArgument = "ws_multidax.Range(" & parameter1columnLetter & "2:" & parameter1columnLetter & lastFullRow1 & ")"


    Dim thirdArgument As String
    thirdArgument = "ws_multidax.Range(" & parameter2columnLetter & "2:" & parameter2columnLetter & lastFullRow1 & ")"

    Dim fourthArgument As String
    fourthArgument = "ws_multidax.Range(" & parameter2columnLetter & "2:" & parameter2columnLetter & lastFullRow1 & ")"

    Dim condition3 As String
    condition3 = "ws_mainfile.Range(" & "D2:" & D & j & ")"


    Dim patid1 As String
    patid1 = "ws_multidax.Range(" & "D2:" & D & lastFullRow2 & ")"

        With ws_mainfile

Dim commandstring As String

'The formula we want is a concatenated string

commandstring = "{=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))}"

'Insert the formula into each cell as the loop goes down the rows

ws_mainfile.Range("AN" & j).Formula = Eval(commandstring)
'ws_mainfile.Range("AN" & j).Formula = commandstring

        End With           

Next j

#Value!当我使用Eval(命令串)运行该行时,它将被放入单元格中。当我使用formula = commandstring运行该行时,公式将被放入每个单元格中,但它不会解决。

2 个答案:

答案 0 :(得分:3)

您的代码有两个问题:

  1. 您手动插入数组公式的花括号,不要这样做
  2. 您将数组公式作为常规公式
  3. 所以要纠正,请执行以下操作:

    '1. Change this line:
    commandstring = "{=INDEX(....)}"
    
    'And simply remove the curly braces {} from its beginning and end
    commandstring = "=INDEX(....)"
    
    
    '2. Change this line:
    ws_mainfile.Range("AN" & j).Formula = Eval(commandstring)
    
    'To use the .FormulaArray property instead of just .Formula:
    ws_mainfile.Range("AN" & j).FormulaArray = commandstring
    

答案 1 :(得分:0)

你走在正确的轨道上。由于您已在代码中构建了字符串公式,因此无需使用eval函数。问题是你用大括号包围了它,excel就像你输入了文本一样。

请改为尝试:

commandstring = "=INDEX(" & firstArgument & ",MATCH(1,(" & secondArgument & "=" & condition1 & ")*(" & thirdArgument & "=" & condition2 & ")*(" & patid1 & "=" & condition3 & "),0))"

'Insert the formula into each cell as the loop goes down the rows

ws_mainfile.Range("AN" & j).Formula = commandstring