当前位置:首页 » 服务存储 » 如何存储数组符合条件的行vba
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

如何存储数组符合条件的行vba

发布时间: 2022-11-16 12:16:46

1. 怎样用vba读取字符串数组并将符合条件的元素存储到另一个动态数组中去

既然你的题目比较抽象,我也只能给出一个简单的例子。
Dim myStr1(50) as String, myStr2() as String
Dim i,n as Integer

myStr1为字符串数组,myStr2为动态数组。
用for循环判断字符串数组中的各个元素是否包含特定的字符,数组元素下标从0开始。

For i = 1 To 50
判断 myStr1(i-1) 是否包含特定的字符
If 包含特定的字符
n = n + 1
ReDim myStr2(n) '给动态数组重定义一个实际的大小
myStr2(n-1) = myStr1(i-1) '存到动态数组里去
End If
Next i

其中,用InStr函数判断是否包含特定字符。
一个简单形式:InStr(string1, string2)
在string1里查找string2,如果没找到,返回0,否则返回string2在string1中的起始位置。
具体用法VBA的帮助里有。
------------------------------------------------------------
“依次判断str1中的excle文件的 内容里面 是否含有要找的字符串”
首先,还是不知道你要找的字符串是什么?
其次,如果含有你要找的字符串,提取文件名用InStrRev函数。因为已知文件全路径的后缀为.xls,所以反向搜索最后一个路径分隔符——反斜杠\,得知其在路径字符串中的位置后也就知道文件名长度了,再用MID函数提取出来。
可能操作烦点,暂时也没想到其他好方法。具体还请参考下面的资料链接。

2. vba中怎么选取二维数组中的某一行或某一列

的方法
1.1 方法1
循环方法,固定1行/1列,另外一维循环
for arr1(i,1)

1.2 方法2
application.index() 取一维
application.index(arr1,1,0)
application.index(arr1,0,1)

2 工作表函数的index都默认从1开始
2.1 工作表函数
index 的序号默认都是从1开始,而非从0开始
用index取出来的数组,index已经从1开始了
工作表函数index ,match都是index从1开始,EXCEL本身 row column 都得从1开始

2.2 数组别忘记了你的index从0还是从1开始

Sub test001()

Dim arr1()
ReDim arr1(3, 3)

Debug.Print "不完整数组展示"
'因为你第一种显示数组只取了数组4*4中 3*3部分
For I = 1 To 3
For J = 1 To 3
arr1(I, J) = 2 * I + 3 * J
Debug.Print arr1(I, J);
Next
Debug.Print
Next
Debug.Print

Debug.Print "完整数组展示"
'这才是数组的完整内容4*4
For I = LBound(arr1) To UBound(arr1)
For J = LBound(arr1, 2) To UBound(arr1, 2)
arr1(I, J) = 2 * I + 3 * J
Debug.Print arr1(I, J) & ",";
Next
Debug.Print
Next
Debug.Print

'arr2 = Application.Transpose(Application.Index(arr1, , 1))
'arr2 = Application.Transpose(Application.Transpose(Application.Index(arr1, 1, 0)))

'为啥第0行变成了第2行?--因为你第一种显示数组只取了数组4*4中 3*3部分
'index 的序号默认都是从1开始,而非从0开始
'用index取出来的数组,index已经从1开始了
'工作表函数index ,match都是index从1开始,EXCEL本身 row column 都得从1开始

人活一辈子,就活一颗心,心好了,一切就都好了,心强大了,一切问题,都不是问题。

人的心,虽然只有拳头般大小,当它强大的时候,其力量是无穷无尽的,可以战胜一切,当它脆弱的时候,特别容易受伤,容易多愁善感。

心,是我们的根,是我们的本,我们要努力修炼自己的心,让它变得越来越强大,因为只有内心强大,方可治愈一切。

没有强大的敌人,只有不够强大的自己

人生,是一场自己和自己的较量,说到底,是自己与心的较量。如果你能够打开自己的内心,积极乐观的去生活,你会发现,生活并没有想象的那么糟糕。

面对不容易的生活,我们要不断强大自己的内心,没人扶的时候,一定要靠自己站稳了,只要你站稳了,生活就无法将你撂倒。

人活着要明白,这个世界,没有强大的敌人,只有不够强大的自己,如果你对现在的生活不满意,千万别抱怨,努力强大自己的内心,才是我们唯一的出路。

只要你内心足够强大,人生就没有过不去的坎

人生路上,坎坎坷坷,磕磕绊绊,如果你内心不够强大,那这些坎坎坷坷,磕磕绊绊,都会成为你人生路上,一道道过不去的坎,你会走得异常艰难。

人生的坎,不好过,特别是心坎,最难过,过了这道坎,还有下道坎,过了这一关,还有下一关。面对这些关关坎坎,我们必须勇敢往前走,即使心里感到害怕,也要硬着头皮往前冲。

