如何用VBA在excel中插入一个矩阵

如何用VBA在excel中插入一个矩阵,第1张

1for i=1 to m

for j=1 to i

sheet1cells(i,j)=inputbox("输入数据A(" &cstr(i) &"," &cstr(j) &"):","0")

next j

next i

2for i=2 to m

for j=1 to i-1

sheet1cells(j,i)=sheet1cells(i,j)

next j

next i

剪贴板 *** 作有许多函数据,可以对剪贴板进行各种 *** 作包括写入\读出\清空等

下面给出对剪贴板是否有数据,有数据的情况下读取首行和末行的内容并赋值给变量a和b

具体例子如下:

Public Sub 调试1()

Dim a As New DataObject

aGetFromClipboard

gx = aGetText

if gx<>"" then

aa = Split(gx, Chr(9))

bb = UBound(aa)

a1 = aa(0)

a2 = aa(bb)

endif

End Sub

Dim i&, Myr&, r%, Arr, Arr1(), ks, js, j& '声明变量

ApplicationScreenUpdating = False '关闭屏幕更新

Sheet1Activate '激活sheet1表为活动表

Myr = [f65536]End(xlUp)Row '记录当前表里数据区域最末行的行号至Myr

Arr = Range("a1:q" & Myr) '将数据区A1:Q(Myr)赋给变量Arr,Q的行号有Myr确定

For i = 2 To UBound(Arr) '循环 UBound(Arr)去arr数组最大下标,因为省略参数,默认是第一维,可以理解为区域的行数, 循环条件是i 从2步进到这个最大小标数

If Arr(i, 2) <> "" Then '判断B列的当前行的单元格是否为空

r = r + 1 '非空则r计数加1

ReDim Preserve Arr1(1 To r) '重定义Arr1数组维数,并保护之前的数组信息

Arr1(r) = i '将该行行号至数组arr1

End If

Next '这个循环也就是说会记录B列有非空单元格的行号至数组arr1中

For i = r To 1 Step -1 '循环,条件是i= r到1,按1递减

If i <> r Then

js = Arr1(i + 1) - 1 '非初始循环时,i都是小于r的,都会执行这条语句将,其目的是记录上一个B列非空单元格的行号

Else

js = UBound(Arr) '初始循环时i=r,会执行这条语句,将arr第一维下标最大值 赋给js,其实就是记录arr这个range区域的行数

End If

ks = Arr1(i) '将arr1第i数组数赋给ks,目的是在循环中将B列的每个非空单元格的行号赋给ks

If Arr(js, 4) = "小计" Then '如果B列空单元所对应行与E列交叉单元格是“小计”

Cells(ks + 1, 1)Resize(js - ks, 3)Delete shift:=xlUp '判断条件成立则删除对应的区域,(此代码可能有问题哦),目的应该是清除小计之前的明细区域

Cells(ks, 4)Resize(js - ks, 8)Delete shift:=xlUp '此行也是删除区域的代码,(可能有问题分析下来)

End If

Next

ApplicationScreenUpdating = True 开启屏幕更新

Dim arr(1 To 10, 1 To 100)是10行,100列的2维数组

行就是第一维,列是第二维。行的最大值是10,行和列的最小值都是1,所以第一维的最大索引号是10,第二维的最小索引号是1

晕了,原来数组的第一个元素是(1),新鲜。

参考下面的资料吧

一、数组的分类

按元素数目分:元素数目大小固定的数组和元素数目大小不固定的动态数组。

按维数分:一维数组、多维数组。

Arr(1 to 12)、Arr1(0 to 24)----一维固定数组;

Arr2(1 to 5,1 to 8)---- 二维固定数组;

Arr3(5 to 10,6 to 12,1 to 100) ---- 三维固定数组。

动态数组

Dim Arr2(),r%

r=r+1

ReDim Preserve Arr2(1 To r) ―――动态数组;可以重新声明(只有最后一维的数目才能重新声明);

用了关键字 Preserve 可确保原来包含数据的数组中的任何数据都不会丢失

二、数组的赋值

21,单元格区域保存到数组

arr = [e22:i24]

arr=Range(“e22:i24”)

22,Array函数

myArray = Array("AAA", "BBB", 200, 500, "2006-7-12")

如果代码头没有 Option Base 1 的语句,则数组myArray的上限为4,下限为0。

即下限LBound(myArr)=0 ,上限 UBound(myArr)=4

二维数组的第一维的上限:UBound(Arr,1)

二维数组的第二维的上限:UBound(Arr,2)

多维数组上限的求法一样。

23,把单元格区域公式赋给数组

如果a5=B4+1

arr = [a4:c8]Formula '将单元格绝对引用公式保存到数组

[e4:g8]=arr 此时e5中的公式也=B4+1;

如果将单元格相对引用公式保存到数组

arr = [a4:c8]FormulaR1C1

如果a5=B4+1

[e4:g8]=arr 此时e5中的公式就=E4+1;

三、数组的处理

31,数组里的最大值和最小值

最大值aa = ApplicationWorksheetFunctionMax(Arr)

aa= ApplicationWorksheetFunctionLarge(Arr,1)

最小值aa = ApplicationWorksheetFunctionMin(Arr)

aa= ApplicationWorksheetFunctionSmall(Arr,1)

楼上的方法把计算公式中的值都一次性定死了,填充的就是一个字符串,不能用于后续运算。

如果各统计单元格之间的相对位置保持不变的话,建议用R1C1相对格式表示法插入计算公式。这样做的好处是,如果以后重新排版,数据发生整体移位,照样可用。

Cells(i, 7)Value = Cells(9, j) Cells(i, j) + Cells(i, 7)Value

改为

Cells(i, 7)FormulaR1C1 = "=R[9-" & i & "]C[" & j & "-7]RC[" & j & "-7]+RC"

相对位移都是针对填充公式的Cells(i, 7)单元格的。

注意将公式中的变量放到引号外面,并用字符串连接符&连接就对了。否则变量会被识别为字符串而不是相应的值。

(楼主给的数据所在位置与程序不匹配,因此没法试验。有问题请补充或hi我。)

_____________________________________________________________________

我试过,楼主你修改后是可以正确填充公式的,但计算结果的时候有问题,因为公式里不能再重复引用自身单元格,不信可以手动填充一个公式试试。

所以建议重新规划一下单元格的使用,可以用隐蔽角落里的单元格保存中间计算结果(如果有图表的话可以使用隐藏在其后的单元格),并保护这些单元格防止被修改。

我快不能再修改回答了,修改次数已接近上限,有问题最好用百度hi直接hi我。

你第一次重定义的时候,一定要把可变的维数定义在最后一维,比如

ReDim s(1 To 2, 1 To 50)

然后第二次重定义的时候就可以

Redim Preserve s(1 To 2, 1 To j)

强调:重定义动态数组时,要想保持数组中原有的数据,只能修改最后一维的维数!

以上就是关于如何用VBA在excel中插入一个矩阵全部的内容,包括:如何用VBA在excel中插入一个矩阵、vba 先判断剪贴板不为空,然后将其中的数据赋值给一个数组。然后检测行数和维数。、受累帮我解释一下这段excel的vba代码吧,谢谢您了,越详细越好,用//在每行后面写吧,再次谢谢,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9667666.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存