循环提取中位数

时间:2015-06-05 11:00:23

标签: excel vba excel-vba

此代码按照txtKB文本框中的每个条目执行我想要的操作:

Dim ws1 As Worksheet
Dim lastrow As Long
Dim clipboardObj As New MSForms.DataObject
Dim wstest As Worksheet           
Dim clipboardTxt As String

Set ws1 = Sheets("Sheet6")
Set wstest = Sheets("Sheet8")    

lastrow = ws1.Range("A" & Rows.Count).End(xlUp).Row        
ws1.Range("M1:A" & lastrow).AutoFilter field:=13, Criteria1:=txtKB    
ws1.Range("B" & Rows.Count).End(xlUp).Offset(1).Select        
txtmedian = WorksheetFunction.Aggregate(12, 5, Columns(2))   
clipboardTxt = txtmedian.Text    
clipboardObj.SetText clipboardTxt   
clipboardObj.PutInClipboard    

wstest.Range("A" & Rows.Count).End(xlUp).Offset(1) = txtmedian

但我想改进它(这样我就不再需要在textbox txtKB条件中手动输入ID,只需点击一下按钮即可自动完成所有内容)以在ws2 A列中输入一个条目(比如ID),在ws1中查找,然后执行中值提取,将中位数粘贴到wstest,然后转到ws2中的下一个ID,直到它遍历ws2中的所有ID {1}}。

注意:ws2尚未出现在代码中。

我需要在某个地方放置一个我不知道在哪里。

1 个答案:

答案 0 :(得分:0)

您可以尝试以下方式:

Dim ws as worksheet
Dim wb as workbook
set wb = ThisWorkbook

For Each ws in wb.Worksheets
    ' Do what you want here
next ws

这将遍历工作簿中的所有工作表

将其用于您的代码

Dim wb as workbook
Dim ws As Worksheet
Dim lastrow As Long
Dim clipboardObj As New MSForms.DataObject
Dim wstest As Worksheet           
Dim clipboardTxt As String

set wb = ThisWorkbook

Set wstest = Sheets("Sheet8")    

For Each ws in wb.Worksheets ' Loop through all sheets in workbook
    if not ws.name = wstest.name then ' Avoid sheet you're copying too (ammend as needed)
        With ws
            lastrow = .Range("A" & Rows.Count).End(xlUp).Row        
            .Range("M1:A" & lastrow).AutoFilter field:=13, Criteria1:=txtKB    
            .Range("B" & Rows.Count).End(xlUp).Offset(1).Select
       End With   

       txtmedian = WorksheetFunction.Aggregate(12, 5, Columns(2))   
       clipboardTxt = txtmedian.Text    
       clipboardObj.SetText clipboardTxt   
       clipboardObj.PutInClipboard    
       wstest.Range("A" & Rows.Count).End(xlUp).Offset(1) = txtmedian 'You will need to change your code to paste into different locations I would have assumed, I'll leave that up to you though
    End if
Next ws