根据单元格内容,Excel 中的 Select 个单元格

Select cells in Excel based on cell content

我正在与 Excel 合作,尝试在 VB 中为应用程序编写一个宏,需要您的帮助。

我的目标:

将 1000 条记录从 Toad 导出到 Excel,然后 运行 一个宏,它会根据单元格内容将某些记录放在某些 sheet 上。

我的数据示例:

(抱歉,我会 post 图像内联,但我没有足够的声誉)

数据说明:

权限——用户的不同角色
User_name - 每个用户的用户名
每个用户 Sort_name - last_name、first_name

我希望宏做什么:

在权限栏中,select所有具有相同权限的记录及其对应的详细信息,将它们剪切并粘贴到新的sheet上。重复此操作以获得数据末尾的特权。

示例:

Select 所有管理行以及 user_name 和 sort_name。剪切 select 行,粘贴到 sheet2.
Select 所有版主行以及 user_name 和 sort_name。剪切 select 行,粘贴到 sheet3.
Select 所有 GeneralUser 行以及 user_name 和 sort_name。剪切 select 行,粘贴到 sheet4。

附加信息:

在我的实际数据中,有数千行,大约有 60 种不同的权限。因此,当我 运行 在我的真实数据上执行此操作时,它将生成一个包含 60 个不同 sheet 的工作簿。

特权将有序。所有管理员将在一起。单元格 A2-A9 中不会有 10 个管理员,A67-A100 中不会有更多。它们是连续的。

包含原始数据的第一个 sheet 将在此过程结束时删除,因此其格式无关紧要。

我试过了:

Sub Test()
'
' Test Macro
'

'
    Range("A2:C9").Select
    Selection.Cut
    Sheets("Sheet2").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Range("A10:C14").Select
    Selection.Cut
    Sheets("Sheet3").Select
    ActiveSheet.Paste
    Sheets("Sheet1").Select
    Range("A15:C25").Select
    Selection.Cut
    Sheets("Sheet3").Select
    Sheets.Add After:=Sheets(Sheets.Count)
    ActiveSheet.Paste
End Sub

但是 select 是通用单元格,而不是基于所写文本的单元格。这意味着它没有针对可变长度进行编码。

非常感谢任何帮助!

试试这个,下面假设:sheets 不是为 privs 创建的,数据按列 A 排序,activesheet 是 sheet 和你的数据[=11] =]

Values_To_Find 需要更改为您拥有的所有权限,它只是一个逗号分隔列表

不删除原来的sheet

Sub t()
Dim start_rng As Range

Values_To_Find = "Admin,Moderator,GeneralUser"
sp = Split(Values_To_Find, ",")

With ActiveSheet
    For i = 0 To UBound(sp)
        Found = 0
        Set start_rng = .Range("A1")
        For Each cell In .Range("A2:" & .Range("A2").End(xlDown).Offset(1, 0).Address)
            If Found = 1 And cell.Value <> sp(i) Then 'find end
                Set end_rng = cell
                Exit For
            End If
            If cell.Value = sp(i) And start_rng.Address = "$A" Then 'find start
                Set start_rng = cell
                Found = 1
            End If
        Next

        Set ws = Sheets.Add
        ws.Name = sp(i)
        .Range(start_rng.Address & ":" & Range(end_rng.Address).Offset(-1, 3).Address).Copy
        ws.Range("A1").PasteSpecial
    Next
End With

End Sub