ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助各位大大,碰到一个format的问题,希望有人可以帮忙解答一下,谢谢!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-2-8 14:21 | 显示全部楼层 |阅读模式
各位大神,

我工作中需要用excel处理数据,最近碰到一个问题,请见下图:

A-C列是我这边原有的数据格式,但现在客户要求必须要改成E列这种格式(每句attribute对应的三行数据转变成一行数据)

需要改成2种情况:
1. 如果第三行数据没有带有颜色,只要第一行数据+(第二行数据)
2. 如果第三行数据带有颜色,需要第一行数据+(第二行数据/第三行数据)
另外还需要做一点就是:针对有颜色的数据需要加粗加下划线。

因为需要加括号斜杠之类的,我一般都是拉公式处理的。但比较头疼的是加粗和加下划线,因为公式是不支持格式的。
但我这边会碰到成千上万的个有颜色的数据需要加粗加下划线,没法手动一个个修改。

特此请教一下各位大神,有没有什么宏程序可以实现这个的?谢谢大家!

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-8 14:24 | 显示全部楼层
不好意思,刚才图片没上传成功,重新传了一下。
Text1.PNG

TA的精华主题

TA的得分主题

发表于 2018-2-12 13:09 | 显示全部楼层
这个就是两点:
1,用interior.colorindex >0 检查是否有底色;
2,  对第一格的结果进行部分加粗,用.Characters(Start:=9, Length:=1).Font;

下面代码供参考:
  1. Sub Format4U()
  2.    
  3.     Dim iRow, iColumn, il, ir As Integer
  4.     Dim str As String
  5.    
  6.     iRow = Selection.Row
  7.     iColumn = Selection.Column
  8.    
  9.     If Cells(iRow + 2, iColumn).Interior.ColorIndex > 0 Then
  10.         str = Cells(iRow, iColumn).Value & "(" & Cells(iRow + 1, iColumn) & "/" & Cells(iRow + 2, iColumn) & ")"
  11.         
  12.     Else
  13.         str = Cells(iRow, iColumn).Value & "(" & Cells(iRow + 1, iColumn) & ")"
  14.    
  15.     End If
  16.    
  17.     il = InStr(str, "(") + 1
  18.     ir = InStr(str, ")")
  19.     ActiveCell.Value = str
  20.    
  21.     Debug.Print "il=" & il & "  ir=" & ir
  22.    
  23.     With ActiveCell.Characters(Start:=il, Length:=ir - il).Font
  24.         .Name = "等线"
  25.         .FontStyle = "加粗"
  26.         .Size = 11
  27.         .Strikethrough = False
  28.         .Superscript = False
  29.         .Subscript = False
  30.         .OutlineFont = False
  31.         .Shadow = False
  32.         .Underline = xlUnderlineStyleNone
  33.         .ThemeColor = xlThemeColorLight1
  34.         .TintAndShade = 0
  35.         .ThemeFont = xlThemeFontMinor
  36.     End With

  37. End Su
复制代码


TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-20 11:58 | 显示全部楼层
seayoung 发表于 2018-2-12 13:09
这个就是两点:
1,用interior.colorindex >0 检查是否有底色;
2,  对第一格的结果进行部分加粗,用.Char ...

您好!
我想请问一下,我运行的时候出现“编译错误 语法错误”的提示,是我操作不对还是代码可能存在一些小问题?
能麻烦您这边自己试一下看看是什么问题吗,谢谢了!

TA的精华主题

TA的得分主题

发表于 2018-2-20 20:34 | 显示全部楼层
糖醋小排骨 发表于 2018-2-20 11:58
您好!
我想请问一下,我运行的时候出现“编译错误 语法错误”的提示,是我操作不对还是代码可能存在一 ...

建议楼主上传附件,结合附件举例描述问题

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-20 21:35 | 显示全部楼层
liulang0808 发表于 2018-2-20 20:34
建议楼主上传附件,结合附件举例描述问题

截图.jpg
如上图所示,

我需要把每个Attribute所属的1-3行数据并在一个单元格里(即上图E列中的最终结果)

规则共有2个:
1. 如果每个Attribute的第三行数据如果是有颜色的就需要在E列中放上去。例如,图中的attribute1的第三行数据4.6是带有绿色的,那么在E列中结果就是93(30/4.6)。而attribute 2的第三行数据4.21不带有绿色,那么在E列中就不需要放了,只用放第一行数据90和第二行数据25就可以了,即90(25)
2.所有带有颜色的数据在E列中显示的结果必须是“加粗且带有下划线

我需要找个快捷的方法做出E列中这种格式,因为平时会遇到成千上万这种的情况,那么光加粗加下划线就是一个非常庞大的工程了。

麻烦各位解答一下,谢谢大家!

TA的精华主题

TA的得分主题

发表于 2018-2-20 21:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
糖醋小排骨 发表于 2018-2-20 21:35
如上图所示,

我需要把每个Attribute所属的1-3行数据并在一个单元格里(即上图E列中的最终结果)

请楼主参考下5楼的建议

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-2-21 21:32 | 显示全部楼层
liulang0808 发表于 2018-2-20 21:38
请楼主参考下5楼的建议

您好,附件已上传。

问题描述如6楼所示,想找个快捷方法得出E列中的数据格式。

谢谢了!
工作簿1.rar (7.28 KB, 下载次数: 8)

TA的精华主题

TA的得分主题

发表于 2018-2-22 07:59 | 显示全部楼层
E列数据有的包含了C列全部值,有的不是,不清楚楼主的合并规则是什么,所以代码处理格式,

  1. Private Sub CommandButton1_Click()
  2.     Dim bFlag As Boolean, sPos, ePos, c, d As Range
  3.     Set Rng = Range([c1], [c1].End(xlDown))
  4.     For i = Rng.Cells.Count To 2 Step -1
  5.         bFlag = False
  6.         Set c = Rng.Cells(i)
  7.         Set d = c.Offset(0, 2)
  8.         If d.Value = "" Then
  9.             Set d = d.End(xlUp)
  10.             bFlag = True
  11.         End If
  12.         If c.Interior.ColorIndex > 0 Then
  13.             sPos = VBA.InStr(1, d.Value, c.Value)
  14.             lth = Len(c.Value)
  15.             If c.Offset(-1, 0).Interior.ColorIndex > 0 Then
  16.                 sPos = sPos - 1: lth = lth + 1
  17.             End If
  18.             If sPos > 0 Then
  19.                 With d.Characters(sPos, lth).Font
  20.                     .Bold = True
  21.                     .Underline = True
  22.                 End With
  23.             End If
  24.         End If
  25.     Next
  26. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2018-2-22 08:23 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
  1. Sub 按钮1_Click()
  2.     Application.ScreenUpdating = False
  3.     For j = 1 To Cells(Rows.Count, 3).End(3).Row Step 3
  4.         If Cells(j, 1) <> "" Then
  5.             str1 = Cells(j, 3)

  6.             If Cells(j + 2, 3).Interior.ColorIndex = 43 Then
  7.                 str1 = str1 & "(" & Cells(j + 1, 3) & "/" & Cells(j + 2, 3) & ")"
  8.             Else
  9.                 str1 = str1 & "(" & Cells(j + 1, 3) & ")"
  10.             End If
  11.             Cells(j, 7) = str1
  12.         End If
  13.     Next j
  14.     Application.ScreenUpdating = True
  15. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-26 12:28 , Processed in 0.036403 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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