如何根据vba的比例在excel中订购行?

时间:2015-07-31 10:34:00

标签: excel vba sorting

第一次发布在这里,希望我能提供足够的信息来获得一些帮助。

我在excel中有一个数据集,其中包含第1列中的多个客户端,我想根据块数为10的比例对其进行排序。例如,如果客户端1和2之间的比率为60/40,则需要订购6行客户端1,4行客户端2,6行客户端1,4行客户端2直到数据结束。

我有什么方法可以做到这一点,无论是通过excel排序还是使用VBA,我已经尝试了几天而且很难过。

感谢。

2 个答案:

答案 0 :(得分:0)

希望这会有所帮助。这会将您的块放在彼此相邻的列中。我没有对此进行测试,但希望这个想法可以让你到达某个地方。

Sub ClientRatios()

'DataSet is in range A:A
'Make the ratios of the Clients Add up to 10
'You can have a maximum of 10 clients

Dim Nextempty As Range
Dim j As Long
Dim i As Long

'Repeat the following idea for each client and you should get what you're looking for

'+++Client1+++

'=================================
i = Range("Clinet1_Ratio")
ClientName = Range("Clinet1_Name")
'=================================

Total = Application.WorksheetFunction.CountIf(Range("A:A"), ClientName)
Do While Total < 0
    j = i
    c = 2
    Do While j > 0
        If j > Total Then j = Total
        Nextempty = Cells(Cells.Rows.Count, Columns(c)).End(xlUp).Row + 1
        Nextempty = ClientName
        j = j - 1
    Loop
c = c + 1
Total = Total - i
Loop

'+++Client2+++
    'Do the same for all 10 clients

 End Sub

答案 1 :(得分:0)

欢迎来到SO。这不是代码编写服务,所以我会告诉你如何解决这个问题。

我建议您使用Microsoft Scripting Runtime库(Windows附带)中的Dictionary对象。链接herehere

  1. 将您的源数据读入dictionary,以便存储客户名称和每个名称的计数。
  2. 循环遍历比率单元格,每次在字典中写入客户端名称,然后减少计数。如果名称的count = 0,则不要写出该名称。
  3. 当所有客户名称在字典中计数= 0时,退出循环就完成了。