在工作表中查找一个值并将结果粘贴到另一个工作表中

我有两个工作表sheet1和sheet2

在工作表1的AX列中,我使用公式打印了本周的工作。 我正在查找sheet1,列T和U,并计算两列中1的数量。

两列的1的计数数字应该被粘贴在sheet2中,在AX列中的sheet1的那一周。 如果列AX的星期编号为24,那么它应该沿着工作表2,列A运行24,并将T的计数值粘贴到列B中,并将U的计数值粘贴到列C中,然后计算两者的百分比并粘贴到C中和D.

我试着通过一个代码,我经常得到它为0,我感到我错了。 既不检查伯爵,也不检查周。

Sub test() Dim col As Range Dim row As Range Dim sh1 As Worksheet Dim sh2 As Worksheet Dim T As Integer Dim U As Integer Dim wk As String Set sh1 = Sheets("BW") Set sh2 = Sheets("Results") For Each col In sh2.Columns 'This loops through all populated columns in row one If sh2.Cells(1, col.Column).Value = "" Then Exit For End If wk = sh2.Cells(1, col.Column).Value For Each rw In sh1.Rows If sh1.Cells(rw.row, 50).Value = "" Then Exit For End If If sh1.Cells(rw.row, 50) = wk And sh1.Cells(rw.row, 20) = 1 Then T = T + 1 End If If sh1.Cells(rw.row, 50) = wk And sh1.Cells(rw.row, 21) = 0 Then U = U + 1 End If Next rw sh2.Cells(2, col.Column) = T 'put counters into 2nd and 3rd row under each week, you can adjust this to put the number in a different cell. sh2.Cells(3, col.Column) = U T = 0 'reset counters to start looking at next week. U = 0 Next col End Sub 

resembels sheet1,我有我的数据

Resembels sheet2,其中A列已填满,需要填写B,C,D和E列.B和C是来自sheet1列T和U,D和E的计数值,是来自列b和c的百分比值sheet2。 澄清img:例如,这是sheet2的外观。我已经在前一周做了一个evalaluation。现在我正在运行sheet1中的一个公式,它给出了AX中的当前周。这样,sheet2运行通过a列,标识与sheet1相同的星期,并且只在当前星期添加Count值,它不会更改前一周或下周的值。当前代码返回0,在所有星期和返回当前星期的计数值。我希望它只能返回本周。

从问题看来,A栏所示给定周的表“结果”分别显示在另一页的T&U栏的B&C计数1中。

解决这个问题的一种方法是,对于“结果”表中的每一行,计数器查看列“AX”中指示的那一周的“BW”表的所有行以从列T&U获得计数。

这会给一些想法:

 Sub test() Dim i As Integer, j As Integer, cntT As Integer, cntU As Integer, ws As Worksheet Set ws = Sheets("Results") Sheets("BW").Select For i = 2 To WorksheetFunction.CountA(ws.Columns(1)) If ws.Range("A" & i) = Val(Format(Now, "ww")) Then Exit For Next i ws.Range("B" & i & ":" & "E" & i).ClearContents cntT = 0 cntU = 0 For j = 5 To WorksheetFunction.CountA(Columns(50)) If ws.Range("A" & i) = Range("AX" & j) And Range("AA" & j) <> "" Then If Range("T" & j) = 1 Then cntT = cntT + 1 If Range("U" & j) = 1 Then cntU = cntU + 1 End If Next j If cntT <> 0 Then ws.Range("B" & i) = cntT If cntU <> 0 Then ws.Range("C" & i) = cntU If cntT + cntU <> 0 Then ws.Range("D" & i) = cntT / (cntT + cntU) ws.Range("E" & i) = cntU / (cntT + cntU) End If ws.Range("D" & i & ":E" & i).NumberFormat = "0%" End Sub 

更新:根据后面的讨论@Mikz标准添加到以上更新的代码:

  1. 它只覆盖当前周,所以在2017年7月2日,如果在“Results”表的“A列”中find,它将只覆盖当前的27周
  2. 如果输出为0,则会将目标单元格留空
  3. 如果“BW”表的AA列的各个单元格为空白,则该行不会被计数为1s
  4. 表格“BW”数据从第5行开始