excel - 引用列单元格范围 - 每张纸都不同

标签 excel vba

我有一个带有多个选项卡的 excel 文档,我需要在每个选项卡中填写一个空白列,以便它与其他列一致。这些列看起来像这样:

Col A      Col B        Col C
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
Data       NoData       Data
问题是每个选项卡填充的行数不同,因此我无法将“Col B”的范围设置为一个设定值。需要为每个选项卡单独计算。
为了找到“Col B”的范围,我现在正在尝试以下操作:
'this doesn't work  
Dim num_rows As Integer
Dim rng As Range

    ActiveSheet.Range("A2").Select 'neighbouring column, is filled
    num_rows = Range(Selection, Selection.End(xlDown)).Rows.Count '# rows in filled column
    rng = ("B2" : Range("B2").Offset(num_rows,0)) 'empty column
        
        For Each c In rng
        
            c.Activate
            ActiveCell.Value = "some value"
    
        Next c
但是,由于我刚开始学习 VBA,我不确定如何正确表达这个范围语句的语法:
'this doesn't work     
rng = ("F2" : Range("F2").Offset(num_rows,0))
我试图让它引用(列顶部的第一个空单元格:与相邻列的最后一个填充行对齐的最后一个单元格),如果这有意义的话。
有没有办法以这种方式设置 rng 变量?
编辑:阅读如何立即执行此操作,基本上,我正在寻找这样的东西?
Sub test()
'this also doesn't work 

Dim rng1 As Range
Dim rng2 As Range
Dim rng3 As Range

rng1 = Cells(2, 6) 'column 6 is empty
rng2 = Cells(Rows.Count, 5).End(xlUp).Offset(0, 1) 'column 5 has values; counting to end of values here

Range(rng1, rng2).Select


End Sub
但是,仍然不确定这里的正确语法。 rng1 和 rng2 变量似乎不起作用。
任何意见,将不胜感激!

最佳答案

下一个可用列

  • 如果您的表格数据(有一行标题)从单元格 A1 开始,这将起作用。包含此代码( Sheet1 )的工作簿中的工作表( ThisWorkBook ),即它是连续的,即它没有空行或空列。

  • Option Explicit
    
    Sub NextColumn()
        
        Dim wb As Workbook: Set wb = ThisWorkbook 'workbook containing this code
        Dim ws As Worksheet: Set ws = wb.Worksheets("Sheet1")
        Dim rg As Range: Set rg = ws.Range("A1").CurrentRegion
        
        ' New (Next Available) Column Range
        Dim ncrg As Range: Set ncrg = rg.EntireRow.Columns(rg.Columns.Count + 1)
        ncrg.Cells(1).Value = "New Column"
        
        ' New Column Data Range (no headers)
        Dim ncdrg As Range: Set ncdrg = ncrg.Resize(ncrg.Rows.Count - 1).Offset(1)
        
        Dim nCell As Range
    
        For Each nCell In ncdrg.Cells
            nCell.Value = "some value"
        Next nCell
        
        ncdrg.EntireColumn.AutoFit
        
    End Sub
    
    编辑
  • 您已经多次编辑了这个问题,所以这里有一些指的是它的当前状态。

  • Sub FillColumn()
    'fills blank column in each tab to last row of surrounding columns
    'this one works!!
    
        Dim ws As Worksheet
        Dim rng As Range
        Dim lRow As Long
        Dim Col As Long
        
        For Each ws In ThisWorkbook.Worksheets
            lRow = ws.Cells(ws.Rows.Count, "E").End(xlUp).Row
            Col = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column + 1
            Set rng = ws.Range(ws.Cells(2, Col), ws.Cells(lRow, Col))
            ' The loop is not needed here,...
    '        Dim cell As Range
    '        For Each cell In rng.Cells
    '            cell.Value = "some value"
    '        Next cell
            ' ... you can simply do:
            rng.Value = "some value"
        Next ws
    
    End Sub
    

    关于excel - 引用列单元格范围 - 每张纸都不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71118755/

    相关文章:

    JavaScript/VBA 自动化 : Changing the onclick attribute

    excel - OleDB 和混合 Excel 数据类型 : missing data

    java - Apache POI : Writing into excel with Java: opening Workbook, java.io.IOException : Cannot write data, 文档似乎已关闭

    VBA:从特定格式的字符串中读取日期

    vba - 以整数形式插入日期 (Excel)

    ms-access - MS Access 中 VBA 代码与宏的优缺点是什么?

    excel - 打开工作簿时,Worksheet_Activate 不会运行,即使我调用sheet.Activate

    excel - 如何从事件表(或任何其他表)设置范围

    xml - 如何在 Excel vba 中创建 CDATA 标签?

    regex - 使用 RegEx 搜索 VBA 源代码