【发布时间】:2017-11-25 08:47:11
【问题描述】:
你好 StackOverFlow 社区,
不久前我开始使用 excel vba,并且确实可以使用一些帮助来解决一些复杂的问题。
我有一个电子表格,其中有一列“主要”部分及其下方的“替代”部分。我需要创建一个宏,它将可变替代部分转置到其关联的主要部分的右侧。因此,对于下面的示例,在 A 列中,“P”是主要零件,“A”是替代品:
一个 |
1P |
1A |
1A |
1A |
2P |
2A |
2A |
3P |
3A |
我试图创建一个宏,它会给我以下结果:
一个 || B || C || D |
1P | 1A | 1A | 1A
1A |
1A |
1A |
2P | 2A | 2A
2A |
2A |
3P | 3A
3A |
以下是我能够提出的代码,但所有替代部分合并到一个范围内并转置到列表的第一个主要部分。我知道这可能不是我想要完成的最佳方法。我愿意接受所有建议,并期待听到一些很棒的解决方案。
请注意,上面示例中的粗体部分实际上在我的电子表格中突出显示,这将解释代码中的“colorindex = 6”
Sub NewHope()
Dim cell As Range
Dim LastRow As Long
Dim Prime As Range
Dim alt As Range
LastRow = Range("A" & Rows.Count).End(xlUp).Row
For Each cell In Range("A2:A" & LastRow)
If cell.Interior.ColorIndex = 6 Then
If Prime Is Nothing Then
Set Prime = cell
End If
Else
If alt Is Nothing Then
Set alt = cell
Else
Set alt = Union(alt, cell)
End If
End If
Next
alt.Copy
Prime.Offset(0, 4).PasteSpecial Transpose:=True
End sub
【问题讨论】:
-
我试图弄清楚是否需要了解替代素数的工作原理以帮助解决方案......我对此表示怀疑。只要存在模式,总会有许多不同的方法将数据重新排列成不同的模式。如果您的代码已经识别(用颜色)哪些数字需要作为“标题”,那么它应该非常简单。移动它而不是着色单元格?
-
@ashleedawg 没有模式。每个主要部分可以有任意数量的替代部分。希望澄清
-
你试过使用数组吗?你怎么知道一个零件是否是 Prime 的替代品?
-
代码是否比您发布的更多?由于某些原因,这对我来说没有意义(与 Primes 无关),但它有点难以理解。你知道如何单步执行你的代码,一次一行,观察变量和输出吗?听起来您确切地知道它需要做什么,一步一步,所以单步执行代码可能会使特定问题变得明显。 Check out this article 出色的 Chip Pearson,Excel 之王。
-
@DavidG。我没有尝试过使用数组,因为我对该函数不太熟悉。替代部分是它们正上方的 Prime 单元格下方的单元格。