首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >此任务的Excel技巧

此任务的Excel技巧
EN

Stack Overflow用户
提问于 2014-02-24 13:00:42
回答 3查看 149关注 0票数 1

我在excel中有一个电子表格,其中有以下几行:

代码语言:javascript
复制
       COLUMN
Value1.Value2.Value3
Value4.Value5.Value6
Value7.Value8.Value9

在另一个电子表格中,我得到了一个包含名称的简单列表:

代码语言:javascript
复制
   COLUMN
    Name1
    Name2
    Name3

当然,这个清单很大:)。

因此,需要在结尾处有下面的散页表:

代码语言:javascript
复制
       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

我必须将列表中的名称与电子表格上的所有值连接起来,复制所有名称。

有没有一种自动完成此过程的方法?手工过程需要几个小时才能完成,我认为有一种更明智的方法,尽管我不知道!:)

提前谢谢你的帮助。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-02-24 13:27:04

总是有一个“。”在价值之间。

试试这段代码。对于庞大的名称/值列表,使用数组要快得多:

代码语言:javascript
复制
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

备注:如果您不知道“值”和“名称”范围的确切地址,请更改此部分

代码语言:javascript
复制
'change A1:A3 to values address
arrVal = .Range("A1:A3")
'change B1:B3 to names address
arrNames = .Range("B1:B3")

代码语言:javascript
复制
'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)

在这种情况下,“value”和"name“的范围相应地从A1B1开始,并相应地在coumns、AB中的最后一个非空行结束。

结果:

票数 1
EN

Stack Overflow用户

发布于 2014-02-24 15:14:36

这是一个很好的挑战,用公式:)

在D1中使用此数组公式,然后复制

代码语言:javascript
复制
=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)))

根据区域设置,您可能需要替换字段分隔符";“

票数 2
EN

Stack Overflow用户

发布于 2014-02-24 13:21:36

我觉得这能行。

代码语言:javascript
复制
    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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21988573

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档