【问题标题】:Concatenate alternating fixed column headers and row values连接交替的固定列标题和行值
【发布时间】:2016-05-11 15:13:05
【问题描述】:

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

之前看起来像这样:

之后是这样的:

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

使用公式:

=CONCATENATE(before!$A$1,"=",before!$A2,";",before!$B$1,"=",before!$B2,";",before!$C$1,"=",before!$C2,";")

任何帮助将不胜感激。

【问题讨论】:

  • 您可以访问最新的 Office 365 吗?如果是这样,公式将是; TEXTJOIN(";",TRUE,before!$A$1:$C$1 & "=" & before!$A2:$C2)
  • 以上公式为数组,必须用Ctrl-Shift-Enter确认
  • @ScottCraner 虽然我可以访问 365,但我无法在这个项目中使用它。此外,它似乎将结果拆分为多列而不是 1。
  • 不应该,但由于我目前无法访问我的 Office 365 进行测试,我无法确认。但是没有其他人回答的原因是 Stack Overflow 不是我网站的代码。这将需要 UDF 或 Sub 中的 VBA。回家后我会试试的。

标签: function excel concatenation vba


【解决方案1】:

下面的 UDF 可以做到:

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

在工作表中这样调用:

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

然后复制下来

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

【讨论】:

  • 感谢您的解决方案。
【解决方案2】:

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

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

【讨论】:

  • 这只是第一行,你需要添加另一个循环,或者把它变成一个UDF然后可以设置行。
  • 这就是我说假设它只有一行值的原因。 @pwl 会告诉我们是否需要更多。
  • @jsanchezs 请注意,这个Dim r, c As Byte 仅将c 声明为一个字节,r 将被视为一个变体。它不会在这里产生任何影响,但它在 VBA 中通常被误解
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-01
  • 1970-01-01
  • 2013-03-26
相关资源
最近更新 更多