C列中有幾萬行資料,怎樣用VBA取左邊開始的數字,共取。用MID函式太慢了。謝謝大家

時間 2022-03-28 03:40:04

1樓:流雲行水

不是" 用mid函式很佔記憶體" 的問題,而是excel中行數很多的時候計算字元比較慢,如果先將單元格資料賦值給一個二維陣列,再在陣列(記憶體)中處理,速度將有成非常非常大的提升,我以前處理過類似問題,效果震撼。你可以試一下,如果不錯,要加分哦!!

private sub commandbutton1_click()

dim cellarr '定義一個二維陣列

dim c1 '要處理資料所在列

dim rows as double '資料總行數

c1 = 3 '假設資料存放在第三列,請在第四列留空,用於放置處理好的資料!!

rows = 20000 '假設是2萬行,多少自己改

cellarr = sheet1.range(sheet1.cells(1, c1), sheet1.cells(rows, c1 + 1)) '將兩列的資料賦值給陣列

for i = 1 to rows '在記憶體中對陣列進行操作

cellarr(i, 2) = mid(cellarr(i, 1), 5, 4) '按你的要求轉換

next i

'將轉換結果重新賦值給單元格!可能很快完成!!!!!!!!!!!!

sheet1.range(sheet1.cells(1, c1), sheet1.cells(rows, c1 + 1)) = cellarr

end sub

2樓:香格里拉稻草人

sub abc()

dim arr, brr(), crr, r%, rr%arr = range("c1:c" & [c65536].end(3).row)

redim preserve brr(1 to ubound(arr), 1 to 1)

for i = 1 to ubound(arr)brr(i, 1) = mid(arr(i, 1), 5, 4)next

[c1].resize(ubound(brr), 1) = brrend sub

這個需用陣列在記憶體中運算,應該很快的,我是03版3萬多行不會超過1秒。

3樓:匿名使用者

columns("c:c").texttocolumns datatype:=xlfixedwidth, _

fieldinfo:=array(array(0, 1), array(4, 1), array(8, 1)), _

trailingminusnumbers:=true

4樓:匿名使用者

那就編寫一段很小的**。

你的資料是字元型別的還是數值型別的?

資料有幾萬行啊?

是什麼版本的excel?

從c列取,取出來放在什麼列?

excel中如何提取某個單元格從第n個字元開始的內容?

5樓:匿名使用者

用mid函式

mid(text,start_num,num_chars)其中,text 是指單元格中的文字(字元型)start_num 指定提取的開始位置(數值型)num_chars 指提取的長度(數值型)電腦/數碼 -> 軟體 從第8開始提取,取值長度為2

6樓:匿名使用者

可使用 選單》資料》分列 解決之

方法一: 選單》資料》分列》固定寬度(適用於等長資料)>>下一步》點選你想要分列的位置, (雙擊可取消不需要的分列位置)>>完成

方法二: 選單》資料》分列》分隔符號(適用於有特定識別符號的資料.比如此案有有一特定的 ">" 號》下一步》分隔符合:其它, 鍵入 ">" 號》完成

7樓:

雖然不太明白你的意思,但我覺得只要選擇複製並貼上就行了吧

8樓:

使用mid函式提取

主要功能:從一個文字字串的指定位置開始,擷取指定數目的字元。

使用格式:mid(text,start_num,num_chars)引數說明:text代表一個文字字串;start_num表示指定的起始位置;num_chars表示要擷取的數目。

9樓:無限公司

=right(10)

excel 用vba提取資料

10樓:綠衣人敲門

1、漢字在前,數字在後面的情形。可以用mid,min, find三個函式來實現提取裡面的數字。如圖:

在b2輸入「=mid(a1,min(find(,a1&「0123456789」)),20)」

2 、把單元格里面所有的數字都提出來。可以使用巨集。先開啟vba編輯器。工具——巨集——visual basic 編輯器

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)」就可以提取第幾次出現的陣列了,如圖所示。

11樓:匿名使用者

附件做好的,

有問題追問

alt +f8執行

12樓:

你的前兩個表是不是固定的名稱,而且是不需要提取的?

如何用vba對統計一列有多少個有數值的單元格

13樓:匿名使用者

14樓:蔣暉孫華翰

這個不需要vba,用count函式即可。

15樓:股道瘦馬

'假設對第3行操縱

dim i as integer

