Excel 用于大型选择的VBA语法

Excel 用于大型选择的VBA语法,excel,vba,Excel,Vba,我有一个表,每天定期向其中添加数据。有时需要一个新的数据行,所以我插入一个新行。然后,我在表上使用VLOOKUPS插入列的数据 然而,当我为整列携带我的VLOOKUP公式时,每个单元格都携带与原始公式相同的格式 我必须选择每一行,跳过一行,然后选择我想要的格式。我决定编写一个宏,选择表中的所有偶数行,并设置这些行的格式(所有奇数行都以蓝色高亮显示),而不是选择每一行,然后将格式更改为无高亮显示或高亮显示蓝色 既然我有这么大的行集合,我如何保持我的VBA代码,使它适合可读的格式,而不是一个长长的水

我有一个表,每天定期向其中添加数据。有时需要一个新的数据行,所以我插入一个新行。然后,我在表上使用VLOOKUPS插入列的数据

然而,当我为整列携带我的VLOOKUP公式时,每个单元格都携带与原始公式相同的格式

我必须选择每一行,跳过一行,然后选择我想要的格式。我决定编写一个宏,选择表中的所有偶数行,并设置这些行的格式(所有奇数行都以蓝色高亮显示),而不是选择每一行,然后将格式更改为无高亮显示或高亮显示蓝色

既然我有这么大的行集合,我如何保持我的VBA代码,使它适合可读的格式,而不是一个长长的水平列表

请查看我的代码和下面的错误:

