excel中怎样用VBA把一列数据中与某个单元格对应的数调出来?

都辛苦了,真不知采纳谁的啊。数据是用函数公式得到的。怎样能给大家都加分啊?... 都辛苦了,真不知采纳谁的啊。数据是用函数公式得到的。怎样能给大家都加分啊? 展开
 我来答
jjchangyuan
2014-09-17 · TA获得超过1.1万个赞
知道大有可为答主
回答量:4278
采纳率:90%
帮助的人:1045万
展开全部

ALT+F11打开VBA,插入模块,粘贴以下代码,F5运行。

Sub test()

Dim j, k As Integer

Sheet1.Activate

j = Range("a65535").End(xlUp).Row

For i = j To 1 Step -1

  hv = Cells(i, 8)

  If hv = 6 Then

     Cells(j - k, 9) = Cells(i, 1)

     Cells(j - k, 10) = Cells(i, 2)

     Cells(j - k, 11) = Cells(i, 3)

     Cells(j - k, 12) = Cells(i, 4)

     Cells(j - k, 13) = Cells(i, 5)

     Cells(j - k, 14) = Cells(i, 6)

     Cells(j - k, 15) = Cells(i, 7)

     Cells(j - k, 16) = Cells(i, 8)

     k = k + 1

  End If

Next

End Sub

jianghong834
2014-09-17 · TA获得超过1.5万个赞
知道大有可为答主
回答量:2184
采纳率:87%
帮助的人:366万
展开全部

Sub abc1()

 i = Range("H65535").End(xlUp).Row

 For j = i To 1 Step -1

  If Cells(j, 8) = 6 Then

    Cells(i, 10) = Cells(j, 2)

    Cells(i, 11) = Cells(j, 3)

    Cells(i, 12) = Cells(j, 4)

    Cells(i, 13) = Cells(j, 5)

    Cells(i, 14) = Cells(j, 6)

    Cells(i, 15) = Cells(j, 7)

    Cells(i, 16) = Cells(j, 8)

   i = i - 1

  End If

Next

End Sub

更多追问追答
追问
试了一下,太慢了。要VBA是想快一点。几百行数据要了2分多钟。
追答

不会吧,我刚试了一下,423行,秒定啊。你查一下,是否文件太大或别的原因?

要么,把你的附件传上来看看。



刚试了6000行也没超过3秒呀?

你查查别的原因吧!

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
广铁小噜噜DAa2e
2014-09-17 · 超过24用户采纳过TA的回答
知道答主
回答量:73
采纳率:0%
帮助的人:32.6万
展开全部

使用以下代码可完成:

Sub test()

    Dim RES()

    Dim MC, C1

    

    Data = Range("b1:g23")

    Count = Application.WorksheetFunction.CountIf(Range("g1:g23"), "=6")

    MC = UBound(Data, 1)

    

    ReDim RES(1 To Count, 1 To 6)

    CA = 0

    For i = 1 To MC

        If Data(i, 6) = 6 Then

            C1 = C1 + 1

            For j = 1 To 6

                RES(C1, j) = Data(i, j)

            Next j

        End If

    Next i

    

    With Range("i1")

        Range(.Offset(MC - Count, 0), .Offset(MC - 1, 6 - 1)) = RES

    End With

End Sub
追问
我有几百行数据。好象不对。
追答

这个数组的方法是比较快的,至于几百行数据,是需要将以下代码改动一下

Data = Range("b1:g23")
Count = Application.WorksheetFunction.CountIf(Range("g1:g23"), "=6")

例如有9999行数据,改成如下即可:

Data = Range("b1:g9999")
Count = Application.WorksheetFunction.CountIf(Range("g1:g9999"), "=6")
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
caoyidiego
2014-09-17 · TA获得超过1286个赞
知道大有可为答主
回答量:1937
采纳率:0%
帮助的人:1384万
展开全部
老大,列号看不清啊。
更多追问追答
追问
数下吧。又大又黑的5,6是H列。
追答
Sub sdgsdhd()
a = Cells(65536, 2).End(xlUp).Row
b = a
For i = a To 1 Step -1
If Cells(i, 8).Value = 6 Then
Range(Cells(b, 10), Cells(b, 16)).Value = Range(Cells(i, 2), Cells(i, 8)).Value
b = b - 1
End If
Next
End Sub
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式