我正在使用Excel尝试在VB for Applications中编写宏,并可以使用您的帮助。
我的目标:
将Toad中的1000条记录导出到Excel,然后运行一个宏,根据单元格内容在某些工作表上放置某些记录。
我的数据示例:
(抱歉,我会将图片内联发布,但我没有足够的声誉)
数据说明:
特权 - 用户的不同角色
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
但是这会选择通用单元格,而不是基于所写文本的单元格。这意味着它没有编码为可变长度。
非常感谢任何帮助!
答案 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