Range("E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28, _
    E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40, _
    E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58, _
    E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78, _
    E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92").Select

With Selection.Interior
        .Pattern = xlNone
        .TintAndShade = 0
        .PatternTintAndShade = 0

ERROR: Syntax Error

像这样的东西应该适合你:

Sub tgr()

    'Change these as necessary
    Const StartRow As Long = 12
    Const FinalRow As Long = 92
    Const RangeCols As String = "E:W"
    Const RowStep As Long = 2

    Dim ws As Worksheet
    Dim rFormula As Range
    Dim i As Long

    Set ws = ActiveWorkbook.ActiveSheet
    Set rFormula = Intersect(ws.Columns(RangeCols), ws.Rows(StartRow))

    For i = StartRow + RowStep To FinalRow Step RowStep
        Set rFormula = Union(rFormula, Intersect(ws.Columns("E:W"), ws.Rows(i)))
    Next i

    'Do something with your created range
    rFormula.Formula = "=""MyFormulaHere"""

End Sub

像这样的东西应该适合你:

Sub tgr()

    'Change these as necessary
    Const StartRow As Long = 12
    Const FinalRow As Long = 92
    Const RangeCols As String = "E:W"
    Const RowStep As Long = 2

    Dim ws As Worksheet
    Dim rFormula As Range
    Dim i As Long

    Set ws = ActiveWorkbook.ActiveSheet
    Set rFormula = Intersect(ws.Columns(RangeCols), ws.Rows(StartRow))

    For i = StartRow + RowStep To FinalRow Step RowStep
        Set rFormula = Union(rFormula, Intersect(ws.Columns("E:W"), ws.Rows(i)))
    Next i

    'Do something with your created range
    rFormula.Formula = "=""MyFormulaHere"""

End Sub

为了尽可能接近你原来的帖子:合并范围怎么样

Union(Range("E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28," & _
    "E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40," & _
    "E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58"), _
    Range("E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78," & _
    "E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92")).Select

旁注:

OP中的版本以一个
结尾,虚线必须至少反映必须通过
&
连接的完整字符串部分,并且必须注意前面提到的255个字符限制@BigBen。另一种方法是将范围部分输入多个单元格并连接它们


考虑避免使用
。选择
,因为在大多数情况下它是不需要的,并且可以直接处理。

只是为了尽可能接近您的原始帖子:如何组合范围

Union(Range("E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28," & _
    "E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40," & _
    "E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58"), _
    Range("E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78," & _
    "E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92")).Select

旁注:

OP中的版本以一个
结尾,虚线必须至少反映必须通过
&
连接的完整字符串部分,并且必须注意前面提到的255个字符限制@BigBen。另一种方法是将范围部分输入到多个单元格中并连接它们


考虑避免使用
。选择
,因为在大多数情况下它是不需要的,可以直接解决。

不太清楚您试图从该代码中实现什么。。。为这些范围创建公式,或设置表格格式。。。可能有助于澄清您的问题

同时,看看这是否有帮助:

Sub-loopnsub()
将ws设置为工作表:设置ws=ActiveWorkbook.Sheets(“Sheet1”)
长时变暗lRow:lRow=ws.Cells(Rows.Count,“E”).End(xlUp).Row
变暗,变长
对于R=12至lRow步骤2
使用ws.Range(ws.Cells(R,“E”)、ws.Cells(R,“W”))
.Interior=65535'在此处设置背景颜色
.Font.Color=-16776961'在此处设置字体颜色
“等等,等等,等等
以
下一个R
端接头

不太清楚您试图从该代码中获得什么。。。为这些范围创建公式,或设置表格格式。。。可能有助于澄清您的问题

同时,看看这是否有帮助:

Sub-loopnsub()
将ws设置为工作表:设置ws=ActiveWorkbook.Sheets(“Sheet1”)
长时变暗lRow:lRow=ws.Cells(Rows.Count,“E”).End(xlUp).Row
变暗,变长
对于R=12至lRow步骤2
使用ws.Range(ws.Cells(R,“E”)、ws.Cells(R,“W”))
.Interior=65535'在此处设置背景颜色
.Font.Color=-16776961'在此处设置字体颜色
“等等,等等,等等
以
下一个R
端接头

每一行都需要以一个
开头,在下划线之前需要一个
”&
来连接这样的大字符串。但是,我认为这仍然不起作用,因为您可以定义一个很长的范围地址,因为您可以将一些地址传递到
范围
,并且您的构造超出了此限制

请注意,您实际上可以构建超出此限制的范围(例如,使用
联合
),但如果您随后根据上述问题查询该范围的
地址
,它将被自动截断

Dim addr As String

addr = "E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28," & _
    "E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40," & _
    "E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58," & _
    "E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78," & _
    "E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92"

Debug.Print Len(addr)  '### This will print 335, versus the limit of 255
因此,即使您正确地构造了地址(如上所述),您仍然无法使用它来定义范围


最终,这可能应该通过
Union
或逐步迭代来处理。但是不清楚您需要如何处理这些范围。

每一行都需要以一个
开头,在下划线之前需要一个
”&
来连接这样的大字符串。但是,我认为这仍然不起作用,因为您可以定义一个很长的范围地址,因为您可以将一些地址传递到
范围
,并且您的构造超出了此限制

请注意,您实际上可以构建超出此限制的范围(例如,使用
联合
),但如果您随后根据上述问题查询该范围的
地址
,它将被自动截断

Dim addr As String

addr = "E12:W12,E14:W14,E16:W16,E18:W18,E20:W20,E22:W22,E24:W24,E26:W26,E28:W28," & _
    "E30:W30,E32:W32,E34:W34,E36:W36,E38:W38,E40:W40," & _
    "E42:W42,E44:W44,E46:W46,E48:W48,E50:W50,E52:W52,E54:W54,E54:W54,E56:W56,E58:W58," & _
    "E60:W60,E62:W62,E64:W64,E66:W66,E68:W68,E70:W70,E72:W72,E74:W74,E76:W76,E78:W78," & _
    "E80:W80,E82:W82,E84:W84,E86:W86,E88:W88,E90:W90,E92:W92"

Debug.Print Len(addr)  '### This will print 335, versus the limit of 255
因此,即使您正确地构造了地址(如上所述),您仍然无法使用它来定义范围


最终,这可能应该通过
Union
或逐步迭代来处理。但是不清楚您需要如何处理这些范围。

每一行都需要以一个
开头,在下划线之前需要一个
”&
来连接这样的大字符串。但是,我认为这仍然不起作用。这不起作用-范围引用不能超过255个字符。可以对所需的行/列使用
Intersect
。或者如果有一个模式,可以循环行。不要选择,只使用循环。或者实际使用一个内置的Excel表格并在那里应用格式。您可以交替使用颜色,无需VBA格式化。内置表格应允许附加列。。。您试过了吗?使用公式化的条件格式如何?每一行都需要以一个
开头,在下划线之前需要一个
”&
来连接这样的大字符串。但是,我认为这仍然不起作用。这不起作用-范围引用不能超过255个字符。可以对您选择的行/列使用
Intersect