我有代码检查单元格值的范围,然后将单元格粘贴到不同位置的左侧。但是,如果范围包含多次值,我似乎无法弄清楚要做什么。
我想要做的是,如果它包含两次值(可能是我需要处理的最大值),它会将每个单元格复制并粘贴到两个不同位置的左侧。
这就是我现在所拥有的:
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)
?
答案 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