首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逐行合并单元格而不丢失任何数据

逐行合并单元格而不丢失任何数据
EN

Stack Overflow用户
提问于 2018-08-16 06:51:52
回答 2查看 391关注 0票数 0

我得到的数据是1列、2列或3列(可能更多)。我需要每一行在不丢失任何列中的任何数据的情况下合并相应行中的数据。

我设法将一些代码组合在一起,以正确地组合单元格,但我正在努力使用这些代码来查看每一行,并针对包含数据的所有行组合该行中的单元格。

这是我到目前为止所拥有的

代码语言:javascript
复制
Sub JoinAndMerge()
'joins all the content in selected cells
'and puts the resulting text in top most cell
'then merges all cells

Dim outputText As String
Const delim = " "

On Error Resume Next

For Each cell In Selection
outputText = outputText & cell.value & delim
Next cell
With Selection
.Clear
.Cells(1).value = outputText
.Merge
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlCenter
.WrapText = True
End With


End Sub

这是我试图让它遍历每一行的结果。

代码语言:javascript
复制
Sub JoinAndMerge2()
'joins all the content in selected cells
'and puts the resulting text in top most cell
'then merges all cells

Dim outputText As String
Const delim = " "

On Error Resume Next

Dim cell_value As Variant
Dim counter As Integer
Dim xlastRow As Long
Dim xlastColumn As Long

xlastRow = Worksheets("Sheet48").UsedRange.Rows.Count
xlastColumn = Worksheets("Sheet48").UsedRange.Columns.Count

'Looping through A column define max value
For i = 1 To xlastRow
    'Row counter
    counter = 1

    'Take cell one at the time
    cell_value = ThisWorkbook.ActiveSheet.Cells(1, i).value

    For Each cell In Selection
    outputText = outputText & cell.value & delim
    Next cell
        With Selection
        .Clear
        .Cells(1).value = outputText
        .Merge
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = True
    End With

    counter = counter + 1


Next i


End Sub

如何正确地遍历每一行?

如果有帮助,在左侧之前,在右侧之后:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-16 07:36:59

我从来不建议合并单元格,但如果您必须...

这是按行(由Column A确定)和列动态设置的。每个合并大小取决于最右侧的每行非空列。因此,一些合并的单元格将跨越2列,而另一些将跨越3列。如果您不希望出现这种情况,则需要查找最大使用量的列并按该列索引进行合并

例如,将MyCell.Resize(1, i -1).Merge替换为MyCell.Resize(1, MaxCol).Merge,其中MaxCol是最大使用量的列。

代码语言:javascript
复制
Option Explicit

Sub Merger()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim MyCell As Range, Merged As String, i, iArr

Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each MyCell In ws.Range("A2:A" & ws.Range("A" & ws.Rows.Count).End(xlUp).Row)
    For i = 1 To ws.Cells(MyCell.Row, ws.Columns.Count).End(xlToLeft).Column
        Merged = Merged & Chr(32) & MyCell.Offset(, i - 1) 'Build String
    Next i
        MyCell.Resize(1, i - 1).Merge 'Merge
        MyCell = Right(Merged, Len(Merged) - 1) 'Insert String
        Merged = "" 'Reset string for next loop
        MyCell.HorizontalAlignment = xlGeneral
        MyCell.VerticalAlignment = xlCenter
        MyCell.WrapText = True
Next MyCell

Application.DisplayAlerts = True
Application.ScreenUpdating = True

End Sub
票数 1
EN

Stack Overflow用户

发布于 2018-08-16 14:13:52

压力再大也不为过。应避免合并单元格。

当拖动一个区域来填充单元格时,它们会造成严重破坏。他们中断了双击自动填充,并让复制和粘贴成为一种沮丧的练习。它们延迟了开发,增加了公式和VBA代码的复杂性,同时创造了更多发生错误或bug未被注意到的机会。

因此,我强烈建议您重新考虑使用合并单元格。

为了证明这一点,您将在以下两个解决方案中的几行中找到“*”。这些行中的每一行都需要唯一地处理。想猜猜为什么吗?您当前在行1中的合并单元格。该合并单元格可能会导致这些行因错误而暂停,或者继续存在不希望出现的后果,具体取决于哪些单元格地址实际保存了第1行数据。

合并的单元格绝对是可怕的,被认为是Excel中最大的罪过之一。

这里有两种不合并单元格的前进方式。

在VBA中(psuedo代码)

代码语言:javascript
复制
For (Columns, 2, LastColumn, Step 2)

   For(Rows, 3, LastRow)

      With Worksheet

         If .Cells(Row,Column) <> vbNullString then

            .cells(Row,Column-1)=.cells(Row,Column-1).Value2 _

                & StringDeliminator & .cells(Row,Column).Value2

         End If

      End with

   Next Rows

   Columns (Column).EntireColumn.Delete*****

Next Columns

在工作表中使用公式

添加新列C

在单元格C3中使用公式

=If(A3<>"",C3=A3 & " " & B3,"")

向下拖动公式(如果需要,可复制到其他列)

Ctrl Shift上移以选择所有公式

复制*

粘贴特殊值*

删除A和B列*

有一种情况下,合并的单元格是ok的。

如果你身处绝境,你无能为力,因为你的经理不关心你的工作是否与他的分析师的自动化工具不兼容,并拒绝接受居中选择作为可行的替代方案,因为“我知道居中的作用,但它没有帮助,你必须合并单元格,使文本在这些列上居中。”如果这是你的情况,那么合并的单元格是可以的,只需使用以下方法::首先,开始寻找另一份工作(或者在你的经理之上的晋升,你的公司应该已经在寻找了),然后,将破碎的合并单元格版本提交给雪花,并将功能版本作为初步估计提交给你的分析师。

这是我唯一一次授权你使用合并的单元格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51867500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档