人生没有过不去的坎,只要你勇敢,只要内心足够强大,一切都会过去的,不信,你回过头来看看,你已经跨过了多少坎坷,闯过了多少关。

内心强大,是治愈一切的良方

面对生活的不如意,面对情感的波折,面对工作上的糟心,你是否心烦意乱?是否焦躁不安?如果是,请一定要强大自己的内心,因为内心强大,是治愈一切的良方。

当你的内心,变得足够强大,一切困难,皆可战胜,一切问题,皆可解决。心强则胜,心弱则败,很多时候,打败我们的,不是生活的不如意,也不是情感的波折,更不是工作上的糟心,而是我们内心的脆弱。

真的,我从来不怕现实太残酷,就怕自己不够勇敢,我从来不怕生活太苦太难,就怕自己不够坚强。我相信,只要我们的内心,变得足够强大,人生就没有那么多鸡毛蒜皮。

强大自己的内心,我们才能越活越好

生活的美好,在于追求美好的生活,而美好的生活,源于一颗强大的内心,因为只有内心强大的人,才能消化掉各种不顺心,各种不如意,将阴霾驱散,让美好留在心中。

心中有美好,生活才美好,心中有阳光,人生才芬芳。一颗阴暗的心,托不起一张灿烂的脸,一颗强大的心,可以美化生活,精彩人生,让我们越活越好。

生活有点欺软怕硬,如果你内心很脆弱,生活就会打压你,甚至折磨你,如果你内心足够强大,生活就会奖励你,眷顾你,全世界都会对你和颜悦色。

3. 如何用VBA编程实现将满足条件的数据填充到另一个指定的表格中

看不出难度呀,单元格是一对一的复制,表1的B-F列右移一下到表2的C-G列,8节课在2-3、4-5之间添加一个空行,要求就是这样吗,解决此问题用公式最好,如果作为学VBA的例子,主要是练习数组使用、FOR循环使用。代码可以这样:
dim arr1,arr2,i,j,t
arr1=sheets("表1").range("a1:f10")
arr2=sheets("表2").range("c5:g14") '需要填写数据的区域

t=Array(0,3,4,0,5,6,0,7,8,9,10) '行对应关系,t(x)值表示arr2的x行数据在arr1中的行号
for i=lbound(arr2) to ubound(arr2)
if t(i)<>0 then

for j=lbound(arr2,2) to ubound(arr2,2)
arr2(i,j)=arr1(t(i), j+1)

next j
end if

next i
sheets("表2").range("c5:g14")=arr2 '写入数据

4. VBA中如何将多行多列数据存入数组并利用字典实现分页

Sub CreateTabTwo2()

Dim cJG As Range
Dim c1 As Range, c2 As Range, rng1 As Range, rngZY As Range, rngZ As Range, rngY As Range
Dim i&, r&, r1&, rZ&, rF&, rFf&, irS&, pN, pNs&
Dim Arr1, d1, d2, rs, tmp, tmp2
Dim iTimer

iTimer = Timer
Application.StatusBar = "正在 获取数据,请稍候……"
Application.ScreenUpdating = False
With Sheet5
Arr1 = .Cells(1, 1).Resize(.Range("A65536").End(xlUp).Row + 1).Cells
ReDim arr2(LBound(Arr1, 1) To UBound(Arr1, 1))
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
r = LBound(Arr1, 1) + 1
tmp = Left(Arr1(r, 1), 18)
d1(r) = tmp
tmp2 = tmp
d2(r) = Right(Arr1(r, 1), 3)
For i = r + 1 To UBound(Arr1, 1)
tmp = Left(Arr1(i, 1), 18)
' If MsgBox(d1.Count & vbCrLf & tmp & vbCrLf & tmp2, vbOKCancel) <> vbOK Then GoTo 1000
If tmp <> tmp2 Then d1(i) = tmp: tmp2 = tmp
d2(i) = Right(Arr1(i, 1), 3)
Next
End With

Application.ScreenUpdating = True
Application.StatusBar = "正在 调整格式,请稍候……"
Application.ScreenUpdating = False

With Sheet6
…………
以前回答过类似的问题,Hi我吧,给你QQ,详细解答

5. excel如何将符合条件的值存入数组变量

看起来与VBA有关,猜一下吧:
如果符合条件是一个区域,可以直接赋值给数组,
如果是条件单元格,可以用For循环,按条件录入数组。

6. VBA如何把满足条件数组存组成一个新的数组呢

SUB AA()
DIM I ,brr(1 to 1000,1 to 1)
arr1= ***.range("a2:b" & ***.range("a65535").End(xlUp).Row)
for i = 1 to ubound(arr1)
if range(c3)=arr(i,2) then
n=n+1
brr(N,1)=arr(i,2)
end if
next
[c4].resize(n,1)=brr
end sub

7. VBA笔记:数组

