首页 > 解决方案 > 我需要一些帮助来选择 vba 中的范围

问题描述

Range("B2:C2").Select 
Selection.Copy 
Range("J2").Select 
Selection.End(xlDown).Select 
Range("B82706:C82706").Select 
Range("C82706").Activate 
Range(Selection, Selection.End(xlUp)).Select 
ActiveSheet.Paste 
Columns("B:C").Select 
Range("B82695").Activate 
Application.CutCopyMode = False 
Selection.Copy 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False

在这种情况下,B82706 和 c82706 的行号可能会有所不同,因此,我必须根据最后一个 J 列选择 B&C 列(直到结束数据)

请帮助我,在此先感谢

标签: excelvbarangerow

解决方案


在没有看到您的数据的情况下,我不确定这是否正确,但它应该看起来像这样:

  1. 在 J 列中找到最后使用的行(这是粘贴的结尾)。
  2. 在 B 列中找到最后使用的行(这是粘贴的开始)。
  3. 复制粘贴
  4. 将公式转换为值
Option Explicit

Public Sub Example()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet1") 'define your worksheet name here
    
    Dim LastRowInJ As Long 'find last used row in column J
    LastRowInJ = ws.Cells(ws.Rows.Count, "J").End(xlUp).Row

    Dim LastRowInB As Long 'find last used row in column B
    LastRowInB = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row

    ws.Range("B2:C2").Copy Destination:=ws.Range("B" & LastRowInB, "C" & LastRowInJ)
    Application.CutCopyMode = False
    
    'turn formulas into values in column B and C
    ws.Columns("B:C").Value = ws.Columns("B:C").Value

End Sub

始终确保您的RangeColumns对象被引用到工作簿。否则 Excel 可能会猜错工作簿。

还要避免使用.Select,因为这会大大降低您的代码速度并降低其可靠性,因为可以通过鼠标单击轻松更改选择:如何避免在 Excel VBA 中使用选择


推荐阅读