根据单元格内容在Excel中选择单元格

时间:2015-07-23 13:03:01

标签: excel vba excel-vba toad

我正在使用Excel尝试在VB for Applications中编写宏,并可以使用您的帮助。

我的目标:

将Toad中的1000条记录导出到Excel,然后运行一个宏,根据单元格内容在某些工作表上放置某些记录。

我的数据示例:

image

(抱歉,我会将图片内联发布,但我没有足够的声誉)

数据说明:

特权 - 用户的不同角色
User_name - 每个用户的用户名
Sort_name - last_name,每个用户的first_name

我希望宏做什么:

在权限列中,选择具有相同priv及其相应详细信息的所有记录,将其剪切并粘贴到新工作表上。在数据结束时重复此操作以获取权限。

示例:

选择所有管理行以及user_name和sort_name。剪切选定的行,粘贴在sheet2上 选择所有主持人行以及user_name和sort_name。剪切选定的行,粘贴在sheet3上 选择所有GeneralUser行以及user_name和sort_name。剪切选定的行,粘贴在sheet4上。

其他信息:

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

特权将按顺序排列。所有管理员都会在一起。从A2-A9单元格中不会有10个Admin,而A67-A100则不会有更多。他们是连续的。

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

我试过了:

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

但是这会选择通用单元格,而不是基于所写文本的单元格。这意味着它没有编码为可变长度。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

试试这个,下面假设:不为privs创建工作表,数据按A列排序,activesheet是包含数据的工作表

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

它不会删除原始工作表

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$1" 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