如何连接单元格值,直到在Excel中找到空白,然后在段落的第一行返回结果?
我有一个列,在不同的行中拆分了断开的段落,需要将段落连接到段落第一行的单个段落中 我想要这个:如何连接单元格值,直到在Excel中找到空白,然后在段落的第一行返回结果?,excel,vba,string,concatenation,Excel,Vba,String,Concatenation,我有一个列,在不同的行中拆分了断开的段落,需要将段落连接到段落第一行的单个段落中 我想要这个: Column1 | Column2 The weather is | The weather is good today, how are you? good today, how | are you? | | I'm fine, | I'm fine, thank you. thank you.
Column1 | Column2
The weather is | The weather is good today, how are you?
good today, how |
are you? |
|
I'm fine, | I'm fine, thank you.
thank you. |
|
|
|
There were | There were 3 empty rows in Column 1 just before this paragraph. And should have 4 rows using after the macro.
3 empty rows in |
Column1 just |
before this |
paragraph. And |
should have 4 |
rows after |
using the macro. |
|
|
More text. | More text.
我尝试过多个宏,例如
和
但是他们返回的结果没有与原始行对齐。(以下是第一个宏,它们删除了每个段落后的一个空行,而完全忽略了连续的空行)
是否有方法将字符串连接到空白单元格,然后返回断开段落第一行单元格上的输出?要输出与段落对齐的内容,请跟踪段落的起始位置 像这样的
子演示()
将ws设置为工作表
变暗rng As范围
Dim dat作为变量
作为变量的模糊结果
变暗rw为长
变暗和变暗一样长
Dim InPara为布尔型
像弦一样的暗句
设置ws=ActiveSheet
与ws
设置rng=.Range(.Cells(.Rows.Count,1),.Cells(2,1))
如果rng.Row=1,则退出Sub
dat=rng.Value2
以
重拨结果(1到UBound(dat,1),1到1)
InPara=假
对于rw=1至UBound(dat,1)
如果不是InPara和Trim$(dat(rw,1))vbNullString,则
InPara=真
rwOut=rw
ElseIf InPara和Trim(dat(rw,1))=vbNullString Then
InPara=假
结果(rwOut,1)=语句
Sentance=vbNullString
如果结束
如果在帕拉那么
Sentance=Sentance&“和修剪(dat(rw,1))
如果结束
下一个
平均偏移量(,1)=结果
端接头
分段
- 调整常量部分中的值
选项显式
分段
'定义常量。
Const sName As String=“Sheet1”
Const sFirst As String=“A2”
Const dName As String=“Sheet1”
Const dFirst As String=“B2”
Const dDelim As String=“”
'创建对工作簿的引用。
将wb设置为工作簿:设置wb=ThisWorkbook包含此代码的工作簿
'创建对目标列范围的第一个单元格的引用。
Dim dCell As Range:设置dCell=wb.工作表(dName).Range(dFirst)
'创建对源列范围的引用。
变暗srg As范围
Dim作为布尔值不是空的
带wb.工作表(sName).范围(sFirst)
'尝试查找最后一个非空单元格。
暗淡的lCell As范围
设置lCell=.Resize(.Worksheet.Rows.Count-.Row+1)_
.Find(“*”,xlFormulas,,xlPrevious)
'验证最后一个非空单元格。
如果不是lCell,那就什么都不是了
设置srg=.Resize(lCell.Row-.Row+1)
isNotEmpty=True
如果结束
以
'将结果写入目标列范围。
暗计数等于长
如果不是空的话
'将源列范围中的值写入源数组。
rCount=srg.Rows.Count
作为变体的Dim-sData
如果rCount=1,则
ReDim sData(1对1,1对1):sData(1,1)=srg.值
其他的
sData=srg.值
如果结束
'创建目标阵列。
Dim dData()作为字符串:ReDim dData(1到rCount,1到1)
'声明其他变量。
Dim S字符串作为字符串,dString作为字符串
变暗sr一样长,dr一样长
Dim不写为布尔值
'通过源数组的每个元素(行)循环。。。
' ... 并将结果写入目标数组。
对于sr=1到rCount
sString=CStr(sData(sr,1))'Trim(…)或Application.Trim(…)
如果Len(sString)>0,则
如果没有写的话
dString=dString&dDelim&sString
其他的
dString=sString
dr=sr
isnotwrited=True
如果结束
其他的
如果没有写的话
dData(dr,1)=dString
isnotwrited=False
如果结束
如果结束
下一个sr
'写入最后一个目标字符串(到目标数组)。
dData(dr,1)=dString
'从目标数组写入值
'返回到目标列范围。
dCell.Resize(rCount).Value=dData
如果结束
'清除目标列范围下的内容
“(“是否有数据”)。
与dCell
.Resize(.Worksheet.Rows.Count-.Row-rCount+1)_
.偏移量(rCount).清除内容
以
端接头
编辑:
- 以下是
(仅一张工作表)的修改版本,包括一个自动ActiveSheet
(不是Trim
),它将删除前导空格和尾随空格,但可能会保留完整的连续空格Application.Trim
子段落活动表()
'定义常量。
Const sFirst As String=“A2”
Const dFirst As String=“B2”
Const dDelim As String=“”
'创建对目标列范围的第一个单元格的引用。
将dCell设置为范围:设置dCell=ActiveSheet.Range(dFirst)
'创建对源列范围的引用。
变暗srg As范围
Dim作为布尔值不是空的
使用ActiveSheet.Range(sFirst)
'尝试查找最后一个非空单元格。
暗淡的lCell As范围
设置lCell=.Resize(.Worksheet.Rows.Count-.Row+1)_
.Find(“*”,xlFormulas,,xlPrevious)
'验证最后一个非空单元格。
如果不是lCell,那就什么都不是了
设置srg=.Resize(lCell.Row-.Row+1)
isNotEmpty=True
如果结束
EN
Column1 | Column2
The weather is | The weather is good today, how are you?
good today, how | I'm fine, thank you.
are you? |
|
I'm fine, | There were 3 empty rows in Column 1 just before this paragraph. And should have 4 rows using after the macro.
thank you. |
| More text.
|
|
There were |
3 empty rows in |
Column1 just |
before this |
paragraph. And |
should have 4 |
rows after |
using the macro. |
|
|
More text. |