我的$hereStr=@'
Platform,"Cap Used %"
P1,0%
P2,18%
P3,6%
'@
$TempData = $hereStr | ConvertFrom-Csv
(($TempData."Cap Used %").Replace('%','') | Measure-Object -Average).Average
此模板位于sheet 1
我希望
答案 0 :(得分:2)
这不是你要求的,但你完全可以用细胞公式来完成。这有点复杂,VBA可能是一个更好的方法,但万一你好奇:
我假设您的姓名/城市对位于Sheet1!$A$1:$B$9
**
在表2中,在A列中,我将构建一个列表,指示从中获取数据的行。 (1,1,1,2,2,2,3,3,3,4,4,4等)
在表2的B栏上,我将构建一个列表,显示此目标行应具有的结果类型(名称 - 城市名称为1
,名称城市 - 城市为2
,以及名称 - 城市为3
)有多种方法可以做到这一点。我在列A中填充=INT((ROW()-1)/3)+1
,列B填充=MOD(ROW()-1,3)+1
现在我在Sheet 2上的前两列看起来像
现在我可以使用它们来构建针对原始数据的索引查找。 C列将有2种不同类型的行为。它始终以Name开头,但如果B列为2,则后面是City。
=INDEX(Sheet1!$A$1:$B$9,S A1,1)&IF(B1=2," " & INDEX(Sheet1!$A$1:$B$9, A1,2),"")
D列也有两种类型的条目。始终从City开始,但如果B列是1
,请按照名称进行操作。
=INDEX(Sheet1!$A$1:$B$9,A1,2)&IF(B1=1," " & INDEX(Sheet1!$A$1:$B$9,A1,1),"")
瞧
如果您愿意,可以替换所有对A列和A列的引用。 B与其中的实际公式。
然后C列将有:
=INDEX(Sheet1!$A$1:$B$9,INT((ROW()-1)/3)+1,1)&" "&IF(MOD(ROW()-1,3)+1=2,INDEX(Sheet1!$A$1:$B$9,INT((ROW()-1)/3)+1,2),"")
在D列中进行相应的替换,您可以省略A列和B列。
这种方法的一个小小的不便是,因为它依赖于row()
,所以无法调整两个索引公式(INT((ROW()-1)/3)+1
& {{1},它无法移动到任何其他行}})
** 在现实世界中,我还会为您的源数据表提供一个名称,例如MOD(ROW()-1,3)+1
然后您的第一个结果列可能如下所示:
NameCityTable
答案 1 :(得分:1)
试试这个:
Private Sub CommandButton1_Click()
Dim rng1() As Variant, rng2 As Range, rng3() As Variant,k&
With Worksheets("Sheet1")
rng1 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(xlUp)).Value
End With
With Worksheets("Sheet3")
rng3 = .Range(.Cells(1, 1), .Cells(.Rows.Count, 2).End(xlUp)).Value
End With
With Worksheets("Sheet2")
For k = LBound(rng1, 1) To UBound(rng1, 1)
Set rng2 = .Range("A1").Offset(UBound(rng3, 1) * (k - 1)).Resize(UBound(rng3, 1), UBound(rng3, 2))
With rng2
.Value = rng3
.Replace "City", rng1(k, 2)
.Replace "Name", rng1(k, 1)
End With
Next k
End With
End Sub
输入:
Sheet 1中:
表Sheet 3:
输出:
Sheet 2中: