多行把不同单元格内容合并如何整理合并成一行

EXCEL表中多行内容怎么合并单元格?_百度知道excel里如何把多行数据合并成一行?
类似于这个3行合并为一行!!我要实现的是每40行合并为一行。数据大概有40000行
假如数据源全部为文本,在B1输入公式=PHONETIC(OFFSET($A$1,40*(ROW()-1),,40))
简单粗暴点,一列复制下来(N行),打开电脑记事本粘贴进去,再复制回EXCEL(点击鼠标进入单元格后再粘贴文字进去)。缺点是,一列要操作一次###突然间搜到,就顺便回答了一下,哈哈,好久之前的问题了呢
没脸见人了,题干没看清楚,每40行合并为一行。每。还是需要公式的。有位点赞的兄台。。。羞煞我也。。。。。。---------------------------更新的分割线------------------------------------------各位的回答都很专业,公式用的很牛不过,活儿赶得紧,时间少得已经来不及仔细阅读+学习各位大神的答案的话。。。或者有些人是
完全看不懂公式是怎么回事儿星人 的话,试试我这个:复制这一列数据打开word,粘贴在word中,用替换功能将换行符、段落标记等等符号替换掉复制替换后的文字返回Excel,到你的目标单元格粘贴点击保存按钮,嗯。请叫我雷锋。给我点个赞。
用VBA一个FOR循环就可以搞定j = 1For i = 1 To 100000
Sheets("xxx").Cells(i,2) = Sheets("xxx").Cells(i*j,1)&Sheets("xxx").Cells(i*j+1,1)&Sheets("xxx").Cells(i*j+2,1)j = j + 1next i
很简单b1单元格内输入如下内容=a1&a2&a340行也是同样的原理,只不过数据比较多。=INDIRECT("a"&ROW()*40-39)&INDIRECT("a"&ROW()*40-38)&INDIRECT("a"&ROW()*40-37)&INDIRECT("a"&ROW()*40-36)&INDIRECT("a"&ROW()*40-35)&INDIRECT("a"&ROW()*40-34)&INDIRECT("a"&ROW()*40-33)&INDIRECT("a"&ROW()*40-32)&INDIRECT("a"&ROW()*40-31)&INDIRECT("a"&ROW()*40-30)&INDIRECT("a"&ROW()*40-29)&INDIRECT("a"&ROW()*40-28)&INDIRECT("a"&ROW()*40-27)&INDIRECT("a"&ROW()*40-26)&INDIRECT("a"&ROW()*40-25)&INDIRECT("a"&ROW()*40-24)&INDIRECT("a"&ROW()*40-23)&INDIRECT("a"&ROW()*40-22)&INDIRECT("a"&ROW()*40-21)&INDIRECT("a"&ROW()*40-20)&INDIRECT("a"&ROW()*40-19)&INDIRECT("a"&ROW()*40-18)&INDIRECT("a"&ROW()*40-17)&INDIRECT("a"&ROW()*40-16)&INDIRECT("a"&ROW()*40-15)&INDIRECT("a"&ROW()*40-14)&INDIRECT("a"&ROW()*40-13)&INDIRECT("a"&ROW()*40-12)&INDIRECT("a"&ROW()*40-11)&INDIRECT("a"&ROW()*40-10)&INDIRECT("a"&ROW()*40-9)&INDIRECT("a"&ROW()*40-8)&INDIRECT("a"&ROW()*40-7)&INDIRECT("a"&ROW()*40-6)&INDIRECT("a"&ROW()*40-5)&INDIRECT("a"&ROW()*40-4)&INDIRECT("a"&ROW()*40-3)&INDIRECT("a"&ROW()*40-2)&INDIRECT("a"&ROW()*40-1)&INDIRECT("a"&ROW()*40)
补充一种情况,当同一列3行数据一样,我们想合并成一个数据显示,但又不能影响每个单元格数据的使用?1.选中空白的三行一列单元格,合并居中2.点击格式刷3.选中要合并的三行一列数据大功告成!
谢谢的提示,我在翻找公式时找到了类似的函数:=TEXTJOIN(",",,OFFSET($E$1,40*(ROW()-1),,40))
这样就能把多行合并成一行,且指定分隔符。
其实也可以使用连环嵌套函数,如图
如果数据有标题,每40个合成一个,可以在B2格输入=A2,在B3格输入=B2&A3。然后把B3格的公式往下一直拖到B41格。选择B2:B41,然后鼠标移到区域右下角,当鼠标变为实心十字时双击。在C41格输入一个字符1,选择C2:C41,然后鼠标移到区域右下角,当鼠标变为实心十字时双击。筛选C列非空。
已有帐号?
无法登录?
社交帐号登录GitHub项目地址:
使用GridView展示数据,经常会遇到合并单元格的情况。首先说明一下项目中合并单元格的要求,如下图所示,左边是合并之前的GridView,右边是合并之后的GridView。从图中可以看到GridView一共有&等级&、&颜色&,&箱子&,&净重&,&规格&,&汇总&6列,首先要要合并等级,如右图中合并后的&一级&,然后再合并每个等级下面的颜色,如右图中合并后的&一级&下面的&片红&和&条红&,依次类推。
从网上搜索了一下&GridView合并单元格&,大多是合并单列,诸如此类。搜索未果,只能自己动手写一个了。参考现有的合并单列的代码,我完成了满足上面合并要求的代码,自我感觉算法很烂,写这篇文章也是希望有经验的园友提供更好的解决方法。
首先,完成合并单列的行,代码如下:
/// &summary&
/// 合并单列的行
/// &/summary&
/// &param name="gv"&GridView&/param&
/// &param name="currentCol"&当前列&/param&
/// &param name="startRow"&开始合并的行索引&/param&
/// &param name="endRow"&结束合并的行索引&/param&
private static void MergeRow(GridView gv, int currentCol, int startRow, int endRow)
for (int rowIndex = endR rowIndex &= startR rowIndex--)
GridViewRow currentRow = gv.Rows[rowIndex];
GridViewRow prevRow = gv.Rows[rowIndex + 1];
if (currentRow.Cells[currentCol].Text != "" && currentRow.Cells[currentCol].Text != " ")
if (currentRow.Cells[currentCol].Text == prevRow.Cells[currentCol].Text)
currentRow.Cells[currentCol].RowSpan = prevRow.Cells[currentCol].RowSpan & 1 ? 2 : prevRow.Cells[currentCol].RowSpan + 1;
prevRow.Cells[currentCol].Visible = false;
在合并后面的列之前,首先要遍历前一列。上面的例子中,合并第二列,首先要遍历第一列,以便得到一级是从第几行到第几行。开始写遍历前一列的代码之前,首先定义一个类,如下所示:
class RowArg
public int StartRowIndex { }
public int EndRowIndex { }
该类有两个属性,分别表示要合并的开始行的索引和结束行的索引。下面是遍历前一列的代码:
/// &summary&
/// 遍历前一列
/// &/summary&
/// &param name="gv"&GridView&/param&
/// &param name="prevCol"&当前列的前一列&/param&
/// &param name="list"&&/param&
private static void TraversesPrevCol(GridView gv, int prevCol, List&RowArg& list)
if (list == null)
list = new List&RowArg&();
RowArg ra = null;
for (int i = 0; i & gv.Rows.C i++)
if (!gv.Rows[i].Cells[prevCol].Visible)
ra = new RowArg();
ra.StartRowIndex = gv.Rows[i].RowI
ra.EndRowIndex = ra.StartRowIndex + gv.Rows[i].Cells[prevCol].RowSpan - 2;
list.Add(ra);
下面完成最后一个方法,代码如下:
/// &summary&
/// GridView合并行,
/// &/summary&
/// &param name="gv"&GridView&/param&
/// &param name="startCol"&开始列&/param&
/// &param name="endCol"&结束列&/param&
public static void MergeRow(GridView gv, int startCol, int endCol)
RowArg init = new RowArg()
StartRowIndex = 0,
EndRowIndex = gv.Rows.Count - 2
for (int i = startC i & endCol + 1; i++)
if (i & 0)
List&RowArg& list = new List&RowArg&();
//从第二列开始就要遍历前一列
TraversesPrevCol(gv, i - 1, list);
foreach (var item in list)
MergeRow(gv, i, item.StartRowIndex, item.EndRowIndex);
//合并开始列的行
MergeRow(gv, i, init.StartRowIndex, init.EndRowIndex);
这个方法是最后在程序中调用的方法。
最后写个简单的例子:
页面代码:
&asp:GridView ID="Gridview1" runat="server" AutoGenerateColumns="false"
onrowdatabound="Gridview1_RowDataBound"&
&asp:BoundField DataField="Name" HeaderText="姓名" /&
&asp:BoundField DataField="Item" HeaderText="工资项" /&
&asp:BoundField DataField="SubItem" HeaderText="工资子项" /&
&asp:BoundField DataField="Month" HeaderText="月份" /&
&asp:BoundField DataField="Money" HeaderText="钱数" /&
&/Columns&
&/asp:GridView&
后台代码:
1: public partial class WebForm1 : System.Web.UI.Page
protected void Page_Load(object sender, EventArgs e)
if (!Page.IsPostBack)
#region 模拟数据
List&Salary& salaryList = new List&Salary&();
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "基本工资",
Month = "1月",
Money = "3000"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "奖金",
Month = "1月",
Money = "500"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "奖金",
Month = "1月",
Money = "130"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "奖金",
Month = "1月",
Money = "150"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "加班",
Month = "1月",
Money = "100"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "加班",
Month = "1月",
Money = "100"
salaryList.Add(new Salary()
Name = "张三",
Item = "五险一金",
SubItem = "医疗保险",
Month = "1月",
Money = "500"
salaryList.Add(new Salary()
Name = "张三",
Item = "五险一金",
SubItem = "住房公积金",
Month = "1月",
Money = "370"
salaryList.Add(new Salary()
Name = "",
Item = "",
SubItem = "",
Month = "合计",
Money = "3500"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "基本工资",
Month = "2月",
Money = "3000"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "奖金",
Month = "2月",
Money = "400"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "奖金",
Month = "2月",
Money = "100"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "加班",
Month = "2月",
Money = "100"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "加班",
Month = "2月",
Money = "100"
salaryList.Add(new Salary()
Name = "张三",
Item = "应发工资",
SubItem = "加班",
Month = "2月",
Money = "100"
salaryList.Add(new Salary()
Name = "张三",
Item = "五险一金",
SubItem = "医疗保险",
Month = "2月",
Money = "500"
salaryList.Add(new Salary()
Name = "张三",
Item = "五险一金",
SubItem = "住房公积金",
Month = "2月",
Money = "370"
salaryList.Add(new Salary()
Name = "",
Item = "",
SubItem = "",
Month = "合计",
Money = "3900"
//----------------------------------------
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "基本工资",
Month = "1月",
Money = "3000"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "奖金",
Month = "1月",
Money = "500"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "奖金",
Month = "1月",
Money = "130"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "奖金",
Month = "1月",
Money = "150"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "加班",
Month = "1月",
Money = "100"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "加班",
Month = "1月",
Money = "100"
salaryList.Add(new Salary()
Name = "李四",
Item = "五险一金",
SubItem = "医疗保险",
Month = "1月",
Money = "500"
salaryList.Add(new Salary()
Name = "李四",
Item = "五险一金",
SubItem = "住房公积金",
Month = "1月",
Money = "370"
salaryList.Add(new Salary()
Name = "",
Item = "",
SubItem = "",
Month = "合计",
Money = "3500"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "基本工资",
Month = "2月",
Money = "3000"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "奖金",
Month = "2月",
Money = "400"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "奖金",
Month = "2月",
Money = "100"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "加班",
Month = "2月",
Money = "100"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "加班",
Month = "2月",
Money = "100"
salaryList.Add(new Salary()
Name = "李四",
Item = "应发工资",
SubItem = "加班",
Month = "2月",
Money = "100"
salaryList.Add(new Salary()
Name = "李四",
Item = "五险一金",
SubItem = "医疗保险",
Month = "2月",
Money = "500"
salaryList.Add(new Salary()
Name = "李四",
Item = "五险一金",
SubItem = "住房公积金",
Month = "2月",
Money = "370"
salaryList.Add(new Salary()
Name = "",
Item = "",
SubItem = "",
Month = "合计",
Money = "3900"
//-------------------------------------------
#endregion
Gridview1.DataSource = salaryL
Gridview1.DataBind();
MergeGridViewCell.MergeRow(Gridview1, 0, 3);
protected void Gridview1_RowDataBound(object sender, GridViewRowEventArgs e)
if (e.Row.RowType == DataControlRowType.Header)
e.Row.BackColor = Color.FromArgb(135, 206, 250);
if (e.Row.RowType == DataControlRowType.DataRow)
if (e.Row.Cells[3].Text == "合计")
e.Row.BackColor = Color.FromArgb(176, 226, 255);
e.Row.Cells[0].ColumnSpan = 4;
e.Row.Cells[0].Text = "合计";
e.Row.Cells[1].Visible = e.Row.Cells[2].Visible = e.Row.Cells[3].Visible = false;
325: public class Salary
/// &summary&
/// &/summary&
public string Name { }
/// &summary&
/// 工资项
/// &/summary&
public string Item { }
/// &summary&
/// 工资子项
/// &/summary&
public string SubItem { }
/// &summary&
/// &/summary&
public string Month { }
/// &summary&
/// &/summary&
public string Money { }
GridView运行前后比较:
GitHub项目地址:
阅读(...) 评论()查看: 6690|回复: 5
注册时间金币177 积分956威望2543
LV.6, 积分 956, 距离下一级还需 244 积分
签到天数: 175 天[LV.7]常住居民III金币177 威望2543 帖子精华0
如何将中多行文字合并成一行
注册时间金币18 积分61威望132
LV.2, 积分 61, 距离下一级还需 39 积分
签到天数: 9 天[LV.3]偶尔看看II金币18 威望132 帖子精华0
在需要显示的区域输入函数=phonetic(选择需要合并的文字区域),再按回车,就可以了。函数是提取字符串函数~~~
&赞同: 5 有发现一个潜力大咖~&
&赞同: 5 &
注册时间金币2784 积分4991威望10941
签到天数: 1 天[LV.1]初来乍到金币2784 威望10941 帖子精华0
紫贝壳loving 发表于
在需要显示的区域输入函数=phonetic(选择需要合并的文字区域),再按回车,就可以了。函数是提取字符串函数~ ...
又学一招。高手!
注册时间金币18 积分61威望132
LV.2, 积分 61, 距离下一级还需 39 积分
签到天数: 9 天[LV.3]偶尔看看II金币18 威望132 帖子精华0
quelea 发表于
又学一招。高手!
那你送我点金币,可好
金币怎么送不知道。威望可以,在评分中送。.
总评分:&威望 + 10&
注册时间金币177 积分956威望2543
LV.6, 积分 956, 距离下一级还需 244 积分
签到天数: 175 天[LV.7]常住居民III金币177 威望2543 帖子精华0
紫贝壳loving 发表于
18:57 [url=forum.php?mod=redirect&goto=findpost&pid=&ptid=][/url]
在需要显示的区域输入函数=phonetic(选择需要合并的文字区域),再按回车,就可以了。函数是提取字符串函数~ ...非常感谢您的解答,按照您的方法可以快捷的完成多行内容的合并。您是高手,今天又学了一招,谢谢!
注册时间金币2 积分1威望1
LV.1, 积分 1, 距离下一级还需 49 积分
该用户从未签到金币2 威望1 帖子精华0
紫贝壳loving 发表于
在需要显示的区域输入函数=phonetic(选择需要合并的文字区域),再按回车,就可以了。函数是提取字符串函数~ ...
如果我要把四个单元格的内容合并到第一个单元格,怎样将第一个单元格的内容保留呢
技术分享团
申请前请查看 /thread--1.html
解答支持团
申请前请查看 /thread--1.html
测试体验团
申请前请查看 /thread--1.html
优秀会员奖
论坛金币满500且在线时间达到100小时的S党可领取!
活跃会员奖
发帖数达到2000以上且在线时间超过200个小时可领取!
乐于助人奖
在问答求助区积极帮助S党解答问题
技巧教程分享达人
技巧教程分享达到10篇以上
Powered by

我要回帖

更多关于 把不同单元格内容合并 的文章

 

随机推荐