我在这个行中有一个excel的电子表格:
COLUMN
Value1.Value2.Value3
Value4.Value5.Value6
Value7.Value8.Value9
在另一个电子表格中,我有一个简单的名单列表:
COLUMN
Name1
Name2
Name3
当然,这个名单很大:)。
因此需要在最后添加以下spreasdsheet:
COLUMN
Value1.Name1.Value2.Value3
Value4.Name1.Value5.Value6
Value7.Name1.Value8.Value9
Value1.Name2.Value2.Value3
Value4.Name2.Value5.Value6
Value7.Name2.Value8.Value9
Value1.Name3.Value2.Value3
Value4.Name4.Value5.Value6
Value7.Name4.Value8.Value9
我必须将列表上的名称与电子表格中的所有值连接起来,为所有名称复制它们。
有没有办法自动执行此过程?手动过程需要几个小时才能完成,我认为有一种更聪明的方法,尽管我不知道! :)
提前感谢您的帮助。
答案 0 :(得分:2)
使用公式来实现它是一个很好的挑战::)
在D1中使用此数组公式,然后复制
=INDEX(LEFT($A$1:$A$4;FIND(".";$A$1:$A$4))&TRANSPOSE($C$1:$C$3)&RIGHT($A$1:$A$4;LEN($A$1:$A$4)-FIND(".";$A$1:$A$4)+1);1+INT((ROWS($D$1:D1)-1)/ROWS($C$1:$C$3));1+MOD(ROWS($D$1:D1)-1;ROWS($C$1:$C$3)))
根据您的区域设置,您可能需要替换字段分隔符“;”通过“,”
答案 1 :(得分:1)
总有一个"。"在值之间。
试试这段代码。对于庞大的名称/值列表,使用数组会快得多:
Sub test()
Dim arrVal As Variant
Dim arrNames As Variant
Dim arrRes As Variant
Dim v, n, k As Long
'change Sheet1 to suit
With ThisWorkbook.Worksheets("Sheet1")
'change A1:A3 to values address
arrVal = .Range("A1:A3")
'change B1:B3 to names address
arrNames = .Range("B1:B3")
ReDim arrRes(1 To UBound(arrVal) * UBound(arrNames), 1 To 1)
k = 1
For Each v In arrVal
For Each n In arrNames
arrRes(k, 1) = Left(v, InStr(1, v, ".")) & n & Mid(v, InStr(1, v, "."))
k = k + 1
Next
Next v
'change "c1" to start cell where to put new values
.Range("C1").Resize(UBound(arrRes, 1)) = arrRes
End With
End Sub
注意:强> 如果您不知道"值的确切地址"和"名称"范围,改变这部分
'change A1:A3 to values address
arrVal = .Range("A1:A3")
'change B1:B3 to names address
arrNames = .Range("B1:B3")
到
'change A1:A to "values" address
arrVal = .Range("A1:A" & .Cells(.Rows.Count, "A").End(xlUp).Row)
'change B1:B to "names" address
arrNames = .Range("B1:B" & .Cells(.Rows.Count, "B").End(xlUp).Row)
在那种情况下"值"和"名称"范围相应地从A1
和B1
开始,并相应地结束于coumns A
和B
中的最后一个非空行。
<强>结果:强>
答案 2 :(得分:0)
我认为这可行。
Const FIRST_TALBE = 4
Const SECOND_TABLE = 2
Sub makeTheJob()
For i = 1 To lastRow
l = Split(Cells(i, FIRST_TABLE), ".")
newvalue = l(0) & "." & Cells(i, SECOND_TABLE) & "." & l(1) & "." & l(2)
Debug.Print newvalue
Next i
End Sub