dim mysum as integer

mysum=0

for i=1 to 300

if cells(3,i)<>"" then mysum=mysum +1

next i

請問 vba 從字串中提取數字的函式 ,或者方法?

16樓:

mid函式引數位置前兩個顛倒了

17樓:匿名使用者

a="ade125qq"

s=len(a)

m=""

for i= 1 to s

n=mid(i,a,1)

end if

next i

debug print m 'm就是提取的所有數字定義之類的請自行處理。

如何用vba取電子**單元格中的字元的n位資料?

18樓:依然特雷西

1、excel中有資料如下圖所示,將所有的資料合併到b1單元格中。

2、按下alt+f11,開啟vba編輯介面,雙擊資料所在的工作表,如下圖所示。

3、輸入**如下圖所示:sub 魚目混珠() range("b1") = range("a1") & range("a2") & range("a3") & range("a4") end sub。

4、點選執行子程式按鈕,如下圖所示。

5、關閉vba編輯介面,返回到excel中,就可以看到a1:a4的內容合併到了b1單元格中,如下圖所示。

19樓:魚木混豬喲

vba中也可以用mid函式提去字元的n位資料軟體版本:office2013

舉例說明如下:

1.從下表e列資料中,提取第2位開始的5位資料:

2.alt+f11,在相應工作表中輸入**如下:

3.f5執行**,即可提取出相應的資料來:

20樓:匿名使用者

mid(需要提取的字串,從左邊算起提取的第一個字元的位置的數字,提取字元的個數數字)

例如:tt = "abcdefgh"

xx = mid(tt,4,2)

xx的返回值為:"de"

21樓:黑桃5悲鳴

巨集-錄製巨集-使用公式mid(a1,3,2),下拉填充-停止

這樣的話就錄好了這樣的巨集

22樓:匿名使用者

sub aaa()

msgbox mid(range("a1").text,n,1) 'n就是第幾個字元,自己修改即可。

end sub

vba的mid函式問題

23樓:姓王的

假如用s代表這個字串

第一種:mid(s,4,len(s)-6)第二種:val(mid(s,4))

第三種:replace(s,"abs","")

24樓:匿名使用者

不用mid函式,用substitute函式替換掉"abs"為空就行了,比方事例字串在a1單元格:

=substitute(a1,"abs","")

25樓:匿名使用者

樓主是不是這個意思

sub zf()

temp = range("a1")

if temp like "abs*abs" thenn = mid(temp, 4, 7)

range("b1") = n

else

end if

end sub

mid函式裡不能用萬用字元的

26樓:

用這個,好使!

sub zf()

temp = range("a:a")

for i = 1 to ubound(temp)if temp(i, 1) like "abs*abs" thenn = mid(temp(i, 1), 4, 7)range("b" & i) = n

else

end if

next

end sub

27樓:匿名使用者

如果abs固定,可以試試這個 =replace("abs3362514abs","abs","")

如何辟穀(釋萬行), 轉載 如何辟穀(釋萬行)

沒有 嘛 伊斯蘭教 佛教 教 天主教 道教 中華人民共和國 people s republic of china 簡稱 中國 成立於1949年10月1日,位於亞洲東部,太平洋西岸,是工人階級領導的 以工農聯盟為基礎的人民民主 莫文靈雲南 中國五大宗教 中國五大宗教是指在中國具有一定歷史影響,形成中華...

excel資料太長1萬行怎麼分成10份,一份1000如圖做示範,謝謝啦

我來也 在b1單元格輸入一個數字1,然後選擇b列,再按選單項 開始 填充 該按鍵一般在 按鈕下面的 系列 步長為1,終止值 1000 確定後,在b列就是1 1000號的序號了。然後,在b1單元格輸入公式 indirect a 1000 column a1 1 row a1 或者是公式 offset ...

萬行法師 學佛究竟學什麼,修行究竟修的是什麼

1 我們要學佛,一定要認識佛教!佛教是釋迦牟尼佛的教育,它裡頭講什麼東西?我把它分為五大類 倫理 道德 因果 哲學 科學。2 我們接受釋迦牟尼佛的教育,對這個宇宙萬事萬物 於世出世間一切諸法 性相 理事 因果通達明瞭,這才叫學佛。3 我們學佛,一定要讀誦經典。每一天讀誦,就是每一天接受佛的教誨,念念...