我有一个带有多个选项卡的 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/