使用VBA

时间:2019-10-23 12:58:29

标签: excel vba

我有两张纸:

第1页包含:

Sheet1

第2页包含:

Sheet2

并且输出应显示在Sheet1的M列中。我在这里附加示例输出:

Sample Output

所以,我这里是表1中的ID,例如:ID“ US”有Abhay,Carl和Dev 在Sheet3中,我在列中有名称,在行中有ID。 我想要的是我的“样本输出”列应根据来自Sheet3的匹配值使用宏进行填充

我正在使用以下逻辑,但是出了点问题:

For i = 2 To 10
j = i + 1
If ThisWorkbook.Sheets("Input").Range("N" & i) = ThisWorkbook.Sheets("Sheet3").Range("A" & i) And ThisWorkbook.Sheets("Input").Range("K" & i) = ThisWorkbook.Sheets("Sheet3").Range("B1") Then
    ThisWorkbook.Sheets("Input").Range("O" & i) = ThisWorkbook.Sheets("Sheet3").Range("B" & j)
End If
Next i

2 个答案:

答案 0 :(得分:0)

由于您要求使用VBA解决方案,请参见下面的代码。

Dim colLen As Integer
Dim i As Integer
Dim colPt As Integer
Dim rowPt As Integer

' Counts number of rows on Sheet 1, column B.
colLen = Sheets(1).Cells(Rows.Count, "B").End(xlUp).Row

' Loops through all names on Sheet 1.
For i = 2 To colLen
' Retain US or NA ID for blank cells.
    If Sheets(1).Cells(i, 1) <> "" Then
        If Sheets(1).Cells(i, 1) = "US" Then
            colPt = 2
        Else
            colPt = 3
        End If
    End If

' Find name on Sheet 2 and set row.
    rowPt = Sheets(2).Range("A:A").Find(Sheets(1).Cells(i, 2)).Row
' Add ID from Sheet 2 to Sheet 3
    Sheets(1).Cells(i, 3) = Sheets(2).Cells(rowPt, colPt)

Next i

假设:

  1. 工作表1是主要工作表,工作表2具有查找数据。
  2. 查找数据中的所有名称都是唯一的。

我建议在每行中都包含ID,而不是将其视为标题,但这是首选。如果您想跳过VBA,也可以使用一些公式解决方案。

答案 1 :(得分:0)

有几种方法可以解决此问题。以下是其中之一:

注意:为简单起见,我将数据保存在一张纸上。您可以修改以下公式,因为您的数据在2页上。话虽如此,我使用的查询列与您的查询相同

解决方案: 有一个“保留栏” 。在我的示例中,我使用列%p作为保留列(如果需要,可以隐藏此列)。在J中,键入以下公式:J2。将公式向下复制到所有使用的行。然后在=IF(ISBLANK($K2), $J1,$K2)中复制以下公式:M2。如前所述,将公式复制到所有使用的行中。这应该给您您的结果