我正在尝试创建优先级列表。我有6个不同的值,用户输入到工作表中(通过VBA GUI)。 Excel计算这些值并创建优先级编号。我需要在两个表中列出它们(通过一个函数)。当存在重复值时(即ProjA = 23且ProjB = 23),问题就会发挥作用。
我不关心首先列出哪一个,但我尝试过的所有内容都存在次要问题。我的工作簿有两张纸。第一个是输入“原始”数据的位置,第二个是我希望找到两个列表的位置。 *我不想在这些名单中使用枢轴。
Priority Number Proj Name
57 Project Alpha c
57 DUI Button Project
56 asdf
57 asdfsdfg
56 asdfasdf
56 Project Alpha a
56 Project Alpha b
18 Project BAS
列表A(包括值范围1-20和
列表B(包括20-inf的值范围)
So, I want it to look like this:
Table 1 (High Priority) Table 2 (Low Priority)
Project BAS Project Apha C
DUI Button Project
Etc.
答案 0 :(得分:0)
通常,StackOverflow不会收到这些开放式问题。你应该试图证明你到目前为止所尝试的内容,以及你变得困惑的确切位置。否则,人们正在为你工作,而不是试图解决具体的错误。
然而,因为你是新来的,我做了一个例外。
您可以通过循环优先级列表并将值复制到相应的列表来开始解决您的问题。对于初学者,我假设优先级值从单元格A2
开始,项目名称从单元格B2
开始(单元格A1
和B1
将是标题)。我还假设我们正在使用名为Sheet1
的工作表。
现在我需要知道优先级/项目名称列表的长度。我可以通过使用由maxRows
计算的名为Worksheets.Cells(1, 1).End(xlDown).Row
的整数来确定这一点。这给出了常规表中的值的数量(包括标题,A1
)。
我继续为每个优先级列表设置列(高/低)。在我的示例中,我将这些设置为列3
和4
。然后我清除这些列以删除那里已经存在的任何值。
然后我创建了一些跟踪变量,这些变量将帮助我确定我已经添加到每个列表中的项目数量highPriorityCount
和lowPriorityCount
)。
最后,我遍历原始列表并检查优先级值是低(< 20
)还是高(else
条件)。使用我在上面创建的跟踪变量将项目名称放入适当的列中。
注意:使用2
作为偏移量的任何地方都是因为我在考虑标题单元格(第1行)。
Option Explicit
Sub CreatePriorityTables()
With Worksheets("Sheet1")
' Determine the length of the main table
Dim maxRows As Integer
maxRows = .Cells(1, 1).End(xlDown).Row
' Set the location of the priority lists
Dim highPriorityColumn As Integer
Dim lowPriorityColumn As Integer
highPriorityColumn = 3
lowPriorityColumn = 4
' Empty the priority lists
.Columns(highPriorityColumn).Clear
.Columns(lowPriorityColumn).Clear
' Create headers for priority lists
.Cells(1, highPriorityColumn).Value = "Table 1 (High Priority)"
.Cells(1, lowPriorityColumn).Value = "Table 2 (Low Priority)"
' Create some useful counts to track
Dim highPriorityCount As Integer
Dim lowPriorityCount As Integer
highPriorityCount = 0
lowPriorityCount = 0
' Loop through all values and copy into priority lists
Dim currentColumn As Integer
Dim i As Integer
For i = 2 To maxRows
' Determine column by priority value
If (.Cells(i, 1) < 20) Then
.Cells(lowPriorityCount + 2, lowPriorityColumn).Value = .Cells(i, 2)
lowPriorityCount = lowPriorityCount + 1
Else
.Cells(highPriorityCount + 2, highPriorityColumn).Value = .Cells(i, 2)
highPriorityCount = highPriorityCount + 1
End If
Next i
End With
End Sub
这应该产生预期的行为。