D列的数据如图中的四种情况:第1种最常见,两个数据分列在*二边、第2种情况三个数据分列在二个*旁边、第列种情况,只有1个数据,没有*、第4种情况,文字没有*。分列的效果请看图。要求VBA代码可以修改,易懂
您的代码不错,可以运行。而且基本符合了我的要求,但是,我需要的是一个自动运行的代码,也就是在D列输入数据,在I列、J列、K列自动输入分列的数值,并且分列的数据不允许超过3列。否则我下面一列的数据就被改了
追答原来楼主需要自动运行的,要早说呀。
我改好了,不但支持手工的单个输入,而且支持整列的复制与删除等批量操作,关键是运行效率还很高。
其实要做到上面这些,还真算是有点高技术,是否可以提高点悬赏分呀?哈哈.....
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tmpStr As String, s As String, i As Integer, m As Range
Dim x As Long, y As Long, subStr As String, num As Integer
On Error GoTo Err
For Each m In Target '因为可能存在批量输入与Copy
y = m.Row()
If y > Range("A1").SpecialCells(xlLastCell).Row() _
Then Exit For '确保所处理的单元格是有效单元格。提高效率
If m.Column() = 4 Then '如果是在D列输入数据的话
Application.EnableEvents = False
num = 0 '计数,确保只拆分最多三个数据
x = 9 '固定从第9列开始输出(I列),=m.Column()就从当前列输出
Range(Cells(y, x), Cells(y, x + 2)).ClearContents '先清除目标单元格数据
tmpStr = m.Value
subStr = ""
For i = 1 To Len(tmpStr)
s = Mid(tmpStr, i, 1)
If s = "*" Then '*表示子串结束
num = num + 1
Cells(y, x).Value = subStr
subStr = ""
x = x + 1
ElseIf s "*" Then '新子串开始或进行中
subStr = subStr & s
End If
If num = 3 Then Exit For '拆出3个后,不再继续拆
Next i
If subStr "" Then Cells(y, x).Value = subStr
End If
Next m
Err:
Application.EnableEvents = True
End Sub
注:
1、万一出现意外,导致输入数据时不再自动拆分,请完全退出Excel后再重新启动Excel,就会恢复自动了。
2、这段代码所放置的位置不是在模块中,而是在工作表的代码区里。楼主应该懂的 ^-^
有疑问,请Hi我或给我发百度消息
GoodLuck!
Excel表格中求数据分列的VBA代码,请将D列的数据分列在I列、J列、K列
Sub 按星号分列()'以*为分隔符,连续*只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String, i As Integer Dim x As Long, y As Long, subStr As String If Selection.Columns.Count > 1 Then MsgBox "所选择的数据只能是一列!请重新选择后执行!", vb...
Excel VBA代码表示工作表中指定的列进行分裂
步骤一:选择A列数据区域,数据>>>分列,选择“分隔符号">>>下一步 步骤二:在”其他“框中输入=号,再单击”下一步“,如下图 步骤三:选择第一列,点击”不导入此列(跳过),再选择最后 列,点击”不导入此列(跳过),“目标区域”改为=$F$1 分列后结果如下 步骤四:选择F:G列,按Ct...
实现分列的两段excelvba分列代码
oJs.eval "function gets(str){return str.replace(\/(\\d+)\/,’ $1 ‘)}"For Each rng In Range("A2", [A65536].End(3))rng(1, 2).Resize(1, 3) = Split(oJs.codeobject.gets(rng.Value), " ")Next End Sub 第二段excel vba 分列的代码:Sub vba分列()Dim arr, i%, brr(...
如何在VBA中编程对EXCEL中数据进行分列
Sub 分列()Sheets("数据").Select'激活“数据”工作表Selection.ClearContents'清除“数据”表中,当前选中区域的内容Range("B3").Select'选中B3单元格ActiveSheet.Paste'粘贴ActiveSheet.Paste'粘贴Sheets("统计").Select'激活“统计”工作表End Sub你的代码里根本没有分列啊~...
EXCEL,怎么把用vba获取到的多个数据隔开?
我们把这些数据先拷贝到excel中的第一行第一列上,如图所示:03 然后,我们全部选中拷贝进来的数据,找到【数据】菜单栏下面的子菜单【分列】,如图所示 04 接着,打开【分列】菜单,会弹出一个对话框,在“原始数据类型”下面选择最合适的文件类型,这里我们选中“分隔符号(D)”,在下面可以看到预览...
如何在VB中编程对EXCEL中数据进行分列
Sub 分列()'以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请确定分列的数据会覆盖它后面的单元格!", _vbYesNoCancel + vbQuestion) <> ...
如何在VB中编程对EXCEL中数据进行分列
一、对于第1、3两个问题,我写的这个宏可以完美解决,代码如下:Sub 分列() '以空格为分隔符,连续空格只算1个。对所选中的单元格进行处理 Dim m As Range, tmpStr As String, s As String Dim x As Integer, y As Integer, subStr As String If MsgBox("确定要分列处理吗?请...
EXCEL用VBA数组将指定的字符串列成多列,如图,请帮忙解答,谢谢。
代码 如下:sub 拆分()dim brr(1 to 1000,1 to 3)arr=[a1].currentregion for i=1 to ubound(arr) for j=0 to 2 brr(i,j)=split(arr(i,1),"^")(j) next next[d1].resize(i,3)=brrend Sub
excel中怎么用函数或者宏批量将一个列中的数据按要求分成很多行?_百度...
Longlastrow = Cells(Rows.Count, 1).End(3).Rowi = 1k = 1Do While i <= lastrow Cells(k, 2) = Cells(i, 1) Cells(k, 3) = Cells(i + 1, 1) Cells(k, 4) = Cells(i + 2, 1) '分n列则做n次 i = i + 3 '下移n行 k = k + 1LoopEnd...
EXCEL中,我想用VBA代码实现 E列\/ F列\/ G列\/H列I列数据有条件输入,我...
= Cells(H - 1, LL)Next Else 编号 = Val(Cells(H - 1, 2))For I = 1 To 5 - Len(LTrim(Str$(编号)))订单编号 = 订单编号 + "0"Next 订单编号 = 订单编号 + LTrim(Str$(编号 + 1))Cells(H, 2) = 订单编号 Cells(H, 4) = Now End If End If End If End Sub ...