Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
此任务的Excel技巧_Excel_Spreadsheet_Vba - Fatal编程技术网

此任务的Excel技巧

此任务的Excel技巧,excel,spreadsheet,vba,Excel,Spreadsheet,Vba,我在excel中有一个包含以下行的电子表格: COLUMN Value1.Value2.Value3 Value4.Value5.Value6 Value7.Value8.Value9 在另一个电子表格中,我有一个简单的列表,上面有一些名字: COLUMN Name1 Name2 Name3 当然,这个列表是巨大的:) 因此,在末尾需要有以下spreasd表: COLUMN Value1.Name1.Value2.Value3 Va

我在excel中有一个包含以下行的电子表格:

       COLUMN
Value1.Value2.Value3
Value4.Value5.Value6
Value7.Value8.Value9
在另一个电子表格中,我有一个简单的列表,上面有一些名字:

   COLUMN
    Name1
    Name2
    Name3
当然,这个列表是巨大的:)

因此,在末尾需要有以下spreasd表:

       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
我必须将列表上的名称与电子表格上的所有值连接起来,并为所有名称复制它们

有没有办法自动完成这个过程?手动过程需要几个小时才能完成,我认为有一种更聪明的方法可以做到这一点,尽管我不知道!)


提前谢谢你的帮助。

我想那可能行得通

    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
值之间始终有一个“.”

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

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")

在这种情况下,“值”和“名称”范围相应地从
A1
B1
开始,并相应地在coumns
A
B
中的最后一个非空行结束

结果:


使用公式进行测试是一个很好的挑战:)

在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)是否需要在
列中始终在第一个
之后添加
NameI
?2)
名称
第3列)中是否有重复项应为VBA解决方案或公式?@simoco 1)是。2) “名称”列中没有重复项。3)应该是VBA解决方案还是公式?Dalek,列
中的所有值都有效吗?我的意思是它们总是有
?值之间总是有一个“.”。值会发生变化,但它们之间总是有一个“.”。我不知道我是否做错了什么,但它给了我.Range(“C1”).Resize(UBound(arrRes))=WorksheetFunction.Transpose(arrRes)上的错误“Type mismatch”,如下从注释到Q,这段代码假设数组中的所有值
arrVal=.Range(“A1:A3”)
具有
。这是真的吗?可能您在“value”范围的地址中包含了列标题?它们有一个“.”。“没有标题。@Dalek,转置函数有一些限制(数组长度限制)。我已经更新了我的答案——现在它应该起作用了,因为有些人对Excel Hero公式挑战这样的挑战避而远之,我仍然必须说,这是一个严肃的赏心悦目的问题+1.抄下来对我不起作用。第一排,一切都很好。有什么特别的配置吗?如果它适用于第一行,那么您可能有一个相对引用,它应该是绝对的或相反的。我又试了一次,成功了。确保引用完全相等。没有特殊的配置。或者给我看看你用的公式。(三思而后行,是否按Ctrl-Shift-Enter键输入公式?这是一个数组公式)
=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)))