读研的木耳 · 2022级英语专业英语-法学双学士学位选拔通 ...· 4 天前 · |
大鼻子的绿豆 · 关于开展2017年“书香校园”读书征文活动的 ...· 4 月前 · |
俊秀的毛衣 · 【国漫分享】Docurro少年漫画《月舞形影 ...· 1 年前 · |
俊秀的拐杖 · 无情兵火背后的荒诞叙事——且看美国在俄乌冲突 ...· 1 年前 · |
我得到的数据是1列、2列或3列(可能更多)。我需要每一行在不丢失任何列中的任何数据的情况下合并相应行中的数据。
我设法将一些代码组合在一起,以正确地组合单元格,但我正在努力使用这些代码来查看每一行,并针对包含数据的所有行组合该行中的单元格。
这是我到目前为止所拥有的 :
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
这是我试图让它遍历每一行的结果。
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
如何正确地遍历每一行?
如果有帮助,在左侧之前,在右侧之后:
发布于 2018-08-16 07:36:59
我从来不建议合并单元格,但如果您必须...
这是按行(由
Column A
确定)和列动态设置的。每个合并大小取决于最右侧的每行非空列。因此,一些合并的单元格将跨越2列,而另一些将跨越3列。如果您不希望出现这种情况,则需要查找最大使用量的列并按该列索引进行合并
例如,将
MyCell.Resize(1, i -1).Merge
替换为
MyCell.Resize(1, MaxCol).Merge
,其中
MaxCol
是最大使用量的列。
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
发布于 2018-08-16 14:13:52
压力再大也不为过。应避免合并单元格。
当拖动一个区域来填充单元格时,它们会造成严重破坏。他们中断了双击自动填充,并让复制和粘贴成为一种沮丧的练习。它们延迟了开发,增加了公式和VBA代码的复杂性,同时创造了更多发生错误或bug未被注意到的机会。
因此,我强烈建议您重新考虑使用合并单元格。
为了证明这一点,您将在以下两个解决方案中的几行中找到“*”。这些行中的每一行都需要唯一地处理。想猜猜为什么吗?您当前在行1中的合并单元格。该合并单元格可能会导致这些行因错误而暂停,或者继续存在不希望出现的后果,具体取决于哪些单元格地址实际保存了第1行数据。
合并的单元格绝对是可怕的,被认为是Excel中最大的罪过之一。
这里有两种不合并单元格的前进方式。
在VBA中(psuedo代码)
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