我写一个宏,我有以下问题:获得两个字符串之间的内容在VBA Excel中
看起来像###之间的数据START和### END可以改变我想写一个总是在### START和### END的内容之间查找的宏,并将包含操作类型字词dividend的完整行复制到一个新工作表中。我莫名其妙,因为我是新进入VBA
是否有人可以帮助
我写一个宏,我有以下问题:获得两个字符串之间的内容在VBA Excel中
看起来像###之间的数据START和### END可以改变我想写一个总是在### START和### END的内容之间查找的宏,并将包含操作类型字词dividend的完整行复制到一个新工作表中。我莫名其妙,因为我是新进入VBA
是否有人可以帮助
这应该做它不能找到一个解决方案。在标准代码模块中放置以下步骤:
Public Sub GetDividends()
Dim i&, k&, s$, v, r As Range, ws As Worksheet
Set r = [index(a:a,match("###start",a:a,),):index(a:a,match("###end",a:a,),)].Offset(, 6)
k = r.Row - 1
v = r
For i = 1 To UBound(v)
If LCase$(v(i, 1)) = "dividend" Then
s = s & ", " & i + k & ":" & i + k
End If
Next
s = Mid$(s, 3)
If Len(s) Then
Set ws = ActiveSheet
With Sheets.Add(, ws)
ws.Range(s).Copy .[a1]
End With
End If
End Sub
注意:此技术注重效率。它最大限度地减少了VBA和Excel之间的边界被刺穿的次数。在大型数据集上,这种最佳实践会使性能发生巨大变化。
嗨,现在完美的作品。对不起,还有一件事。是否有可能进一步扩大这一点。那么它会查看所有的动作类型并为这些类型中的每一个创建单独的表单? - >因此,如果我有例如股息,它将获得所有股息并制作一张表,然后在年度大会上自动制作另一张股票等等? – Nant
@Nant是的。但是,请您与我联系澄清细节。我的电子邮件地址是:[email protected] –
@ExcelHero - 如果“股息”一词与“### END”在同一行,它似乎也复制该行。 – Davesexcel
如果您的Column Action_Type位于ColumnID 7,则此方法有效。但我认为源代码很容易根据您的需要进行更改。
Sub copyRows()
Dim i As Integer
Dim ws As Worksheet
'1 is just the worksheet-ID, you can choose another one via name
Set ws = ThisWorkbook.Worksheets(1)
i = 2
j = 1
Do While ws.Cells(i, 1) <> "###END"
'as stated above, 7 refers to the column ID
If ws.Cells(i, 7) = "Dividend" Then
'Worksheets(2), see above
ws.Rows(i).EntireRow.Copy _
Destination:=Worksheets(2).Rows(j)
j = j + 1
End If
i = i + 1
Loop
End Sub
您可以使用find来获取行位置,然后设置您从那里的范围。
Sub Button1_Click()
Dim r As Range, fr As String '##START
Dim c As Range, fc As String '##END
Dim StartR As Integer
Dim EndR As Integer
Dim NwRng As Range, Nwc As Range
Dim nwSh As Worksheet
fr = "##Start"
fc = "##END"
Set r = Range("A:A").Find(what:=fr, lookat:=xlWhole)
Set c = Range("A:A").Find(what:=fc, lookat:=xlWhole)
If Not r Is Nothing Then
StartR = r.Row + 1
Else: MsgBox fr & " not found"
Exit Sub
End If
If Not c Is Nothing Then
EndR = c.Row - 1
Else: MsgBox fc & " not found"
Exit Sub
End If
Set NwRng = Range("G" & StartR & ":G" & EndR)
Set nwSh = Sheets.Add
For Each Nwc In NwRng.Cells
If Nwc = "dividend" Then Nwc.EntireRow.Copy nwSh.Cells(nwSh.Rows.Count, "A").End(xlUp).Offset(1)
Next Nwc
End Sub
需要一些答案 - 数据总是显示在同一张纸上(例如Sheet1)。它是否会始终被复制并粘贴到同一张纸上(例如,本周您将数据复制到Sheet2上,下周您将在Sheet2下面复制一组新数据)? 你有没有尝试过任何开始呢? –