ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3126|回复: 9

同字符按列排列改成按行排列

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-1-20 12:23 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
JfM0xPLi.rar (4.86 KB, 下载次数: 12) 案 案 案 案 案 案 案 案 案 把 把 边 表 表 部 查 查 次 挡 档 档 到 到 到 的 第 第 定 方 方 方 方 方 方 方 方 方 方 方 方 方 放 放 该 变成: 案案案案案案案案案9 把把2 边1 表表2 部1 查查2 次1 挡档档3 到到到4 的5 第第2 定1 方方方方方方方方方方方方方13 放放2 该1 怎么办???

TA的精华主题

TA的得分主题

发表于 2006-1-20 12:56 | 显示全部楼层

思路:

先将所有的回车即段落符去掉,然后将任意只要是不同字之间加上一个段落回车,再将每个字后面加上一个制表符,然后再将它们变成表格,最右边加上一列,用Word的表统计计数一下即可。注意批量填充计数的域代码。

其实后几步送到Excel中可能要方便些。

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-20 13:29 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
然后将任意只要是不同字之间加上一个段落回车, ——————关键是这一步,不知道怎么办,还请高手赐教!

TA的精华主题

TA的得分主题

发表于 2006-1-20 15:32 | 显示全部楼层

试试这个宏:

Sub 孤独二叶()
Dim a%, b%, apa As Paragraph
On Error Resume Next
b = ActiveDocument.Characters.Count

With ActiveDocument.Content.Find
.Execute FindText:="^p", ReplaceWith:="", Replace:=wdReplaceAll
End With
For a = 1 To b
If ActiveDocument.Characters(a) = ActiveDocument.Characters(a + 1) _
And ActiveDocument.Characters(a) <> Chr(13) And ActiveDocument.Characters(a + 1) <> Chr(13) Then

Else
ActiveDocument.Characters(a).Font.Color = wdColorBlue
End If
Next
With ActiveDocument.Content.Find
.ClearFormatting '清除格式设置
.MatchWildcards = True
.Font.Color = wdColorBlue
With .Replacement '替换条件
.ClearFormatting '清除格式设置
.Font.Color = wdColorBlack
End With
.Execute FindText:="([!一])", ReplaceWith:="\1^p", Format:=True, _
Replace:=wdReplaceAll '是格式替换,全部替换
End With
For Each apa In ActiveDocument.Paragraphs
apa.Range.Characters(Len(apa.Range.Text) - 1).InsertAfter Len(apa.Range.Text) - 1
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2006-1-20 17:09 | 显示全部楼层

我也试着做了一个,请楼主测试一下 Option Explicit Sub Example() Dim i As Range, acharCount As Integer, myRange As Range On Error GoTo E Application.ScreenUpdating = False With ActiveDocument With .Content.Find .Execute FindText:="^p", ReplaceWith:="", Replace:=wdReplaceAll End With Set myRange = .Content Again: acharCount = 1 For Each i In myRange.Characters If i.Next.Text = i.Text Then acharCount = acharCount + 1 Else i.InsertAfter acharCount & Chr(13) Set myRange = .Range(i.Next(2).Start, .Content.End) GoTo Again End If Next End With E: Application.ScreenUpdating = True End Sub

[此贴子已经被作者于2006-1-20 17:12:07编辑过]

TA的精华主题

TA的得分主题

发表于 2006-1-20 17:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

老大的利害,[em17][em17]

请教:Range(i.Next(2).Start,

中的2是什么意思?

当初,当快想到这这个方法(在Characters
中循环),但一开始开始定值的话,与后来的动值就不对了,所就卡住了,改成现在这个很笨的方法。

老大,利用这个反复缩小(也在改变)范围的方法真是不错,但记得哪位版主说:(excel开发版的)结构化编程是不用goto的?

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-20 18:58 | 显示全部楼层

谢谢诸位![em17][em17][em17]

慢慢学习.

老大最简洁!

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-20 19:06 | 显示全部楼层

俺也琢磨了一个,但是不能完成频率统计.请指教.

sub初学()

Selection.HomeKey Unit:=wdStory '光标回到最开始

Dim a As String, b As String

Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend

Selection.Copy

a = Selection.text

Selection.MoveRight Unit:=wdCharacter, Count:=1

Do

Selection.MoveRight Unit:=wdCharacter, Count:=1, Extend:=wdExtend

Selection.Copy

b = Selection.text

If a <> b Then

' Selection.MoveRight Unit:=wdCharacter, Count:=1

' Selection.TypeParagraph

' Else

Selection.MoveLeft Unit:=wdCharacter, Count:=1

Selection.TypeParagraph ' 插入回车符

Else

Selection.MoveRight Unit:=wdCharacter, Count:=1

End If

a = b

Loop Until b = "" '调处循环的设置很笨,是人为在最后加一个字,请修改

end sub()

TA的精华主题

TA的得分主题

发表于 2006-1-20 19:31 | 显示全部楼层

TO KONGGS,你翻一下帮助文件吧,比我说得更好一些。另请加强对RANGE对象深入理解。

我做了一个夹生的,希望对大家有所启迪:

先查找:"^p",替换为""(无),全部替换,即删除所有段落标记

再CTRL+A,CTRL+H,勾选通配符

查找:"([一-龥])@",替换为"^&^p",全部替换.

运行以下宏:

Option Explicit
Sub Sample()
Dim i As Paragraph, myRange As Range
Application.ScreenUpdating = False
For Each i In ActiveDocument.Paragraphs
Set myRange = i.Range
With myRange
.SetRange .Start, .End - 1
If .Text <> "" Then
.InsertAfter Text:=.End - .Start
End If
End With
Next
Application.ScreenUpdating = True
End Sub
当然,我们完全可以将查找与替换融入这个代码中,我就不写了.

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-1-20 22:16 | 显示全部楼层
感谢守柔,虽不全懂,但看得很有味道!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-16 05:28 , Processed in 0.043078 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表