【发布时间】:2018-05-21 18:14:56
【问题描述】:
【问题讨论】:
-
那么你尝试了什么?
-
你在问什么?
-
@ScottCraner 更新了我的帖子。
-
公式不会这样做,您需要 vba 代码。
【问题讨论】:
Sub G()
Dim x&, start&, bottom&
Application.DisplayAlerts = False
'// Start from row two
'// In your sample it's value "Text1"
x = 2
While Not IsEmpty(Cells(x, 1))
'// "start" designates the start row with new text (see below)
start = x
'// As soon as we defined start row with new text, it's time to define the last row.
'// Cells(x, 1) - is new text value
'// SearchDirection:=xlPrevious means that search must be done from bottom of sought range
'// This also means that no extra data must be under your data.
'// So, this way we can get to know full range.
'// For single distinct value the start and bottom will be the same row.
bottom = Range("A:A").Find(Cells(x, 1), SearchDirection:=xlPrevious).Row
'// Having start and bottom rows,
'// we can get full range with new text by using Resize property.
'// It sets new number of rows and columns having top-left cell as a start point.
Cells(start, 1).Resize(bottom - start + 1).Merge
'// The next cell after bottom cell is new value.
x = bottom + 1
Wend
Application.DisplayAlerts = True
End Sub
【讨论】:
A 列中的数据是。 :) 我会指出“中间文本”。
Find。我不会想到这一点,我会使用Application.Countif。你的会更快。
Find 必须谨慎使用。需要确保不会出现任何间隙或额外数据。:)