Excel VBA复制范围直到单元格值=特定文本/值

Excel VBA复制范围直到单元格值=特定文本/值,excel,vba,Excel,Vba,我正在尝试编写一个宏来复制一组单元格中的数据,并将其粘贴到新的工作表中 我想停止A列中最后一个单元格等于“小时总数”的选择,该选择将根据A9和最后一行/单元格之间的数据动态进行,其中“小时总数”为。我尝试了四种不同的方法,但没有一种能产生正确的结果 Sub Copy_Data() ' 'Copy_Data Macro ' ' Dim lastCell As String Sheets("OPSEQB").Select Range("A9", Ra

我正在尝试编写一个宏来复制一组单元格中的数据,并将其粘贴到新的工作表中

我想停止A列中最后一个单元格等于“小时总数”的选择,该选择将根据A9和最后一行/单元格之间的数据动态进行,其中“小时总数”为。我尝试了四种不同的方法,但没有一种能产生正确的结果

Sub Copy_Data()
'
'Copy_Data Macro
'

'

Dim lastCell As String



Sheets("OPSEQB").Select
Range("A9", Range("P9").End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets.Add After:=ActiveSheet
Range("A1").Select
ActiveSheet.Paste


End Sub



Sub Copy_Data2()

Dim copyRange As String

Startrow = A9
LastRow = 11
Let copyRange = "A" & Startrow & ":" & "D" & LastRow
Range(copyRange).Select
End Sub




Sub Copy_Data3()
'
'Copy_Data Macro
'

'

Dim LastRow As String
LastRow = Range.SpecialCells(xlCellTypeLastCell, "HOURS TOTAL").Row


Sheets("OPSEQB").Select
Range("A9", Range("P9").End(xlToRight)).Select
Range(Selection, Selection.End(LastRow)).Select
Selection.Copy
Sheets.Add After:=ActiveSheet
Range("A1").Select
ActiveSheet.Paste


End Sub



Sub Copy_Data4()
'Best used when you want to include all data stored on the spreadsheet

Dim sht As Worksheet
Dim LastRow As Long
Dim LastColumn As Long
Dim StartCell As Range

Set sht = Worksheets("OPSEQB")
Set StartCell = Range("A9")

'Refresh UsedRange
  Worksheets("OPSEQB").UsedRange

'Find Last Row and Column
  LastRow = StartCell.SpecialCells(xlCellTypeLastCell, "HOURS TOTAL").Row
  LastColumn = StartCell.SpecialCells(xlCellTypeLastCell).Column

'Select and copy Range
  sht.Range(StartCell, sht.Cells(LastRow, LastColumn)).Select
  Selection.Copy
'Add a sheet and paste the range
  Sheets.Add After:=ActiveSheet
  Range("A1").Select
  ActiveSheet.Paste


End Sub

有很多方法可以做到这一点。我想如果你把寻找范围作为自己的功能,代码就会变得更清晰(对我来说)。这应该可以工作,并且可以在中进行测试


我将使用
Application.WorksheetFunction.Match()
,在第一列中搜索“HOURS TOTAL”,选择从A9到匹配行的所有单元格,然后向右选择

Public Sub Copy_Data()

    Dim lastCell As Range, wrkSht As Worksheet
    Dim lastRow As Integer, firstCol As Range
    Dim copyRng As Range
    
    Set wrkSht = ActiveWorkbook.Worksheets("OPSEQB")
    lastRow = Application.WorksheetFunction.Match("HOURS TOTAL", wrkSht.Range("A:A"))
    Set firstCol = wrkSht.Range(wrkSht.Range("A9"), wrkSht.Cells(lastRow, 1))
    Set copyRng = wrkSht.Range(firstCol, firstCol.End(xlToRight))

    copyRng.Copy
    Sheets.Add After:=ActiveSheet
    Range("A1").Select
    ActiveSheet.Paste

End Sub

尽管我更喜欢我的答案,但我还是会给你们一个投票,因为这是一个不错的第一个答案。一些友好的建议:1。不要使用select@PGSystemTester-谢谢。1) 我通常也不使用select,但我在“我的方式”和保留OP代码之间左右为难。2) 我不认为我选择了所有列(即“A:XFD”)。Range.End()仅扩展到包含数据的最后一个单元格。但我不知道UsedRange的事。那会派上用场的哦对不起。。。忘记投票了!而且
.usedRange
是您在VBA Excel冒险中的必备知识。。。。祝你好运
Public Sub Copy_Data()

    Dim lastCell As Range, wrkSht As Worksheet
    Dim lastRow As Integer, firstCol As Range
    Dim copyRng As Range
    
    Set wrkSht = ActiveWorkbook.Worksheets("OPSEQB")
    lastRow = Application.WorksheetFunction.Match("HOURS TOTAL", wrkSht.Range("A:A"))
    Set firstCol = wrkSht.Range(wrkSht.Range("A9"), wrkSht.Cells(lastRow, 1))
    Set copyRng = wrkSht.Range(firstCol, firstCol.End(xlToRight))

    copyRng.Copy
    Sheets.Add After:=ActiveSheet
    Range("A1").Select
    ActiveSheet.Paste

End Sub