Vba 动态调整表大小到最后一行?
我有一个表,我想在VBA中动态调整大小。 我目前的代码是:Vba 动态调整表大小到最后一行?,vba,excel,excel-2010,Vba,Excel,Excel 2010,我有一个表,我想在VBA中动态调整大小。 我目前的代码是: Sub resizedata() Dim ws As Worksheet Dim ob As ListObject Dim Lrow1 As Long Lrow1 = Sheets("Sheet4").Cells(Rows.Count, "J").End(xlUp).Row Set ws = ActiveWorkbook.Worksheets("Sheet4") Set ob = ws.ListObjects("Table28")
Sub resizedata()
Dim ws As Worksheet
Dim ob As ListObject
Dim Lrow1 As Long
Lrow1 = Sheets("Sheet4").Cells(Rows.Count, "J").End(xlUp).Row
Set ws = ActiveWorkbook.Worksheets("Sheet4")
Set ob = ws.ListObjects("Table28")
ob.Resize ob.Range.Resize(Lrow1)
End Sub
我想在这上面加一个条件
+-------+--------+-------+
|Date(I)|Hours(J)| Sal(K)|
+-------+--------+-------+
| Aug | 150000 | 12356 |
| Sep | 82547 | 8755 |
| Oct | 92857 | 98765 |
| Nov | 10057 | 45321 |
| Dec | 0 | 0 |
| Jan | 0 | 0 |
+-------+--------+-------+
上表的最后一行应该是十一月行,因为十二月是第J列中的第一个0值
有人能帮助修改我现有的代码吗?类似于:
With Sheets("Sheet4")
Lrow1 = .Cells(.Rows.Count, "J").End(xlUp).Row
Do While .Cells(Lrow1, "J").Value=0
Lrow1 = Lrow1 - 1
Loop
End With
您想在VBA中执行此操作有特殊原因吗?您只需创建一个已定义的名称,并使用以下方法创建一个自调整范围:
OFFSET(Sheet!$A$1,0,0,COUNTA(Sheet!$A:$A),COUNTA(Sheet!$1:$1))
OFFSET(reference, rows, cols, [height], [width])
顶行显示典型用法,第二行是官方语法
进入“公式”选项卡上的“名称管理器”,单击“新建”,为其命名并将代码粘贴到引用:
需要注意的是,您的数据似乎有0,其中没有值。如果真的是这样的话,你必须做一个不同的测试来确定高度
这种方法的一个好处是它总是经过计算的。如果数据发生更改,则命名范围的大小定义将根据需要进行调整
我希望这是有帮助的,我经常使用它…这将帮助您自动调整表的大小
With Worksheets("sheet-name").ListObjects("table-name")
.Resize .Range(1, 1).CurrentRegion
End With
您正在将
lRow1
检查为最后一行…因此VBA正在“正确”调整到0
行的大小。相反,您需要在这些行中循环,直到一行不等于零。通常情况下,我只会使用透视表,但对于这个特定的数据集,我需要使用一个计算字段,我不确定该字段是否可以在透视表中完成(至少就我所知)。基本上,我将表格导出到图表中进行可视化。动态调整大小的效果是因为如果选择了存在空值的切片器项,则图表看起来非常难看。谢谢你提供的信息。我以后肯定会用这个。你在透视表中使用过计算字段吗?它们有些有限,但可能非常有用。要添加计算字段,请选择数据透视表,然后单击“数据透视表工具”选项卡上的“选项”,在“计算”区域的右侧是“字段、项目和集”。单击计算字段,让乐趣开始!(直观af,不是吗?)是的,我已经广泛使用了计算字段。不过,我相信这次我遇到了计算字段的“限制”之一,这就是为什么我只想在这个例子中使用标准表的原因。