修剪Excel VBA的代码

修剪Excel VBA的代码,vba,excel,macros,Vba,Excel,Macros,我试图将其作为宏输入,但遇到了问题,因为公式数组需要少于255个字符。我只想让宏用下面的数组填充表6中的所有单元格。有什么建议吗 VBA: 范围(“H31”)。选择 Selection.FormulaArray=_ “=IFERROR(如果([@[种下一代])”F2“,索引(表45,匹配(1),([@[性状]]=表45[性状])*([@[胚胎/种子]]=表45[输入类型]),0),3),如果([@[种下一代])=”F2“,索引(表46,匹配(1,[@[性状]]=表46[性状]*([@[胚胎/种子

我试图将其作为宏输入,但遇到了问题,因为公式数组需要少于255个字符。我只想让宏用下面的数组填充表6中的所有单元格。有什么建议吗

VBA:

范围(“H31”)。选择
Selection.FormulaArray=_
“=IFERROR(如果([@[种下一代])”F2“,索引(表45,匹配(1),([@[性状]]=表45[性状])*([@[胚胎/种子]]=表45[输入类型]),0),3),如果([@[种下一代])=”F2“,索引(表46,匹配(1,[@[性状]]=表46[性状]*([@[胚胎/种子]=表46[输入类型]),0),3),”)=0“,如果([@[种下一代],”)=表46,匹配(表45),”([@[特征]]=表“&_
“])*([@[胚胎/种子]]=表45[输入类型]),0),3),如果([@[种植的一代]]=”F2“,索引(表46,匹配(1,([@[性状])]=表46[性状]*([@[胚胎/种子]=表46[输入类型]),0),3),”),”)
Selection.AutoFill目标:=范围(“表6[选择]”),类型:=_
xlFillDefault
范围(“表6[选择]”)。选择
我想在H31:H2043(又名Table6[Selection])中用作数组的公式:

=IFERROR(如果([@[种植的一代])“F2”,索引(表45,匹配(1),([@[性状]]=表45[性状]*([@[胚胎/种子]]=表45[输入类型]),0),3),如果([@[种植的一代])=“F2”,索引(表46,匹配(1,[@[性状])=表46[性状]*([@[胚胎/种子]=表46[输入类型]),0),3),“)=0”,如果([@[种植的一代],“种植的一代],”)=表46[性状]([@](s) ]]=表45[性状]*([@[胚胎/种子]]=表45[输入类型]),0),3),如果([@[种植的世代]]=“F2”,索引(表46,匹配(1,([@[性状]]=表46[性状]*([@[胚胎/种子]]=表46[输入类型]),0),3),“”)

这是用于用您的公式填充范围“H31:H2043”:

Range("H3:H2043").Formula = "=IFERROR(IF(IF([@[Generation Planted]]<>"F2",INDEX(Table45,MATCH(1,([@[Trait(s)]]=Table45[TRAIT])*([@[Embryo/Seed]]=Table45[Input_type]),0),3),IF([@[Generation Planted]]="F2",INDEX(Table46,MATCH(1,([@[Trait(s)]]=Table46[TRAIT])*([@[Embryo/Seed]]=Table46[Input_type]),0),3),""))=0,"",IF([@[Generation Planted]]<>"F2",INDEX(Table45,MATCH(1,([@[Trait(s)]]=Table45[TRAIT])*([@[Embryo/Seed]]=Table45[Input_type]),0),3),IF([@[Generation Planted]]="F2",INDEX(Table46,MATCH(1,([@[Trait(s)]]=Table46[TRAIT])*([@[Embryo/Seed]]=Table46[Input_type]),0),3),""))),"")
Range(“H3:H2043”).Formula=“=IFERROR(如果([@[种植的一代])”F2),索引(表45,匹配(1,([@[性状])]=表45[性状]*([@[胚胎/种子]=表45[输入的类型]),0),3),如果([@[种植的一代]=“F2”),索引(表46,匹配(1,([@[性状])=表46[性状]*([@[胚胎/种子]=表46[输入的类型]),0),3),“=0”,“如果种植的一代]”=0,“[F2]“,索引(表45,匹配(1,([@[性状]]=表45[性状])*([@[胚胎/种子]]=表45[输入类型]),0),3),如果([@[世代种植]]=”F2“,索引(表46,匹配(1,([@[性状]]=表46[性状]*([@[胚胎/种子]=表46[输入类型]),0),3),”),“”)

您可以使用
SendKeys
(如果您的Windows/Excel版本支持SendKeys),使用VBA将非常大的数组公式输入到单元格中。下面是一个非常简单的示例:

Sub dural()
    Dim BigString As String

    BigString = "=A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1"
    MsgBox Len(BigString)

    Range("B8").Formula = BigString

    Range("B8").Select
    Application.SendKeys "{F2}"
    Application.SendKeys "^+{ENTER}"
End Sub


诀窍是首先正常输入公式,然后应用Ctrl+Shift+enter

,因此我在表格中创建了一个新列,列r中的每一行都有数组,然后填充范围h等于r.dee dee dee。问题是双公式;将其放在另一个可以隐藏的列中;
=IFERROR(IF([@[Generation]])”“F2”,索引(表45,匹配(1,([@[性状]]=表45[性状]*([@[胚胎/种子]]=表45[输入类型]),0),3),索引(表46,匹配(1,([@[性状]]=表46[性状]*([@[胚胎/种子]]=表46[输入类型]),0),3),0)
然后在H中放入一个小if;
如果(Z31=0,”,Z31)
其中Z是放置长公式的位置。如果您不想这样做,请将长公式按需放置在H中,并将自定义数字格式设置为
[0]0;;
这将使任何0在视觉上变为空单元格。
Range("H3:H2043").Formula = "=IFERROR(IF(IF([@[Generation Planted]]<>"F2",INDEX(Table45,MATCH(1,([@[Trait(s)]]=Table45[TRAIT])*([@[Embryo/Seed]]=Table45[Input_type]),0),3),IF([@[Generation Planted]]="F2",INDEX(Table46,MATCH(1,([@[Trait(s)]]=Table46[TRAIT])*([@[Embryo/Seed]]=Table46[Input_type]),0),3),""))=0,"",IF([@[Generation Planted]]<>"F2",INDEX(Table45,MATCH(1,([@[Trait(s)]]=Table45[TRAIT])*([@[Embryo/Seed]]=Table45[Input_type]),0),3),IF([@[Generation Planted]]="F2",INDEX(Table46,MATCH(1,([@[Trait(s)]]=Table46[TRAIT])*([@[Embryo/Seed]]=Table46[Input_type]),0),3),""))),"")
Sub dural()
    Dim BigString As String

    BigString = "=A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1 & A1"
    MsgBox Len(BigString)

    Range("B8").Formula = BigString

    Range("B8").Select
    Application.SendKeys "{F2}"
    Application.SendKeys "^+{ENTER}"
End Sub