一个工作薄有100多个表格,格式都是一样的。能不能提取符合要求的数据的,如果能解决的话,会加分的。
要求:
1、需要提取的数据是每个表的B-K列,提取的关键词是L列的√,将L列没有打”√“的B-K列的数据填充到数据提取的B-K列
如图1的表,一个有15组数据,符合提取的数据有11条,所以将L列没有打”√“数据提取的B-K列填充到数据提取的B-K列,如图2
2;当然,这些都是我的想法,可能是不能实现的,如果真的不可能的事,我也没什么
如果真能解决了,就最好不过
图1
图2
原件”http://pan.baidu.com/s/1pJx4XbP
有问题可以提问
ã1ãæ±åå¨åï¼æ°åå¨åé¢çæ å½¢ãå¯ä»¥ç¨MIDï¼minï¼ findä¸ä¸ªå½æ°æ¥å®ç°æåéé¢çæ°åãå¦å¾ï¼å¨B2è¾å ¥â=MID(A1ï¼MIN(FIND({0ï¼1ï¼2ï¼3ï¼4ï¼5ï¼6ï¼7ï¼8ï¼9}ï¼A1&â0123456789â))ï¼20)â
ã2 ãæåå æ ¼éé¢ææçæ°åé½æåºæ¥ãå¯ä»¥ä½¿ç¨å®ãå æå¼VBAç¼è¾å¨ãå·¥å ·ââå®ââvisual basic ç¼è¾å¨
ã3ãå¨ç¼è¾å¨éç¹å»æå ¥ââ模åãå¨æ¨¡åé£éè¾å ¥å¦ä¸ä»£ç ï¼
ããFunction zzsz(xStr As String) As StringDim i As IntegerFor i = 1 To Len(xStr)If IsNumeric(Mid(xStrï¼ iï¼ 1)) Then zzsz = zzsz & Mid(xStrï¼ iï¼ 1)NextEnd Function
ãã4ãåå°å·¥ä½è¡¨ï¼å¨B2åå æ ¼é£éè¾å ¥â=zzsz(A2)âãå°±å¯ä»¥ç¨VBAæA2åå æ ¼éææçæ°åé½æååºæ¥äºï¼å¦å¾æ示ã
ãExcelæä¹åªæåè¡¨æ ¼ä¸çæ°å
ãã5ãæå®ä»ç¬¬å 个æ°ç»æåå¼å§ãä¹å°±æ¯è¯´å¨ä¸è¿ç»çé£äºæ°åä¸ï¼ä»ç¬¬å 次åºç°çæ°ç»å¼å§æåãåæ ·å¨æ¨¡åé£éè¾å ¥å¦ä¸ä»£ç ï¼
ããFunction GetNums(rCell As Rangeï¼ num As Integer) As StringDim Arr1() As Stringï¼ Arr2() As StringDim chr As Stringï¼ Str As StringDim i As Integerï¼ j As IntegerOn Error GoTo line1
ããStr = rCell.TextFor i = 1 To Len(Str)chr = Mid(Strï¼ iï¼ 1)If (Asc(chr) ã 48 Or Asc(chr) ã 57) ThenStr = Replace(Strï¼ chrï¼ â â)End IfNext
ããArr1 = Split(Trim(Str))ReDim Arr2(UBound(Arr1))For i = 0 To UBound(Arr1)If Arr1(i) ãã ââ ThenArr2(j) = Arr1(i)j = j + 1End IfNext
ããGetNums = IIf(num ã= jï¼ Arr2(num - 1)ï¼ ââ)line1:End Function
ã6ãå¨åå°åå æ ¼é£éè¾å ¥â=Getnums(A3ï¼2)âå°±å¯ä»¥æå第å 次åºç°çæ°ç»äºï¼å¦å¾æ示ã
你好,基本可以实现了,因上传的文件和实际的有少许出入。现实的表,√在m列,将符合的要求的数据C-L列提取出来,应该怎么改
追答Sub 提取数据()附件做好的,
有问题追问
Alt +F8运行
你好,基本可以实现了,因上传的文件和实际的有少许出入。现实的表,√在m列,将符合的要求的数据C-L列提取出来,应该怎么改
追答为什么不放实际格式一致的呢?不好意思,现在上传了原文件,你帮我调试一下吧
http://pan.baidu.com/s/1hqiknha
好了
最后一问,没什么就选择你了,真的麻烦你啦
我这里有两个文件,内容差不多,就是√在所在位置不一样,
用你的代码导入我本地的,居然出错了,你帮我试一下吧,万分感谢
http://pan.baidu.com/s/1rjUsY
我自己试了一下,可以了,那个文件名能不能改为显示C1的那个值啊
Sheets("数据提取").Cells(b, "M") = i.Name
改为 :
Sheets("数据提取").Cells(b, "M") = i.range("C1")
你好,这个代码已指定了不运行的工作表,但当我运行时,还是会将整个工作薄提取,帮我看看吧,那些指定不读取的代码应该怎么表示,麻烦了
本回答被提问者采纳是的,其他的都要,前两个表是固定的名称
,不用提取
Sub test()
Dim temp, mytemp
Dim r As Long, myr As Long, rt As Long
'Dim mysheet As Sheets
For Each mysheet In ActiveWorkbook.Worksheets
r = mysheet.Range("C65536").End(xlUp).Row
If (mysheet.Name "数据提取" Or mysheet.Name "总表") And r > 4 Then
temp = mysheet.Range("C5:M" & r).Value
ReDim mytemp(1 To r - 4, 1 To 11)
myrt = 0
For rt = 1 To r - 4
If temp(rt, 11) "√" Then
myrt = myrt + 1
For c = 1 To 11
mytemp(myrt, c) = temp(rt, c)
Next c
End If
Next rt
If myrt > 0 Then
r = Sheets("数据提取").Range("C65536").End(xlUp).Row
Sheets("数据提取").Range("C" & r + 1 & ":M" & myrt + r + l) = mytemp
End If
End If
Next
End Sub
问过了,运行后,那些不符合要求的也提取了(就是全部都提取出来了)
追答你打"√" 不是在M列么,从C列到M列为共11列的嘛,如果不是就改一下列,以及相应的列号就是了!
是看到你后面的追问后修改了列号
Sub test()
Dim temp, mytemp
Dim r As Long, myr As Long, rt As Long
'Dim mysheet As Sheets
For Each mysheet In ActiveWorkbook.Worksheets
r = mysheet.Range("C65536").End(xlUp).Row
If (mysheet.Name "数据提取" Or mysheet.Name "总表") And r > 4 Then
temp = mysheet.Range("C5:M" & r).Value'M为你数据的最后列
ReDim mytemp(1 To r - 4, 1 To 11)'11为对应的列号,后面的11也相应的修改
myrt = 0
For rt = 1 To r - 4
If temp(rt, 11) "√" Then
myrt = myrt + 1
For c = 1 To 11
mytemp(myrt, c) = temp(rt, c)
Next c
End If
Next rt
If myrt > 0 Then
r = Sheets("数据提取").Range("C65536").End(xlUp).Row
Sheets("数据提取").Range("C" & r + 1 & ":M" & myrt + r + l) = mytemp
End If
End If
Next
End Sub