-1

简单的问题,但我根本找不到答案。我发现只有初学者水平的知识才能通过笨拙的 excel Visual Basic 手册进行搜索,这非常令人沮丧。请帮忙。

我有大量股票交易的数据。它们以以下格式返回给我:

https://my.syncplicity.com/share/jjuqll2r00/Screen_Shot_2013-05-20_at_23.02.07

请点击上面的图片链接 - 我是一个没有声誉的初学者直接发布:)

希望您可以看到有一个标记为市场的列,然后是一个不同金融资产的列表,例如黄金。

我需要excel来匹配市场列下具有相同条目的所有行,然后将行着色为相同的颜色。我还希望它创建一个新表,其中包含该资产的数据汇总,然后我将在饼图中相对于其他资产进行绘制。

问题是不同资产的数量可以是无限的,所以我不能直接使用我的代码:即

dim rge as range

rge = activesheet.usedrange.find("Market", lookat:=xlpart)
rwnbr = rge.end(xldown).row
colnbr = rge.column

for i = 1 to rwnbr
 if cells(i,colnbr).value = "*Gold*" then cells.(i,colnbr).interior.colorindex = 3
 end if
 if ..................... = "*Xstrata*" then .......................
 end if
next i

以上内容并不好,因为我必须告诉 excel 哪些资产应该匹配。我需要自动化它,以便如果它们是不同的资产,它会对行进行不同的着色(并且可以有任意数量的不同资产,因此必须为每个资产选择不同的颜色)。然后我需要它为该资产创建一个新的交易汇总表,以便显示整体损益,然后将其放入饼图中。

一旦我知道如何对 VBA 进行编码以对选择的相同(但最初未告知)数据进行操作,这应该很容易。

请帮忙!

谢谢你。

4

2 回答 2

0

假设数据已经按市场列排序,根据您的屏幕截图,为了进行颜色格式化,您可以执行以下操作:

Sub ColorMyTable()
Dim rng as range 'column range
Dim r as Long 'row iterator
Set rng = Activesheet.Range("E2",Range("E2").End(xlDown))

'## Assign some color to the last cell in this column
rng.Cells(1).Interior.ColorIndex = 39

For r = rng.Rows.Count to 1 Step - 1
    With rng.Cells(r)
    'Check to see if the cell is the same value as the one beneath it
        If .Value = .Offset(1, 0).Value Then
            '## Make them the same color
            .Offset(1,0).Interior.ColorIndex = .Interior.ColorIndex

            '
        Else:
            '## Code to apply a new semi-random color to the next row
            ' , when the values don't match.
            .Offset(1, 0).Interior.ColorIndex = .Offset(1,0).Row Mod 55

        End If
    End With
Next
End Sub 

这是我能想到的最简单,也可能是最丑陋的方式来分配颜色,而无需事先进行任何分配。

没有检查该颜色是否已被使用,但我认为这应该为您提供 55 种不同的颜色。

不幸的是,除非您事先知道要使用什么颜色,否则我想不出一种非常简单的分配颜色的方法。但这里有一些更复杂的方法,您可能会尝试适应:

  • 例如,您可以使用单一颜色的 long 值,然后.TintAndShade根据列中有多少唯一资产应用特定因子。就像这样: 如何将渐变颜色分配给 excel 列?
  • 在类似的说明中,您可以将一些颜色指定为公共变量,或使用颜色主题中的内置常量(假设 Excel 2007+)并使用 VBA 函数在这些颜色之间旋转.TintAndShade,如有必要,还可以应用,就像上面,但有更多的可调整性来使用多种颜色。
  • 您可以使用随机数生成器来分配颜色值,将使用过的颜色存储在集合中,并检查重复的颜色(并在需要时强制使用新颜色)等。
于 2013-05-21T02:14:48.867 回答
0

命名范围失败的代码:

Dim ran9e As Range
Set ran9e = ActiveSheet.UsedRange
Range("A1").Select
Sheets.Add.Name = "Summary"

ActiveWorkbook.PivotCaches.Create(xlDatabase, ran9e, xlPivotTableVersion14).CreatePivotTable tabledestination:=Sheets("Summary"), _
tablename:="PivotTable1", defaultversion:=xlPivotTableVersion14
Sheets("Summary").Select
Cells(3, 1).Select
于 2013-05-21T18:34:48.930 回答