MS Excel VBA宏动态范围

时间:2012-10-02 16:54:10

标签: excel vba dynamic range

这是表格的样本(带有令人毛骨悚然的样本数据)

|Col A       |Col B     |Col C   |Col D     |Col E
+------------+----------+--------+----------+-----
|Number      |Value     |X       |Date      |Decimal
|1           |        AA|X       |2012/01/01|.1
|2           |        BB|X       |2012/02/01|.2
|3           |        CC|X       |2012/03/01|.3
|4           |        DD|X       |2012/04/01|.4
|5           |        EE|X       |2012/05/01|.5

需要做什么:

  • 根据宏中的“值”(本例中为Col B)对表进行排序

条件:

  • 标题值不会更改
  • 我必须搜索包含单词“Value”的标题,因为它从Col C变为Col D或Col A ... B ... E ...
  • 列标题始终保留在第1行

到目前为止我做了什么:

  • 蛮力...... {BAD!)
  • 搜索标题以查找哪个列包含标题“值”
  • 获取列字母/数字并存储在变量

问题:

  • 使用列字母或数字作为排序的基础。 (即Range(colLetter&“:”& colLetter))

任何帮助都是适当的

1 个答案:

答案 0 :(得分:0)

Sub Tester()

Const SORT_HEADER As String = "Value"
Dim sht As Worksheet, f As Range


    Set sht = Worksheets("Sheet1")

    Set f = sht.Rows(1).Find(SORT_HEADER, LookIn:=xlValues, lookat:=xlWhole)

    If Not f Is Nothing Then

        sht.Range("A1").CurrentRegion.Sort _
            Key1:=sht.Columns(f.Column), Order1:=xlAscending, Header:=xlYes

    Else
        MsgBox "'" & SORT_HEADER & "' column not found!"
    End If

End Sub