怎么从excel提取出单元格内的内容

{"18375":"only fit 2008 year"},{"18396":"only fit 2008 year"},{"19489":"only fit 2008-2009 year"},{"19826":"only fit 2008 year"},{"18407":"only fit 2008 year"},30993,26836,{"26556":"only fit 2008 year"},{"25455":"only fit 2008-2012 year"}用公式提取出18375 18396 19489 19826 18407 30993 26836 26556 25455,最好得出的数值,每个都分别占一个单元格

楼主想要的功能,可以使用VBA程序代码实现。(当然,如果不是大量的数据处理,写VBA程序确实有点不划算)

(一)VBA程序代码如下:(程序运行之前请做好数据备份,以免丢失)

Sub Instr_Mid()
Dim i1, i2, i3, i4, i5, Arr, str1, str2, str3, str4
On Error Resume Next
Set mysheet1 = ThisWorkbook.Worksheets("Sheet1")
mysheet1.Range("B:BBB") = "" '清空单元格
Arr = Array(Chr(34), ",")  '间隔的标志,数组
For i1 = 2 To 10000  '从第二行到10000行
 i6 = 1  '列,从第2列开始
 If mysheet1.Cells(i1, 1) <> "" Then
  For Each str2 In Arr  '逐一去判断字符组里面的每一个字符
   i4 = 0
   For i2 = 1 To 1000   'i2一个字符大约循环1000次(中间可能退出)
    str4 = ""
    i3 = InStr(i3 + 1, mysheet1.Cells(i1, 1), str2) '判断字符所在的位置
    str1 = Mid(mysheet1.Cells(i1, 1), i3 + 1, 1) '截取字符
    If i3 <> 0 And IsNumeric(str1) = True Then   '如果截取的字符是数字,则
     i6 = i6 + 1
     For i5 = i3 + 1 To 100000 '从第i3+1个字符开始
      str3 = Mid(mysheet1.Cells(i1, 1), i5, 1)
      If IsNumeric(str3) = True Then  '如果截取的是数字,则
       str4 = str4 & str3
      Else
       Exit For
      End If
     Next
     mysheet1.Cells(i1, i6) = str4  '把数字填入同一行的列
    End If
    If i3 = 0 Then
     Exit For
    End If
   Next
  Next
 End If
Next

End Sub

(二)VBA程序的运行结果如下:(写代码不易,望笑纳)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-04-23

    举例,要从excel第一列中截取CD的数值7.382,即A1单元格中第4位参数到第8位参数之间位数为5位(小数点也占一位)的一段参数。

    在一空白单元格里输入MID公式,=MID(text,start-num, num-chars)。在这里的例子里,text就是要截取的单元格地址即A1,start-num是A1中被截取的7.382所在的开始位数,即第4位,num-chars即7.382的总位数,共5位,所以在空白单元格内输入MID公式,=MID(A1,4,5)。按ENTER回车,即可得到7.382。

    下拉自动复制公式,即可得到第一列所有的CD数值。

    如果要从单元格内左起第1位开始截取字符,则用LEFT公式,如图所示,即=LEFT(A1,10),意思是提取A1单元格中从左起第1位字符起到第10位字符结束,即截取了CD:7.382mg。

    同理,如果要从单元格内右起第1位开始截取字符,则用RIGHT公式,如图所示,即=RIGHT(A1,15),意思是提取A1单元格中从右起第1位字符起到第15位字符结束,即截取了TTX:0.2456mg/L。

第2个回答  2019-04-23

1、数据----分列,如下图,

2、复制全部数据----选择性粘贴----数值---转置,加个表头,数据---筛选,把不需要的筛选出来,删除行,留下的数据,替换点双引号。

第3个回答  2019-04-23

假如你这个数据在A1单元格,在B1单元格输入公式=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(A1,"2008",""),"2009",""),"2012",""),"{",""),"}",""),"only fit",""),"year",""),"""",""),"-","")," ",""),":","")

在C1单元格输入公式=--TRIM(MID(SUBSTITUTE($B1,",",REPT(" ",99)),99*COLUMN(A:A)-98,99))

C1单元格为数组公式,三键结束,向右横拉至出现错误符号#VALUE!为止。

如图:

追问

年份是不确定的不能那样替换,还有可以下拉吗?

追答

用SUBSTITUTE替换掉是最省事的方法,如果还有其它年份,在嵌套几层上去就可以了。另外,C1单元格公式如果要下拉,将公式改成=--TRIM(MID(SUBSTITUTE($B$1,",",REPT(" ",99)),99*ROW(A1)-98,99))

本回答被提问者和网友采纳
第4个回答  2019-04-24

A3中输入公式,虽然有些长:

=IFERROR(MID($A1,FIND("!",SUBSTITUTE($A$1,"{","!",COLUMN()))+2,FIND("!",SUBSTITUTE($A$1,""":""","!",COLUMN()))-FIND("!",SUBSTITUTE($A$1,"{","!",COLUMN()))-2),"")

向右拉,填充。

相似回答