Function 连接交替的固定列标题和行值
我有一个具有固定列标题和可变行数据的电子表格,我想创建一个简单的工具(让我们瞄准1次单击),将用户输入的列值和行数据连接到一个属性字符串中(每个标题后面有“=”,每个值后面有“;”) 以前看起来像这样: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) 输出需要在单独的工作表中,如果可能,还需要保存为值。 列的数量可能会有所不同,因此使用已定义表的解
=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对此解决方案的误解。感谢您提供此解决方案。