在一张纸中查找一个值,计算它并将结果粘贴到另一张纸中
Posted
技术标签:
【中文标题】在一张纸中查找一个值,计算它并将结果粘贴到另一张纸中【英文标题】:Look for an value in a sheet count it and paste the result in another sheet 【发布时间】:2017-12-03 04:49:50 【问题描述】:我有两张表格 sheet1 和 sheet2
在 sheet1 的 AX 列中,我使用公式打印了我当前的一周。我正在寻找 sheet1、T 列和 U 列,并计算两列中 1 的数量。
两列的 1 计数应粘贴到 sheet2 中,查看 AX 列中 sheet1 的周数。如果 AX 列的第 24 周,那么它应该沿着 sheet2、A 列运行 24 并粘贴 B 列中 T 的计数值和 C 列中 U 的计数值,并计算两者的百分比并粘贴到 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
【问题讨论】:
@pnuts 对不起。我不太明白你的意思 您之前的许多问题都有尚未接受的答案 - 他们没有提供问题的解决方案吗? @paulbica 不,它们不是我期望的解决方案。大多数我有解决方案,我已经接受并标记为绿色。 @paulbica 你能帮我为这种情况或上面的代码有什么问题提供答案吗? 我不太清楚你想要完成什么。您能否展示一个小样本,说明 sheet1 现在的外观以及 sheet2 的外观?当前数据和预期结果 - 我想复制你正在做的事情 【参考方案1】:从问题中可以看出,A 列中指示的给定周的“结果”表在 B 列和 C 列中分别显示另一张表的 T 和 U 列中的 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 的后续讨论,将以下标准添加到上述更新代码中:
-
它只会覆盖当前周,因此对于 2017 年 7 月 2 日,如果在“结果”表的“A 列”中找到它只会覆盖当前周 27
如果 is 输出为 0,则将目标单元格保留为空白
如果“BW”表的AA列的各个单元格为空白,则该行将不计入1s
工作表“BW”数据从第 5 行开始
【讨论】:
您提供的代码效果很好。但是,我不希望我的 sheet2“结果”中的先前列或其余列被评估为 0 。因为这是一种评估记录。所以我上周进行了评估。本周 26 我正在进行新的评估,这意味着,我希望将新的 Count 值存储为一周,而前一周应该保持原样。 抱歉不是很清楚。您不希望结果表评估为 0,因此如果计数为 0,它是否应在结果表中显示为空白而不是 0?如果您不想对结果表中的旧数据进行任何更改,那么新增的标识符是什么?一个例子将有助于澄清 我已经添加了一个澄清图像和描述。可能是清楚的。或者我会解释一下 感谢@Curious 澄清我的问题。谢谢你 使用上面的代码,我正在检查 AA 列是否为空,如果为空我不想要来自 T 和 U 的 Count 值,如果不为空,那么我需要来自 T 和 U 的 Count 值. 为此,我使用了行“ If ws.Range("AA" & i) = "" Then GoTo nextrow ,在 J= 2 之后,我收到一个错误 Label not defined以上是关于在一张纸中查找一个值,计算它并将结果粘贴到另一张纸中的主要内容,如果未能解决你的问题,请参考以下文章