excelVBA代码怎么在单元格中输入数组公式

作者&投稿:徵蒋 (若有异议请与网页底部的电邮联系)
~

Q我想使用VBA代码在单元格中输入数组公式,如何实现?

A:Range对象提供了一个FormulaArray属性,可以用来设置或者返回单元格区域中的数组公式,也就是说,在工作表单元格中输入完后需要按Ctrl+Shift+Enter组合键才能最终完成的公式。

如下所示,要求工作表Sheet2中所列出的水果总的销售金额,即分别使用各种水果的单价乘以各自的销量后的和。

代码:

Sheet2.Range(“C7”).FormulaArray= “=SUM(B2:B5*C2:C5)”

在单元格C7中输入数组公式并计算结果,如下所示。

上面演示了VBA代码在单个单元格中输入数组公式,如果要在多个单元格中输入数组公式呢?如下面的代码所示:

Sheet3.Range(“B1:B6”).FormulaArray= “=A1:A6=”” Excel”””

判断工作表Sheet3的单元格区域A1:A6中的值是否为“ Excel”,如果是则返回TRUE,否则为FALSE。运行代码后的结果如下所示。

如果需要输入的数组公式在每个单元格中都不同呢?下面以colinlegg.wordpress.com中提供的示例来说明。

如下所示,在列C中输入列E中的值等于其对应的列A单元格中的值或者列F中的值等于其对应的列B单元格中的值时列G中的最大值。

下面的四段代码均可实现。

代码1

Sub test()

Dim r As Long

For r = 2 To 5

Sheet1.Cells(r, 3).FormulaArray = _

“=MAX(IF((($E$2:$E$1 =A”& CStr(r) & “)+($F$2:$F$1 =B” & CStr(r) &”))=1,$G$2:$G$1 ))”

Next r

End Sub

使用循环来完成数组公式在单元格中的输入。

代码2

Sub test1()

With Sheet1

.Range(“C2”).FormulaArray = _

“=MAX(IF((($E$2:$E$1 =A2)+($F$2:$F$1 =B2))=1,$G$2:$G$1 ))”

.Range(“C2:C5”).FillDown

End With

End Sub

代码先在第一个单元格中输入数组公式,然后复制并向下填充公式。

代码3

Sub test2()

With Sheet1

.Range(“C2”).FormulaArray = _

“=MAX(IF((($E$2:$E$1 =A2)+($F$2:$F$1 =B2))=1,$G$2:$G$1 ))”

.Range(“C2”).Copy

.Range(“C3:C5”).PasteSpecialxlPasteFormulas

End With

Application.CutCopyMode = False

End Sub

代码先在第一个单元格中输入公式,然后将其复制,接着粘贴所复制的公式。

代码4

Sub test3()

With Sheet1.Range(“C2:C5”)

.Formula = _

“=MAX(IF((($E$2:$E$1 =A2)+($F$2:$F$1 =B2))=1,$G$2:$G$1 ))”

.FormulaArray = .FormulaR1C1

End With

End Sub

在使用FormulaArray属性时可能会发生下和所示的错误:

其原因可能是有以下几种。

原因1:试图修改数组单元格区域中的某些单元格

例如下面的代码:

Sheet3.Range(“B1:B6”).FormulaArray= “=A1:A6=”” Excel”””

Sheet3.Range(“B1”).Value= “excelperfect”

会导致错误。可以先判断要修改的单元格是否处于数组公式区域,例如:

With Sheet3

.Range(“B1:B6″).FormulaArray =”=A1:A6=”” Excel”””

With .Range(“B1”)

If .HasArray Then

MsgBox “单元格处于数组公式区域” & .CurrentArray.Address

End If

End With

End With

原因2:试图在合并单元格中输入数组公式

如果先在单元格中输入数组公式然后再和其他单元格合并,这没有问题。然而,不能够在已经合并的单元格中输入数组公式。例如,下面的代码将失败:

With Sheet3

.Range(“C1:C6”).Merge

.Range(“C2″).FormulaArray =”=A1:A6=”” Excel”””

End With

可以先对要输入数组公式的单元格进行检查:

With Sheet3

.Range(“C1:C6”).Merge

With .Range(“C1”)

If .MergeArea.Address = .Address Then

MsgBox “没有合并单元格”

Else

MsgBox “单元格已合并,地址为: ” & .MergeArea.Address

End If

End With

End With

原因3:数组公式存在语法错误,例如参数缺失或无效参数

WithSheet3.Range(“F1”)

‘SUM函数参数缺失

.FormulaArray = “=SUM()”

‘SUMIF函数的第1个参数和第3个参数不能接受数组

.FormulaArray = “=SUMIF((A1:A2 =1)*(B1:B2 ),B1,C1:C2 )”

End With

原因4:数组公式超过了255个字符

VBA帮助中指出,FormulaArray属性的值不能超过255个字符。若公式的字符超过255个字符,可以使用DailyDoseOfExcel介绍的技巧,使用Replace方法:

