每次运行具有不同行数和列数的宏

时间:2017-01-31 09:02:38

标签: excel vba excel-vba

所以我有一项繁琐的工作,即分离/过滤数据,更改格式和制作新工作表。

我的问题是,如果我为一张纸记录一个宏,它将适用于另一张,请记住行和列的数量总是会改变。

如果我进入vba并相应地更改了代码,那么我没有设定的号码,我必须手动检查。

3 个答案:

答案 0 :(得分:2)

取决于你如何录制它。如果你在录音中使用ctrl +箭头,你可能会很幸运。 例如。以下宏适用于所有行,只需将它们以黄色着色即可。独立的,无论是4还是4​​00:

Option Explicit
Sub Makro2()
'
' Makro2 Makro
'

'
    Range("A1").Select
    Range(Selection, Selection.End(xlDown)).Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

用CTRL +箭头记录,以选择最后一行。 但是,对于更复杂的代码,您不应使用录像机。

答案 1 :(得分:2)

有几种方法可以获得spreedsheet中的最后一行/列

Lastrow = ActiveSheet.Range("A" & Activesheet.Rows.Count).End(xlup).row
LastCol = ActiveSheet.Cells(1, ActiveSheet.Columns.Count).End(xlToLeft).column

这将返回A列的最后一行,您可能需要根据数据的开始位置进行更改。 LastCol会为该列返回一个数字(请注意.Cells.Cells([Row Index], [Column Index]))。这是我获取最后一行/列的方式,我发现它更容易理解并且可以进行任何需要的操作。

LastRow = Cells.SpecialCells(xlLastCell).Row
LastColumn = Cells.SpecialCells(xlLastCell).Column

这是获取最后一行/列的另一种方法,这确实存在问题,因为Excel以奇怪的方式处理最后一行/列。如果您编辑最后一行中的最后一个单元格(在我的情况下为XFD1048576),那么它将成为.SpecialCells(xlLastCell)的最后一个单元格。

如果您需要澄清任何内容,请告诉我

答案 2 :(得分:1)

录制将为您提供宏执行的基本概念。但是如果您希望代码需要在所有场景中运行,那么您需要对代码进行一些自定义。

要找到最后一行,有很多方法。

来源:http://www.vbausefulcodes.in/usefulcodes/finding-last-row-in-excel-vba.php

sub lastrow()
lastrow = Range("A" & Rows.Count).End(xlUp).Row
Msgbox lastrow
End sub


*************************************
Other ways
**************************************

Sub FindingLastRow()

'PURPOSE: Different ways to find the last row number of a range

Dim sht As Worksheet
Dim LastRow As Long

Set sht = ThisWorkbook.Worksheets("Sheet1")

'Ctrl + Shift + End
LastRow = sht.Cells(sht.Rows.Count, "A").End(xlUp).Row

'Using UsedRange
sht.UsedRange 'Refresh UsedRange
LastRow = sht.UsedRange.Rows(sht.UsedRange.Rows.Count).Row

'Using Table Range
LastRow = sht.ListObjects("Table1").Range.Rows.Count

'Using Named Range
LastRow = sht.Range("MyNamedRange").Rows.Count

'Ctrl + Shift + Down (Range should be first cell in data set)
LastRow = sht.Range("A1").CurrentRegion.Rows.Count

End Sub

但您需要使用与您的方案匹配的最佳方法。