Excelmacros – 检查单元格中的string,运行例程,移动到下一行,再次执行

我不是一个开发人员,但鉴于我使用Excel,我的任务是创build一个循环macros,将检查单元格中的string('资源'),如果它发现该string,然后运行复制和粘贴代码然后移动到下一行。 这从第5行开始,持续运行,直到第199行,但不能在每一行工作,因此validationstring资源。

我已经设法创build复制和粘贴的macros,但它也有问题,因为我使用macroslogging器创build它,它只适用于我实际上做logging的行。

我完全失去了,任何人都可以帮忙吗?

这是我迄今为止

  1. 新的资源名称被手动添加到电子表格

  2. 用户点击单元格(C6)来聚焦光标

  3. 用户点击名为“预测未来项目1”的macrosbutton来启动macros

在button上单击macros将:

如果当前单元格左侧的单元格(B6)='资源'

IF Yes, THEN Sub CP() DO Range("C6").Select Selection.Copy Application.Goto Reference:="ProjAdd" ActiveSheet.Paste Application.CutCopyMode = False ActiveCell.FormulaR1C1 = _ "=SUMIF('Current Project Utilisation'!R2C1:R62C1,RC1,'Current Project Utilisation'!R2C:R62C)+SUMIF('Future Project 1'!R2C1:R62C1,RC1,'Future Project 1'!R2C:R62C)" Range("ProjAdd").Select Selection.Copy Range("C6").Select ActiveSheet.Paste Application.CutCopyMode = False Selection.Copy Range(Selection, Selection.End(xlToRight)).Select ActiveSheet.Paste Range("B6").Select Loop Until ActiveCell.Address(0,0) = "$B$199" End Sub 

移动到原来的活动单元格(C7)下的单元格并重复该macros,直到达到单元格C199

如果(B6)不='资源',然后移动到(C7)a下的单元格并重复macros直到单元格C199到达

刷新工作表以更新数据

会有这样的事情为你工作?

 Sub CopyPasteResource() Dim CopyRange As Range Dim Cell As Range Set CopyRange = Workbooks("YourWorkBookName").Sheets("Sheet1").Range("C6:C199") For Each Cell In CopyRange If InStr(1, Cell.Offset(0, -1).Text, "Resource") Then Cell.Copy 'paste where you wish End If Next Cell End Sub 

编辑:或者你想循环通过B6:B199,然后C6:199? 我的目标并不完全清楚。

啊,老macroslogging器,从1997年以来产生90%额外的代码。我不能确切地从你的问题中究竟究竟是什么被复制到哪里,但是这个代码将遍历行5到199,检查列B =“资源”,然后在列C中设置相应的值,你应该能够根据你的需要进行修改,但是我认为你肯定希望有一个像这样的结构,而不是logging器为你生成的结构。

 public sub cp() Dim ws as Worksheet Set ws = Worksheets("Current Project Utilisation") Dim i as int for iI = 5 to 199 if(ws.cells(i, 2).value = "Resource") then ws.cells(i, 3).value = "what you're copying" end if next I end sub 

假设你的单元格范围不变,你可以为循环部分做这个

 Sub ResourceCheck() Dim WS As Worksheet Set WS = ActiveSheet Dim Resources() As Long, r As Long ReDim Resources(5 To 199) For r = 5 To 199 If UCase(WS.Cells(r, 2).Value) = "RESOURCE" Then WS.Cells(r, 3).Value = "x" 'Do copy paste part End If Next r Application.Calculate End Sub 

你可以添加一个数据样本? 要查看您所参考的内容以及这些数据如何相互关联,有点难。 另外,“Projadd”单元格的引用在哪里? 它有什么作用?

 Sub CP() ' I like to know what worksheet I'm on Dim ws as Worksheet ' if it's a dedicated worksheet use this ' Set ws = ThisWorkbook.Worksheets("Sheet1") ' Otherwise following your current code Set ws = ActiveSheet ' I also like to grab all my data at once Dim Data as Variant Data = ws.Range("B6:B199") ' No need to focus the cursor For row = 5 to 199 ' No need to select any range ' Is this case-sensitive??? If Data(row-4, 1) = "Resource" Then ' Copy C6??? Paste 'ProjAdd' ws.Cells(row, 3).Copy Range("ProjAdd") Application.CutCopyMode = False End If Next End Sub