抖音资讯

douyinzx

vba数组赋值给单元格(vba编程基础知识)

iseeyu2年前 (2024-05-08)抖音资讯134

Excel工作表数据本身就是一个天然的二维数组。

数据或信息可以存储到变量或数组等数据结构中,在Excel VBA中,数据可以是直接的字面值,也可以是来源于单元格区域的值。

如果希望处理单元格区域中所有的数据值,赋值给一个VBA数组并处理该数组将比处理该Range对象本身更有效率。之后将数组值再赋回给单元格区域。

将单元格区域里的值赋给一个数组是很容易的,如:

arr = Range("A2:D200").value

以上将单元格区域的值赋给一个变量时,如arr,该变量必须是Variant数据类型。

注意这与创建一个引用单元格区域的对象变量完全不同:

Set rngData = Range("A2:D200")

被赋值后的arr总是一个二维数组(即使区域只有一行或一列,也是二维的),这样可以在数组中继承工作表固有的行和列结构。可以用下标访问其元素:

a = arr(1,2)

如有以下的工作表:

 

想要汇总来自顾客Kee的所有收入,如果不使用数组,则可以用遍历单元格区域的传统方式去计算:

 

使用数组来计算,当数据量较大时,效果更高:

 

同样可以将数组的值直接赋给单元格区域,如假设上表中来自顾客Kee的折扣是10%,可以在收入一列的后面显示折扣值:

 

处理后的数据为:

 

上面Discount列的数据是用一个二维数组zk来映射的,也可以将zk定义为一个一维数组,使用工作表函数Transpose()转置来赋给一列的数据。

只要改变两行代码:

 ReDim zk(1 To UBound(arr, 1))
 Range("F2").Resize(UBound(arr, 1), 1).Value = WorksheetFunction.Transpose(zk)

附代码:

Sub KeeTotal()
 Dim dTotal As Double
 Dim lRow As Long
 'Specify data range
 With Range("A2:E22")
 'Loop through rows
 For lRow = 1 To .Rows.Count
 'Sum rows for Kee
 If .Cells(lRow, 1) = "Kee" Then dTotal = _
 dTotal + .Cells(lRow, 5)
 Next lRow
 End With
 'Display result
 Debug.Print ("Kee Total = " & Format(dTotal, "$#,##0"))
End Sub
Sub KeeTotal2()
 Dim vSalesData As Variant
 Dim dTotal As Double
 Dim lRow As Long
 'Assign range values to variant
 vSalesData = Range("A2:E22").Value
 
 'Sum elements of the array
 For lRow = 1 To UBound(vSalesData, 1)
 If vSalesData(lRow, 1) = "Kee" Then dTotal = _
 dTotal + vSalesData(lRow, 5)
 Next lRow
 
 'Display result
 Debug.Print ("Kee Total = " & Format(dTotal, "$#,##0"))
 
End Sub
Sub Discount()
 Dim arr As Variant
 Dim zk() As Variant
 Dim i As Long
 'Assign range values to variant
 arr = Range("A2:F22").Value
 
 'Match output array row count to input row count
 ReDim zk(1 To UBound(arr, 1), 1 To 1)
 
 'Process data in variant
 For i = 1 To UBound(arr, 1)
 If arr(i, 1) = "Kee" Then
 zk(i, 1) = arr(i, 5) * 0.1
 End If
 Next i
 
 'Write array values to worksheet
 Range("F2").Resize(UBound(arr, 1), 1).Value = zk
End Sub
Sub Discount2()
 Dim arr As Variant
 Dim zk() As Variant
 Dim i As Long
 'Assign range values to variant
 arr = Range("A2:F22").Value
 
 'Match output array row count to input row count
 ReDim zk(1 To UBound(arr, 1))
 
 'Process data in variant
 For i = 1 To UBound(arr, 1)
 If arr(i, 1) = "Kee" Then
 zk(i) = arr(i, 5) * 0.1
 End If
 Next i
 
 'Write array values to worksheet
 Range("F2").Resize(UBound(arr, 1), 1).Value = _
 WorksheetFunction.Transpose(zk)
End Sub
-End-

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/42475.html

相关文章

抖音助手有欺诈行为吗?抖音助手有欺诈行为吗

抖音助手有欺诈行为吗?抖音助手有欺诈行为吗?DOU+是什么 抖音助手有诈骗行为吗? 没有的。 抖音助理官方工作账号,即抖音管理员、用户、用户@抖音助手可以争取推荐热点,获得更多的播放量和曝光度。 抖音助手是抖音短视频的官方账号,专门评选抖音精品内容,@...

360移动搜索推广系统能提供每次点击的IP来源吗?

360移动搜索推广系统能提供每次点击的IP来源吗?

360移动搜索推广系统能提供每次点击的IP来源吗? 1: 什么是无效点击? 无效点击是相对与正常点击而言的,是指经系统确认的、不会为您带来有效访问的点击。一旦判断为无效点击,则该次点击将被过滤而不会计费。造成无效点击的方式包括重复性的人工点击,或利用软件进行的自动点击等方式。 2:&...

ps怎么无痕去水印(ps去水印的几种方法)

ps怎么无痕去水印(ps去水印的几种方法)

我们在网上下载图片,打开后全是水印?虽然不影响观看,但多少看起来有点不美观。 今天小编今天就给大家分享3个图片去水印的方法,让大家轻松去除图片上的水印。   一、使用“PS”去除水印 提到去水印,PS无疑是一个好用的工具,但是大家应该也知道它的使用上是有...

只有一个手机号怎么注册两个抖音账号(申请抖音新账号步骤)

只有一个手机号怎么注册两个抖音账号(申请抖音新账号步骤)

无论实名账号用来开橱窗也好,直播带货也好,都是可遇而不可求的,趁着现在还可以实现双认证,赶紧去认证吧   非常简单,手把手教会你 第一、假设你已经有一个抖音号并且已经实名,那么用另外一个手机号注册并登陆抖音 第二、下载抖音火山版,登陆的时候选择抖音号登陆...

抖音账号前期怎么运营(1/4)

抖音账号前期怎么运营(1/4)

如何运营好抖音?首先你要明白,运营是一个系统的,从定位、生产、分发、运营、用户、等,前期把每个环节的工作做好,推送作品后根据综合的数据表现,进行分析问题,复盘到底是哪个环节出现问题,再不断的优化调整。一、定位与搭建:账号定位、团队分工、账号搭建1、明确账号的定位如果你经常刷...

百度推广和360推广有什么区别?

百度推广和360推广有什么区别?

然后会有一些相对这个不客观的描述,然后同时视频介绍也会相对大一些。但是今天在里面大家看到百度广告投放,其实视视频本身的制作的来源其实来自于兴趣,就是我们会围绕用户的兴趣来制作一些视频,并不是围绕商品本身。 第二个大家会看到,比如大家在里面看到很多这种妈妈拍的这种百度推广开户玩具类的视频,或者包...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片