声明1个1~50的数组,可以将区间值写出来
Dim SZ(1 To 50) As String
也可以用"个数"来标识,比如上述的 1 to 50 可以用 49 来替代(0~49的意思,总计50个数字)
Dim SZ(49) As String
我们还可以模块的开始,就设定好数组的索引值从1开始(1~50)

当数组声明好了之后,我们可以给数组赋值
比如,给数组的第15个元素赋值的方法如下:
SZ(14) = "100"
给一个数组集体赋值的方式:

VBA还支持 横向、纵向 同时存在的列表型数组,比如,我们声明一个3*20的数组
Dim SZ (1 to 3 , 1 to 20)
当然,也可以用个数来表示数组

假设,有4个高3层、宽5格的货架,用数组可以这样来表示

与单维数组的赋值方式一样

当无法确定数组的存储元素多少时,我们可以先声明一个空的数组:
Dim SZ ()
然后,再通过ReDim语句来重新声明数组的大小

数组内,参数间用英文逗号分隔,参数支持数字、文本
数组的索引号默认从0开始,除非在模块中的第1句已经写入了"Option Base 1"语句

数组内,参数间用英文逗号分隔,参数仅支持文本 (需要确认)

数组的索引号默认从0开始,无论是否已写入"Option Base 1"语句

可以把一个单元格区域的值存到数组里,也可以把数组里的值写到单元格里去 (单元格区域的大小必须一致)

通过UBound和LBound函数,可以计算数组的最大、最小索引号
UBound(arr) ‘返回数组的最大索引号
LBound(arr) ‘返回数组的最小索引号
UBound(arr) - LBound(arr) +1 ‘返回数组一共有多少个元素

如果是一个多位数组,还需要指定数组的维度,比如:

使用join函数,可以将数组里的所有元素,通过一个指定的拼接符号,拼成一个新的字串

使用range函数,可以将数组写入单元格、区域

无论1维数组还是2维数组,在写入单元格区域时,区域的大小,与数组的大小需要保持一致

8. EXCEL用VBA将单元格数值存入数组

1、首先打开一个Excel的文件,在表格中输入简单的表格,比如学生身高表格,如下图所示。

9. 使用excel vba 寻找符合条件的行并拷贝到另一sheet

Sub CopyDat()
Dim arrStr() As String '用于存储表一有内容行的数据,一共十列
ReDim arrStr(0 To 9) As String
Dim RowNum As Long '用于记录表二中当前行的行号
RowNum = 1
For i = 1 To 200
If Sheet1.Cells(i, 1) <> “” Then
arrStr(0) = Sheet1.Cells(i, 1)

For k = 1 To 9
arrStr(k) = Sheet1.Cells(i, k + 1) '存储每行的数据到数组
Next k

'开始输出数据到表二
For j = 1 To 10
Sheet2.Cells(RowNum, j) = arrStr(j - 1)
Next j
'当前行号加1
RowNum = RowNum + 1
End If

Next i
End Sub

10. 【求助】VBA怎么将符合条件的整行放入另一个表

最恨拷屏不拷贝行列标签的~~~~我猜着做的,如果有变化自行调整。
分三段的要求很变态,完全可以一次扫描完成的,偏要使用三倍的时间来做。

Option Explicit

Sub xx()
Dim i1, i2, i3, j, arr(1 To 11)
'1.复制到表3
i3 = 2 '数据如果不是从2行开始保存请自行修改
For i1 = 2 To Sheet1.UsedRange.Rows.Count '数据如果不是从第2行开始请自行修改
If Sheet1.Cells(i1, "D") = 24 And Sheet1.Cells(i1, "F") = "正常" Then '确认列号
Sheet1.Rows(i1).Copy Sheet3.Rows(i3)
i3 = i3 + 1
End If
Next i1
'2.统计
For j = LBound(arr) To UBound(arr)
arr(j) = 0
Next j
For i1 = 2 To Sheet1.UsedRange.Rows.Count '数据如果不是从第2行开始请自行修改
If Sheet1.Cells(i1, "F") = "正常" Then arr(1) = arr(1) + 1 '正常的统计,确认列号
j = 0
Select Case Sheet1.Cells(i1, "C") '误差列
Case 0: j = 2
Case 1: j = 4
Case -1: j = 6
Case 2: j = 8
Case -2: j = 10
End Select
If Sheet1.Cells(i1, "E") = "出" Then j = j + 1 '类型列,如果为“进”那么保存结果就在上面的j,否则+1
arr(j) = arr(j) + 1 '各种进出的统计
Next i1
Sheet2.Range("A1:K2") = arr '保存结果,可能需要修改保存的地方
'3.统计
j = 0
For i1 = 2 To Sheet1.UsedRange.Rows.Count '数据如果不是从第2行开始请自行修改
If Sheet1.Cells(i1, "A") <= 4 Then j = j + 1 '数量列
Next i1
Sheet2.Range("L2") = j '保存结果,可能需要修改保存的地方
End Sub