如何解决如果单元格匹配,则粘贴值
现在我遇到了一个稍微不同的问题。
给了;我有 2 张不同的床单;
worksheets("Food")
Worksheets("Numbers")
在worksheets("Food")
,我有以下棋盘;
| Fruits | vegetables |
| -------- | --------------|
| Banana | Carrots |
| Peach | Spinachs |
| Pineapple | Cauliflowers |
在worksheets("Numbers")
,我有这个;
| Fruits | Numbers |
| -------- | --------- |
| Banana | 9 |
| Apple | 2 |
| Orange | 3 |
| Peach | 7 |
| Pineapple | 5 |
我想从 worksheets("Food")
中搜索每个水果,如果它们确实存在于 worksheets("Numbers")
。如果是,则自动在 worksheets("Food")
列水果和蔬菜之间插入一个名为“数字”的新列。
之后,在 worksheets("Numbers")
中找到的每个水果旁边挑选数字并将其粘贴到 worksheets("Food")
中新创建的列中匹配水果旁边。
像这样;
| Fruits |*Numbers* |vegetables
| -------- |-------------- |------------
| Banana |**9** |Carrots
| Peach |**7** |Spinachs
| Pineapple |**5** |Cauliflowers
我一直在尝试运行执行此过程的代码,但是当我运行它时没有任何反应(也没有发生错误)... 这是它;
Sub Add_Fruits_Numbers()
Dim lastlineFood As Long
Dim lastlineRef As Long
Dim j,i,compteur As Integer
Dim x As Long,rng As range
lastlineRef = Worksheets("Numbers").range("A" & rows.Count).End(xlUp).row
For j = 1 To lastlineRef
lastlineFood = Worksheets("Food").range("A" & rows.Count).End(xlUp).row
For i = 1 To lastlineFood
If range("A" & i).Value = Worksheets("Numbers").range("A" & j).Value Then
Set rng = Worksheets("Numbers").range("A1",range("A1").End(xlToRight))
For Each cell In rng
If cell.Value = "Fruits" Then
cell.EntireColumn.Offset(0,1).Insert (xlShiftToRight)
End If
Next cell
Worksheets("Food").range("A" & i).Offset(,1).Value = Worksheets("Numbers").range("A" & j).Offset(,1)
End If
Next i
Next j
End Sub
再次感谢您的帮助,谢谢!
解决方法
您的代码有一些问题。它应该在线上引发错误
Set rng = Worksheets("Numbers").range("A1",range("A1").End(xlToRight))
如果活动工作表不是“数字”。 range("A1").End(xlToRight)
指的是活动工作表。正确的代码应该是:
Set rng = Worksheets("Numbers").range("A1",Worksheets("Numbers").range("A1").End(xlToRight))
然后,您的代码会在“数字”表中插入一列。
您应该使用 Range("B" & i).EntireColumn.Insert
而不是 cell.EntireColumn.Offset(0,1).Insert (xlShiftToRight)
。 cell
属于“数字”表中的范围。
代码逻辑错误。上述序列只能运行一次。否则它将为每个匹配插入一列。每次迭代都会有“水果”。
然后一切都搞砸了,再调试也没意义,没有冒犯...
向您展示更简单/更快的代码会更容易,做你想做的(我理解)。
请尝试下一个代码:
Sub bringFruitsNo()
Dim shF As Worksheet,shN As Worksheet,lastRF As Long,lastRN As Long
Dim arrF,rngN As Range,mtch,i As Long,boolOK
Set shF = Sheets("Food")
Set shN = Sheets("Numbers")
lastRF = shF.Range("A" & shF.rows.count).End(xlUp).row 'last row
lastRN = shN.Range("A" & shN.rows.count).End(xlUp).row 'last row
If shF.Range("B1").value = "Numbers" Then boolOK = True 'check if the column has already been inserted in a previous run
arrF = shF.Range("A2:A" & lastRF).value 'put the first column in an array (for a faster iteration)
Set rngN = shN.Range("A2:A" & lastRN) 'set the range where to search for the fruit existence
For i = 1 To UBound(arrF) 'iterate between the array elements:
mtch = Application.match(arrF(i,1),rngN,0) 'if the fruit has bee found:
If IsNumeric(mtch) Then
'insert the new necessary column and mark the inserting event changing the boolean variable value
If Not boolOK Then shF.Range("B1").EntireColumn.Insert: shF.Range("B1").value = "Numbers": boolOK = True
shF.Range("B" & i + 1) = shN.Range("B" & mtch + 1).value 'Place the number in the new column
End If
Next i
End Sub
但是,我认为您可能需要在插入列后使用此代码,并且该代码正在检查“水果”和“蔬菜”之间是否存在名为“数字”的列...
如果没有必要,并且代码始终必须在第一列和第三列之间插入一列,则可以删除该行。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。