Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.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
Function 连接交替的固定列标题和行值_Function_Excel_Concatenation_Vba - Fatal编程技术网

Function 连接交替的固定列标题和行值

Function 连接交替的固定列标题和行值,function,excel,concatenation,vba,Function,Excel,Concatenation,Vba,我有一个具有固定列标题和可变行数据的电子表格,我想创建一个简单的工具(让我们瞄准1次单击),将用户输入的列值和行数据连接到一个属性字符串中(每个标题后面有“=”,每个值后面有“;”) 以前看起来像这样: =unionText(before!$A$1:$C$1,before!A2:C2) 之后看起来是这样的: =unionText(before!$A$1:$C$1,before!A2:C2) 输出需要在单独的工作表中,如果可能,还需要保存为值。 列的数量可能会有所不同,因此使用已定义表的解

我有一个具有固定列标题和可变行数据的电子表格,我想创建一个简单的工具(让我们瞄准1次单击),将用户输入的列值和行数据连接到一个属性字符串中(每个标题后面有“=”,每个值后面有“;”)

以前看起来像这样:

=unionText(before!$A$1:$C$1,before!A2:C2)

之后看起来是这样的:

=unionText(before!$A$1:$C$1,before!A2:C2)

输出需要在单独的工作表中,如果可能,还需要保存为值。 列的数量可能会有所不同,因此使用已定义表的解决方案将非常有用

使用的公式:

=串联(在!$A$1,“=”,在!$A2,“;”,在!$B$1,“=”,在!$B2,“;”,在!$C$1,“=”,在!$C2,“;”)之前


非常感谢您的帮助。

您可以临时使用此宏代码,假设只有一行值:

Sub Macro1()

' Macro1 Macro

Range("A1").Select

Dim r As Byte
Dim c as Byte

Dim stringunion As String

r = 1

c = 1

Do While Cells(r, c) <> ""

    stringunion = stringunion & Cells(r, c).Value & "=" & Cells(r + 1, c) & ";"

    c = c + 1

Loop

MsgBox stringunion


End Sub
Sub宏1()
'宏1宏
范围(“A1”)。选择
作为字节的Dim r
作为字节的Dim c
Dim stringunion作为字符串
r=1
c=1
“当单元格(r,c)”时执行此操作
stringunion=stringunion和单元格(r,c)。值和“=”&单元格(r+1,c)&”
c=c+1
环
MsgBox stringunion
端接头

您可以临时使用此宏代码,并假设只有一行值:

Sub Macro1()

' Macro1 Macro

Range("A1").Select

Dim r As Byte
Dim c as Byte

Dim stringunion As String

r = 1

c = 1

Do While Cells(r, c) <> ""

    stringunion = stringunion & Cells(r, c).Value & "=" & Cells(r + 1, c) & ";"

    c = c + 1

Loop

MsgBox stringunion


End Sub
Sub宏1()
'宏1宏
范围(“A1”)。选择
作为字节的Dim r
作为字节的Dim c
Dim stringunion作为字符串
r=1
c=1
“当单元格(r,c)”时执行此操作
stringunion=stringunion和单元格(r,c)。值和“=”&单元格(r+1,c)&”
c=c+1
环
MsgBox stringunion
端接头

以下自定义项将完成此操作:

Function unionText(ttl As Range, rng As Range) As String
Dim i As Long
If ttl.Cells.Count <> rng.Cells.Count Or _
    ttl.Rows.Count <> 1 Or rng.Rows.Count <> 1 Then
    unionText = CVErr(xlErrValue)
    Exit Function
End If

For i = 1 To ttl.Cells.Count
    unionText = unionText & ttl(i) & "=" & rng(i) & ";"
Next i
End Function
然后抄下来


我的显然在同一张表上,但上面的公式使用了您的表引用。

以下自定义项可以做到这一点:

Function unionText(ttl As Range, rng As Range) As String
Dim i As Long
If ttl.Cells.Count <> rng.Cells.Count Or _
    ttl.Rows.Count <> 1 Or rng.Rows.Count <> 1 Then
    unionText = CVErr(xlErrValue)
    Exit Function
End If

For i = 1 To ttl.Cells.Count
    unionText = unionText & ttl(i) & "=" & rng(i) & ";"
Next i
End Function
然后抄下来


我的显然在同一张表上,但上面的公式使用了您的表参考。

您有权访问最新的Office 365吗?如果是的话,公式是:
TEXTJOIN(“;”,TRUE,before!$A$1:$C$1&“=”&before!$A2:$C2)
上述公式是一个数组,必须使用Ctrl-Shift键确认-Enter@ScottCraner虽然我有权访问365,但我无法将其用于此项目。此外,它似乎将结果拆分为多列,而不是1列。这不应该,但因为我目前无法访问Office 365进行测试,所以无法确认。但其他人没有回答的原因是,堆栈溢出不是我网站的代码。这将需要在UDF或Sub中使用VBA。当我回家后,我将尝试使用它。您有权访问最新的Office 365吗?如果是的话,公式是:
TEXTJOIN(“;”,TRUE,before!$A$1:$C$1&“=”&before!$A2:$C2)
上述公式是一个数组,必须使用Ctrl-Shift键确认-Enter@ScottCraner虽然我有权访问365,但我无法将其用于此项目。此外,它似乎将结果拆分为多列,而不是1列。这不应该,但因为我目前无法访问Office 365进行测试,所以无法确认。但其他人没有回答的原因是,堆栈溢出不是我网站的代码。这将需要在UDF或Sub中使用VBA。当我回到家时,我会尝试使用它。这只会执行第一行,您需要添加另一个循环,或将其放入UDF中,然后可以设置这些行。这就是我说的假设它只有一行值的原因@pwl会告诉我们是否需要更多。@jsanchezs注意,这个
Dim r,c As Byte
只声明
c
作为一个字节,
r
将被视为一个变体。在这里它不会产生任何影响,但在VBAThis中它通常被误解。它只做第一行,您需要添加另一个循环,或者将其放入UDF中,然后可以设置行。这就是我说假设它只有一行值的原因@pwl会告诉我们是否需要更多。@jsanchezs注意,这个
Dim r,c As Byte
只声明
c
作为一个字节,
r
将被视为一个变体。这在这里不会有任何影响,但这是VBAThank you对此解决方案的误解。感谢您提供此解决方案。