Public SubLongArrayFormula()

Dim theFormulaPart1 As String

Dim theFormulaPart2 As String

theFormulaPart1 =”=IF(MONTH(DATE(YEAR(NOW()),MONTH(NOW()),1))-” & _

“MONTH(DATE(YEAR(NOW()),MONTH(NOW()),1)-” & _

“(WEEKDAY(DATE(YEAR(NOW()),MONTH(NOW()),1))-1)+” & _

“{ ;1;2;3;4;5}*7+{1,2,3,4,5,6,7}-1),””””,”& _

“X_X_X())”

theFormulaPart2 =”DATE(YEAR(NOW()),MONTH(NOW()),1)-” & _

“(WEEKDAY(DATE(YEAR(NOW()),MONTH(NOW()),1))-1)+” & _

“{ ;1;2;3;4;5}*7+{1,2,3,4,5,6,7}-1)”

With ActiveSheet.Range(“E2:K7”)

.FormulaArray = theFormulaPart1

.Replace “X_X_X())”,theFormulaPart2

.NumberFormat = “m””月””d””日”””

End With

End Sub

上述程序将在单元格区域E2:K7中生成当月的日历。

正如本文一开始所的,FormulaArray属性还可以返回单元格中的公式。

如果想要从单个单元格中返回公式,那么无论单元格中是否包含数组公式,Formula属性和FormulaArray属性都会返回相同的结果。然而,Formula属性和FormulaArray属性应用于连续的、多单元格区域时返回不同的结果。

如果单元格区域中含有数组公式,即多个单元格中为一个数组公式,那么FormulaArray属性返回该公式。

如果单元格区域不是数组区域但所有单元格都包含相同的公式,那么FormulaArray属性也返回该通用公式。

如果单元格区域不是数组区域且包含的公式不相同,那么FormulaArray属性返回Null。

在上述所有三种情形中,Formula属性返回Variant型数组,数组中的每个元素表示区域中每个单元格的公式。




共享两段excelvba分列代码实现不规则数据源的分列
excel vba 分列多用于一般常规的分列操作完成不了的情况。Excel内置的分列,仅用于有规律的数据进行分列。比如下面的截图,这样的数据源,分列就可以考虑使用excel vba 分列完成。A列数据源,要将汉字和数字分列后的效果如B:D列。下面是两段excel vba 分列的代码,案例和答案来自论坛版主。第一段excel ...

VBA调用Excel函数公式的代码Excel教程
通过VBA调用Excel中的函数,具有相当的灵活性,当我们在处理未知区域即不确定有多少行和多少列的时候,如果使用VBA调用函数,那么,将是一种稍有智能性的数据处理方法。下面,给大家详细介绍,在EXCEL中,如何通过VBA调用函数并给函数指明参数。①种调用方法 Worksheets(1).Range("E6") = WorksheetFunction...

excel怎么打开VBA代码?
1、打开excel软件,点击左上角“文件”;2、点击选项;3、在excel选项界面点击自定义功能区,勾选开发工具,点击确定;4、开启开发工具后就可以在主菜单上看到开发工具选项卡了,需要打开VBA就在开发工具选项卡点击visual basic即可;5、写一个简单代码,在VBA窗口选择插入-模块,新建一个模块。点击模块1...

Excelvba删除工作表的代码和实例
文章介绍excel中vba删除工作表的方法,并通过两个案例来具体理解vba代码。上一篇文章我们介绍了使用excel的基础操作来删除工作表。本文给大家分享vba删除工作表的代码写法。vba删除工作表案例一:删除一张表以外的所有工作表 如下图所示:这一个excel工作薄包含多张工作表,如何使用vba删除 “IT部落窝论坛”...

excel vba代码?
一、工作表2-4,回主页代码如下:sub gotoHome()activesheet.visible=xlsheetveryhidden sheets("主页").activate end sub 二、工作表1,回工作表2-4,sheet2请自行修改为3,4,代码如下:sub gotoSht2()sheets("sheet2").visible=true sheets("sheet2").activate end sub 手机打码,未测试,可...

求Excel 公式或VBA代码
则返回"大于10",否则返回"小于等于10"。如果您需要更复杂的操作或自动化任务,那么VBA代码可能更适合您。例如,您可以使用VBA来自动填充数据、格式化工作表、处理数据等。请提供更多具体信息,例如您想要解决的问题、需要执行的操作或想要实现的功能,以便我能够为您提供更准确的Excel公式或VBA代码示例。

