如果某个范围多次包含某个值,请将其旁边的单元格粘贴到特定单元格中

时间:2014-07-24 14:11:15

标签: vba excel-vba excel

我有代码检查单元格值的范围,然后将单元格粘贴到不同位置的左侧。但是,如果范围包含多次值,我似乎无法弄清楚要做什么。

我想要做的是,如果它包含两次值(可能是我需要处理的最大值),它会将每个单元格复制并粘贴到两个不同位置的左侧。

这就是我现在所拥有的:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True

Set OtherRng = Range("A18:S42")
Set NewRng = Range("C18:C60")  

If Not Intersect(Target, OtherRng) Is Nothing Then

      For Each cell In NewRng.Cells
        If cell.Value = "41/N" Then
            Map.Cells(35, 18).Value = cell.Offset(0, -1)
        End If
        If cell.Value = "41/M" Then
            Map.Cells(35, 16).Value = cell.Offset(0, -1)
        End If
      Next

End sub

如何制作它,以便NewRng中有两个值都包含“41 / N”时,它会将第一个值cell.offset(0,-1)放入Map.cells(35,18)(如现在这样做了)和cell.offset(0,-1)第二个值进入Map.cells(36,18)

2 个答案:

答案 0 :(得分:0)

试试这个:

dim i as integer
i = 0

  For Each cell In NewRng.Cells
    If cell.Value = "41/N" Then
        Map.Cells(35+i, 18).Value = cell.Offset(0, -1)
        i = i + 1
    End If

有更好的方法,但为简单起见,上述内容应该按照您的要求进行

答案 1 :(得分:0)

我不确定VBA语法,但每次看到给定值时,您都可以保留一个设置(或递增)的标志(或计数器)。然后根据标志(或计数器)选择要放置值的单元格。

伪代码:

Seen_N = False
Seen_M = False
For Each cell in NewRng.Cells
    If cell.Value = "41/N" Then
        If Seen_N Then
            Map.Cells(36,18).Value = cell.Offset(0,-1)
        Else
            Map.Cells(35,18).Value = cell.Offset(0,-1)
            Seen_N = True
        End If
    End If
    If cell.Value = "41/M" Then
        If Seen_M Then
            Map.Cells(36,16).Value = cell.Offset(0,-1)
        Else
            Map.Cells(35,16).Value = cell.Offset(0,-1)
            Seen_M = True
        End If
    End If
  Next

如果这只是一次性的话,这应该没问题,但是如果你想考虑你有很多这些条目的情况,请使用计数器并计算计数器中的行(即行= 35 + num_Seen_N