vba - MS Excel - 查找合并的单元格并在相应行中组合其中的信息

标签 vba excel merge excel-formula

enter image description here

A 列中有一些已合并的单元格和一些未合并的单元格,大小不同,B 列由所有未合并的单元格组成。

我正在寻找一个公式(如果不存在,可以用VBA编写),它将确定A中的单元格是否合并或取消合并,如果合并,则合并B列中的组件(如公式连接)并将其写入其中的一行,例如上面的一行,如果可能的话删除下面的行。

我可以用公式来做到这一点吗?有人可以帮我提供给定的代码吗?

<小时/>

PART II

现在我不想丢失给定行的数据,而是在它们之间添加第三列和第四列中的数据,如图所示。如果可能的话,让星星消失。

最佳答案

为了使其快速简单:(将其放入 VBA 窗口中的任何模块中)

Option Explicit

Public Function merge_merged(rng As Range) As Variant
  Dim i As Long, j As Long, output() As Variant
  ReDim output(1 To UBound(rng.Value), 1 To 2)
  For j = 1 To UBound(rng.Value)
    If Len(rng(j, 1).Text) Then
      i = i + 1
      output(i, 1) = rng(j, 1).Text
      output(i, 2) = rng(j, 2).Text
    Else
      output(i, 2) = output(i, 2) & ", " & rng(j, 2).Text
    End If
  Next
  For i = i + 1 To j - 1
    output(i, 1) = ""
    output(i, 2) = ""
  Next
  merge_merged = output
End Function

然后选择范围 D2:E13 并使用公式

=merge_merged(B2:C13)

This is an array formula and must be confirmed with Ctrl+Shift+Enter↵.

应该完全按照您的要求进行...如果您仍有任何疑问,请写评论

也适用于我的字符串:
enter image description here

编辑:

获得所需答案后,不应更改问题,最好提出新问题。不过,这次我会提供一个解决方案:

Option Explicit

Public Function merge_merged(rngIn As Range) As Variant
  Dim i As Long, j As Long, k As Long, output() As Variant, rng As Variant
  rng = rngIn.Value
  ReDim output(1 To UBound(rng), 1 To UBound(rng, 2))
  For j = 1 To UBound(rng)
    If Len(rng(j, 1)) Then
      i = i + 1
      For k = 1 To UBound(output, 2)
        If IsNumeric(Replace(rng(j, k), "*", "")) Then
          output(i, k) = Replace(rng(j, k), "*", "")
        Else
          output(i, k) = rng(j, k)
        End If
      Next
    Else
      For k = 1 To UBound(output, 2)
        If Len(rng(j, k)) Then
          If IsNumeric(output(i, k)) And IsNumeric(Replace(rng(j, k), "*", "")) Then
            output(i, k) = 0 + output(i, k) + Replace(rng(j, k), "*", "")
          Else
            output(i, k) = output(i, k) & ", " & rng(j, k)
          End If
        End If
      Next
    End If
  Next
  For i = i + 1 To j - 1
    For k = 1 To UBound(output, 2)
      output(i, k) = ""
    Next
  Next
  merge_merged = output
End Function

enter image description here

  • 仅检查第一列是否折叠
  • 如果“2”到“end”列包含数字,则会将它们相加
    • 混合值(数字和字符串)可能会造成困惑
      • “A”、“3”、“5”将是“A、3、5”
      • “3”、“A”、“5”将变为“3、A、5”
      • 但是“3”、“5”、“A”将是“8、A”
    • * 如果字符串是数字而没有它,将被删除
  • 它将提取第一行的所有值(对于每个合并部分)
    • 如果没有“第一个”值,则找到的第一个值将显示为“, value”
    • 如果所有单元格均为空,则输出也将为空
  • 空单元格将被忽略(“A”、“”、“C”将变为“A、C”)
  • 将所有内容插入变量中,以便更快地适应更大的表

关于vba - MS Excel - 查找合并的单元格并在相应行中组合其中的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34942923/

相关文章:

excel - 如何在使用 EDATE 公式的同时大写日期月份

excel - 如何根据另一个单元格区域中特定值的出现来计算一个单元格值

python - 使用来自另一个数据帧的值更新数据帧 header

excel - Workbook.Worksheets.Columns() 使用数字而不是字符串?

vba - Word VBA 代码用于选择单元格中的文本,将特殊剪切并粘贴回同一单元格

excel - 根据公共(public)列合并两个 csv 文件

git - 在冲突的 git merge 后清理?

vba - 使用 Excel VBA 中的参数调用 Word VBA Sub

c++ - VBA 面向对象程序设计

php - 如何在 PHP 中将 MP3 文件一个接一个地组合