2017-07-24 60 views
0

我有四个具有相同行数的1个列范围:Country,Name,Category,Amount。 “国家”,“名称”和“类别”范围具有字符串值,“金额”范围增加了一倍。我面临的问题是:只要金额高于或低于某个值,我需要在每个类别和每个名称下获得所有国家/地区的字符串。在多个范围内循环并根据条件连接

样品表:

Country Name Category Amount 
croatia Jon Blue 14 
norway Jon Blue 23 
poland Rob Green 10 
egypt Eva Green 8 
canada Eva Pink 32 
brazil Rob Pink 25 
switzerland Rob Pink 35 
russia Jon Pink 27 
sweden Rob Black 32 
togo Rob Black 13 
benin Esther Violet 24 
morroco Jon Yellow 36 
romania Eva Yellow 35 
usa Eva Yellow 38 
japan Rob Yellow 34

对于量> 20,每个类别的正确的字符串结果将是:

Blue: Jon: norway(23) 
Pink: Eva: canada(32), Rob: brazil(25), switzerland(35) 
Yellow: Jon: morroco(36), Eva: romania(35), usa(38), Rob: japan(34) 
etc. 

不知道如何解决这个问题?没有编写代码,因为我无法确定哪里可以开始。正在考虑多维阵列,但这超出了我的编码能力...任何帮助非常感谢

+0

为什么不过滤数据,即使它意味着首先将它们复制到单个块/表中? –

+0

以及过滤器会让我的表中的值的列表,我仍然需要以某种方式连接到正确的字符串。我想问题是,如果有一种方法可以为每个类别做一些类型的循环“,对于每个名称,连接值高于或低于值的国家/地区... – whada

回答

1

下面的代码将让你接近你想要的。下面是输出:

Blue: Jon: norway(23), 

Pink: Eva: canada(32), Pink: Rob: brazil(25), Pink: Rob: switzerland(35), Pink: Jon: russia(27), 
Black: Rob: sweden(32), 
Violet: Esther: benin(24), 
Yellow: Jon: morroco(36), Yellow: Eva: romania(35), Yellow: Eva: usa(38), Yellow: Rob: japan(34), 

你需要做的唯一事情是防止诸如空白第二行的事情,重复的彩色输出和“”在每行的末尾。但我不想带走你所有的乐趣!如果您遇到问题,请重新发布。

Option Explicit 
Sub test() 
Dim r As Range, colorR As Range, resultR As Range 
Dim amountR As Range, countryR As Range, nameR As Range 
Dim color As String, name As String, country As String, amount As String 
Set resultR = Range("A19") 
Set r = Range("C2") 
Set colorR = r 
While r <> "" 
    While r = colorR 
    Set amountR = r.Offset(0, 1) 
    Set nameR = r.Offset(0, -1) 
    Set countryR = r.Offset(0, -2) 
    If amountR > 20 Then 
     If color = r & ": " Or color = "" Then color = "" Else color = r & ": " 
     If name = nameR & ": " Then name = "" Else name = nameR & ": " 
     country = countryR & "(" 
     amount = amountR & "), " 
     resultR = resultR & color & name & country & amount 
    End If 
    Set r = r.Offset(1, 0) 
    Wend 
    If resultR <> "" Then 
    resultR = Left(resultR, Len(resultR) - 2) 
    Set resultR = resultR.Offset(1, 0) 
    End If 
    Set colorR = r 
Wend 
End Sub 
+0

感谢Tony M,看起来我必须引入一些if语句来消除颜色和名称的重复?在这里苦苦挣扎...任何想法如何轻松做到这一点?thx – whada

+0

我现在修改了代码,我认为它几乎完全解决了你的问题。总结金额是的,你说得对,要把事情做得恰到好处,确实需要很多手段,我承认我的做法是“快速和肮脏”,但通常这就是快速解决问题所需要的。如果有重要的事情,你可以随时回去,让事情更加优雅,如果你有更多的问题,请告诉我, –

+0

谢谢Tony M - 这有帮助,不需要在括号内总结金额 – whada