我的第一张照片设置如下:
我想在G列中找到非零值。然后我想在C列中读取相应的名称。然后,我希望将名称的值返回到Sheet 2上的单元格。 / p>
此时,它在表2中返回的单元格并不重要。它听起来像一个VLOOKUP或INDEXMATCH,但我的VBA还不足以弄清楚它的格式。这是我试过的一些代码,我可以让它返回名称。但我不知道如何为所有非零做或如何将其打印到工作表2.需要一个循环或需要找出看起来!
代码:
For Each c In Range("G6").Cells
If c.Value > 0 Then
PlayerName = Range(Cells(Selection.Row, 3).Address).Value
End If
Exit For
Next c
答案 0 :(得分:0)
这是您需要的逻辑。你能用这个逻辑构建宏吗?它将帮助您了解如何操作大于零的行。然后复制该行所需的列并将其粘贴到另一个工作表。
Sub macro1()
Dim myRng As Range, lastRow As Long
lastRow = ActiveSheet.Range("G65536").End(xlUp).Row
Set myRng = Sheet1.Range("G1:G" & lastRow)
For Each Rng In myRng
If IsNumeric(Rng.Value) And Rng.Value > 0 Then
Debug.Print "Cell " & Rng.Address & " has the number " & Rng.Value & " in row " & Rng.Row
End If
Next Rng
End Sub
答案 1 :(得分:0)
以下代码将在G列中找到第一行的数字大于0(从第6行开始),并将该行的C列中的值写入Sheet2的单元格X5。
With Worksheets("Sheet1")
For Each c In .Range("G6", .Cells(.Rows.Count, "G").End(xlUp)).Cells
If c.Value > 0 Then
Worksheets("Sheet2").Cells(5, "X").Value = c.Offset(0, -4).Value
Exit For ' Moved this inside the `If`, otherwise it will exit as soon as
' the first cell in the range is processed, irrespective of whether
' it was greater than 0 or not
End If
Next c
End With
迭代版本:
Dim s2Row as Long
s2Row = 5
With Worksheets("Sheet1")
For Each c In .Range("G6", .Cells(.Rows.Count, "G").End(xlUp)).Cells
If c.Value > 0 Then
Worksheets("Sheet2").Cells(s2Row, "X").Value = c.Offset(0, -4).Value
s2Row = s2Row + 1
End If
Next c
End With
答案 2 :(得分:0)
是的,除了" G"是一列,而不是一行。将work.print行替换为WorkSheets("表格名称从此处复制")。行(rng.row)。复制目的地:=工作表("要复制到此处的工作表名称" ).Range(" A"& rowCounterVariable)。当然,将工作表名称更改为您的实际工作表名称。
这里我将页面上的第一行设置为2以复制到。如果需要将其设置为第一个可用行,则需要研究如何在该页面上查找上次使用的行。将这些确切的条款放入Google" VBA EXCEL如何找到最后使用的行"。我有一个例子,找到代码中活动表的最后一行。今天我们可以给你鱼,并教你如何钓鱼。但你需要抓住自己的。我们不在这里为您编写代码。
Sub macro2()
Dim myRng As Range, lastRow As Long, rowCounterVariable as long
rowCounterVariable = 2
lastRow = ActiveSheet.Range("G65536").End(xlUp).Row
Set myRng = Sheet1.Range("G1:G" & lastRow)
For Each Rng In myRng
If IsNumeric(Rng.Value) And Rng.Value > 0 Then
WorkSheets("sheet name to copy from here").Rows(rng.row).Copy Destination:=WorkSheets("sheet name to copy to here").Range("A" & rowCounterVariable)
rowCounterVariable = rowCounterVariable + 1
End If
Next Rng
End Sub