VBA提取数据到指定区域

今天试验了用vba代码从数据源中提取指定数据到新区域中,并清空数据,效果如下图;

VBA提取数据.gif

通过VBA代码实现提取数据到指定区域,反之也可以实现录入数据到指定的数据源中储存起来,主要学习点是resize ,以某个区域参照点,重新确定新区域,并给它赋值,代码和注释如下:

1、提取数据

Sub 提取数据()
Dim rng As Range, n%
[g1:k1] = [a1:e1].Value
For Each rng In [b2:b13]
if rng.Value = "2班" Then
n = n + 1
Cells(n + 1, "g").Resize(1, 5) = rng.offset(0, -1).Resize(1, 5).Value
End If
Next rng
End Sub

注释

'定义rng是单元格,n是整型
'循环前先将[a1:e1]的值赋给[g1:k1],即先把表头写好,这个也可以写在循环之后,位置留出来就行了
'把rng定义在[b2:b13]之间循环
'如果rng的值等于引号内的条件,则
'n=n+1,n从0起计算,第一次出现则n=0+1=1,如果不定义,则下行语句中的变量取不到值
'这行语句要倒过来读,后部份即把rng(B2:B13)偏移上下0行,左偏一列的单元格即A2,以A2为起点,通过Resize重新选取1行5列的区域,将值赋予n+1行g列为起点的Resize(1, 5)区域;这样a2:e2的数据就移到了g2:k2
'结束第一个if小循环
'继续循环rng的下一个单元
'结束子程序

2、清除指定区域数据

Sub 清除数据()
Sheet1.Range("g1:k13").ClearContents   '清除区域内容
Sheet1.Range("g:k").ClearContents      '清除g:k列内容
End Sub

这两种方法都可以,第一种是清除指定单元格区域,第二种是g:k列整列清除。

提取数据还有两种写法,都一样可以实现效果

Sub 筛选符合条件的值到新区域2()
Dim rng As Range, n%
[g1:k1] = [a1:e1].Value
For Each rng In [b1:b13]
If rng.Value = "2班" Then
n = n + 1
'Cells(n + 1, "g").Resize(1, 5) = rng.Offset(0, -1).Range("a1:e1").Value
'Cells(n + 1, "g").Resize(1, 5) = rng.Entirerow.Range("a1:e1").Value
End If
Next rng
End Sub

前几句同上,rng.Offset(0, -1).Range("a1:e1").Value和rng.EntireRow.Range("a1:e1").Value是其他不同写法,意思是以把rng这个基准点为A1单元格,并将取到的值赋给Cells(n + 1, "g").Resize(1, 5)。

https://rijifang.com
打赏
转载请注明出处;
本文地址:https://rijifang.com/index.php/post/15193.html
相关热文

发表评论: