在工作表1的G列中查找非零值,将该行中的C列返回到工作表2(VBA)

时间:2017-03-01 20:29:40

标签: excel vba excel-vba

我的第一张照片设置如下:

enter image description here

  1. 我想在G列中找到非零值。然后我想在C列中读取相应的名称。然后,我希望将名称的值返回到Sheet 2上的单元格。 / p>

  2. 此时,它在表2中返回的单元格并不重要。它听起来像一个VLOOKUP或INDEXMATCH,但我的VBA还不足以弄清楚它的格式。这是我试过的一些代码,我可以让它返回名称。但我不知道如何为所有非零做或如何将其打印到工作表2.需要一个循环或需要找出看起来!

  3. 代码:

    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
    

3 个答案:

答案 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