请求大神帮忙写个excel VBA代码,谢谢!
法如下:一、开发工具 二、双击sheet 三、建立事件 选择Change事件 四、编写代码 Private Sub Worksheet_Change(ByVal Target As Range)Dim FRG As Range If Target.Column = 2 Then Set FRG = Sheet2.Range("B:B").Find(Target)If Not FRG Is Nothing Then Sheet1.Range("B" & Target.Row...

excel如何添加VBA代码?
1、在excel中可以添加VBA代码,通过打开“开发工具”,点击打开VB编辑器,进入VBA编写代码。1开发工具 2VB编辑器 3选择工作,双击 4在代码窗中输入代码 2、VBA,Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软开发出来在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。

Excel VBA常用代码实战大全目录
Excel VBA常用代码实战大全本章详细介绍了Excel VBA中涉及范围(Range)对象的多种操作,包括单元格引用、选定区域、获取特定单元格、定位特殊单元格、查找特定内容、替换字符串、复制单元格等实用技巧。例如,范例1展示了如何通过Range对象引用和操作单元格。在Sheet(工作表)对象部分,范例18讲解了引用工作...

excel中的VBA代码解释
Range是区域对象,Range("b2:f5")就是指左上角为“B2”单元格,右下角为“F5”单元格这样一个连续的区域,应该是4行5列的一个区域。Interior.ColorIndex 是指填充颜色(这里是采用ColorIndex严格说是颜色常数)xlNone 表示清除原来的填充色。所以这行代码就是清除区域Range("b2:f5")里的填充色。二...

永新县17373752490: excel如何添加VBA代码? -
少俊奥丽: 1、在excel中可以添加VBA代码,通过打开“开发工具”,点击打开VB编辑器,进入VBA编写代码.1开发工具2VB编辑器3选择工作,双击4在代码窗中输入代码2、VBA,Visual Basic for Applications(VBA)是Visual Basic的一种宏语言,是微软...

永新县17373752490: 如何在Excel单元格中实现VBA代码
少俊奥丽: 呵呵 我来回答咯~ 记得给我加分哦 for i=1 to 3 for j=1 to i cells(j,i)='*' next next 应该是这样的吧

永新县17373752490: Excel 请问:用VBA在单元格中如何写入公式 -
少俊奥丽: 两种方法,比如你要在单元格A1当中输入公式=SUM(B1:C3) 可以使用以下代码 第一种: Range("A1").FormulaR1C1 = "=sum(RC[1]:R[2]C[2])" 第二种: Range("A1") = "=sum(B1:C3)"

永新县17373752490: 在EXCEL中,如何使用VBA设置单元格内指定字符串格式 -
少俊奥丽: Sub ss()Dim j As Longj = InStr(Range("A1"), "格式")With Range("A1").Font.FontStyle = "正常".Characters(Start:=j, Length:=2).Font.FontStyle = "加粗"End With End Sub 这个代码可以让你的格式两个字在任意位置 如果你A1是固定的这几个字,那么一句话搞定 Range("A1") .Characters(Start:=4, Length:=2).Font.FontStyle = "加粗"

永新县17373752490: 在excel的vba中如何给单元格输入公式 -
少俊奥丽: Sub LF() Range("B12").Formula = "=if(H2=C2,"""",""数据不一致"")"'Cells(2, 12).Value = "=if(H2=C2,"""",""数据不一致"")" End Sub

永新县17373752490: 如何用VB代码往EXCEL单元格里输入公式? -
少俊奥丽: 楼上的是计算,不是公式.VBA设置公式可以 Range("A1").Value = "=B1+B2+B3" 依此类推:For i = 1 To 30 Range("A" & i).Value = "=B" & 3 * i - 2 & "+B" & 3 * i - 1 & "+B" & 3 * i Next i

永新县17373752490: excel中的公式如何用VBA代码实现 -
少俊奥丽: 用VBA的思路如下: 1、首先可以用一个循环遍历C3、E3两列数据 2、按照你选定的公式做计算(数值或逻辑计算) 3、如需要可添加按钮、文本、用户窗体

永新县17373752490: excel vba如何用代码在单元格内插入复选框(activeX控件),求代码 -
少俊奥丽: 软件版本:Office2007 方法如下:1.可以通过录制宏,插入一个复选框,然后查看代码如下:2.然后修改代码成为我们想要的,ActiveSheet即工作表,我们改成Sheet1 四个数据,分别是距离顶端位置,距离左边位置,复选框长度,复选框高度(可以更改数值,看看复选框的变化,就能知道每个数据的意思),改成我们需要的,如果是在某个单元格中,可以利用range的top和left选项获得单元格的位置,如下图所示代码:3.F5执行代码,返回Excel,就可以看到插入的复选框:

永新县17373752490: EXCEL中使用VBA编程时想要把数据填入选定的单元格 -
少俊奥丽: Private Sub CommandButton1_Click() Selection = ComboBox1 End Sub ComboBox1是 ComboBox1.text的简化 Selection是当前选定区域

永新县17373752490: VBA在excel 表中如何将两个单元格内容写入到一个单元格 -
少俊奥丽: 假设要把A1/A2单元格的内容合并到B1单元格,那么输入如下代码: sub aa() range("B1")=range("A1")&range("A2") end sub

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网