1. 怎樣用vba讀取字元串數組並將符合條件的元素存儲到另一個動態數組中去
既然你的題目比較抽象,我也只能給出一個簡單的例子。
Dim myStr1(50) as String, myStr2() as String
Dim i,n as Integer
myStr1為字元串數組,myStr2為動態數組。
用for循環判斷字元串數組中的各個元素是否包含特定的字元,數組元素下標從0開始。
For i = 1 To 50
判斷 myStr1(i-1) 是否包含特定的字元
If 包含特定的字元
n = n + 1
ReDim myStr2(n) '給動態數組重定義一個實際的大小
myStr2(n-1) = myStr1(i-1) '存到動態數組里去
End If
Next i
其中,用InStr函數判斷是否包含特定字元。
一個簡單形式:InStr(string1, string2)
在string1里查找string2,如果沒找到,返回0,否則返回string2在string1中的起始位置。
具體用法VBA的幫助里有。
------------------------------------------------------------
「依次判斷str1中的excle文件的 內容裡面 是否含有要找的字元串」
首先,還是不知道你要找的字元串是什麼?
其次,如果含有你要找的字元串,提取文件名用InStrRev函數。因為已知文件全路徑的後綴為.xls,所以反向搜索最後一個路徑分隔符——反斜杠\,得知其在路徑字元串中的位置後也就知道文件名長度了,再用MID函數提取出來。
可能操作煩點,暫時也沒想到其他好方法。具體還請參考下面的資料鏈接。
2. vba中怎麼選取二維數組中的某一行或某一列
的方法
1.1 方法1
循環方法,固定1行/1列,另外一維循環
for arr1(i,1)
1.2 方法2
application.index() 取一維
application.index(arr1,1,0)
application.index(arr1,0,1)
2 工作表函數的index都默認從1開始
2.1 工作表函數
index 的序號默認都是從1開始,而非從0開始
用index取出來的數組,index已經從1開始了
工作表函數index ,match都是index從1開始,EXCEL本身 row column 都得從1開始
2.2 數組別忘記了你的index從0還是從1開始
Sub test001()
Dim arr1()
ReDim arr1(3, 3)
Debug.Print "不完整數組展示"
'因為你第一種顯示數組只取了數組4*4中 3*3部分
For I = 1 To 3
For J = 1 To 3
arr1(I, J) = 2 * I + 3 * J
Debug.Print arr1(I, J);
Next
Debug.Print
Next
Debug.Print
Debug.Print "完整數組展示"
'這才是數組的完整內容4*4
For I = LBound(arr1) To UBound(arr1)
For J = LBound(arr1, 2) To UBound(arr1, 2)
arr1(I, J) = 2 * I + 3 * J
Debug.Print arr1(I, J) & ",";
Next
Debug.Print
Next
Debug.Print
'arr2 = Application.Transpose(Application.Index(arr1, , 1))
'arr2 = Application.Transpose(Application.Transpose(Application.Index(arr1, 1, 0)))
'為啥第0行變成了第2行?--因為你第一種顯示數組只取了數組4*4中 3*3部分
'index 的序號默認都是從1開始,而非從0開始
'用index取出來的數組,index已經從1開始了
'工作表函數index ,match都是index從1開始,EXCEL本身 row column 都得從1開始
人活一輩子,就活一顆心,心好了,一切就都好了,心強大了,一切問題,都不是問題。
人的心,雖然只有拳頭般大小,當它強大的時候,其力量是無窮無盡的,可以戰勝一切,當它脆弱的時候,特別容易受傷,容易多愁善感。
心,是我們的根,是我們的本,我們要努力修煉自己的心,讓它變得越來越強大,因為只有內心強大,方可治癒一切。
沒有強大的敵人,只有不夠強大的自己
人生,是一場自己和自己的較量,說到底,是自己與心的較量。如果你能夠打開自己的內心,積極樂觀的去生活,你會發現,生活並沒有想像的那麼糟糕。
面對不容易的生活,我們要不斷強大自己的內心,沒人扶的時候,一定要靠自己站穩了,只要你站穩了,生活就無法將你撂倒。
人活著要明白,這個世界,沒有強大的敵人,只有不夠強大的自己,如果你對現在的生活不滿意,千萬別抱怨,努力強大自己的內心,才是我們唯一的出路。
只要你內心足夠強大,人生就沒有過不去的坎
人生路上,坎坎坷坷,磕磕絆絆,如果你內心不夠強大,那這些坎坎坷坷,磕磕絆絆,都會成為你人生路上,一道道過不去的坎,你會走得異常艱難。
人生的坎,不好過,特別是心坎,最難過,過了這道坎,還有下道坎,過了這一關,還有下一關。面對這些關關坎坎,我們必須勇敢往前走,即使心裡感到害怕,也要硬著頭皮往前沖。
人生沒有過不去的坎,只要你勇敢,只要內心足夠強大,一切都會過去的,不信,你回過頭來看看,你已經跨過了多少坎坷,闖過了多少關。
內心強大,是治癒一切的良方
面對生活的不如意,面對情感的波折,面對工作上的糟心,你是否心煩意亂?是否焦躁不安?如果是,請一定要強大自己的內心,因為內心強大,是治癒一切的良方。
當你的內心,變得足夠強大,一切困難,皆可戰勝,一切問題,皆可解決。心強則勝,心弱則敗,很多時候,打敗我們的,不是生活的不如意,也不是情感的波折,更不是工作上的糟心,而是我們內心的脆弱。
真的,我從來不怕現實太殘酷,就怕自己不夠勇敢,我從來不怕生活太苦太難,就怕自己不夠堅強。我相信,只要我們的內心,變得足夠強大,人生就沒有那麼多雞毛蒜皮。
強大自己的內心,我們才能越活越好
生活的美好,在於追求美好的生活,而美好的生活,源於一顆強大的內心,因為只有內心強大的人,才能消化掉各種不順心,各種不如意,將陰霾驅散,讓美好留在心中。
心中有美好,生活才美好,心中有陽光,人生才芬芳。一顆陰暗的心,托不起一張燦爛的臉,一顆強大的心,可以美化生活,精彩人生,讓我們越活越好。
生活有點欺軟怕硬,如果你內心很脆弱,生活就會打壓你,甚至折磨你,如果你內心足夠強大,生活就會獎勵你,眷顧你,全世界都會對你和顏悅色。
3. 如何用VBA編程實現將滿足條件的數據填充到另一個指定的表格中
看不出難度呀,單元格是一對一的復制,表1的B-F列右移一下到表2的C-G列,8節課在2-3、4-5之間添加一個空行,要求就是這樣嗎,解決此問題用公式最好,如果作為學VBA的例子,主要是練習數組使用、FOR循環使用。代碼可以這樣:
dim arr1,arr2,i,j,t
arr1=sheets("表1").range("a1:f10")
arr2=sheets("表2").range("c5:g14") '需要填寫數據的區域
t=Array(0,3,4,0,5,6,0,7,8,9,10) '行對應關系,t(x)值表示arr2的x行數據在arr1中的行號
for i=lbound(arr2) to ubound(arr2)
if t(i)<>0 then
for j=lbound(arr2,2) to ubound(arr2,2)
arr2(i,j)=arr1(t(i), j+1)
next j
end if
next i
sheets("表2").range("c5:g14")=arr2 '寫入數據
4. VBA中如何將多行多列數據存入數組並利用字典實現分頁
Sub CreateTabTwo2()
Dim cJG As Range
Dim c1 As Range, c2 As Range, rng1 As Range, rngZY As Range, rngZ As Range, rngY As Range
Dim i&, r&, r1&, rZ&, rF&, rFf&, irS&, pN, pNs&
Dim Arr1, d1, d2, rs, tmp, tmp2
Dim iTimer
iTimer = Timer
Application.StatusBar = "正在 獲取數據,請稍候……"
Application.ScreenUpdating = False
With Sheet5
Arr1 = .Cells(1, 1).Resize(.Range("A65536").End(xlUp).Row + 1).Cells
ReDim arr2(LBound(Arr1, 1) To UBound(Arr1, 1))
Set d1 = CreateObject("Scripting.Dictionary")
Set d2 = CreateObject("Scripting.Dictionary")
r = LBound(Arr1, 1) + 1
tmp = Left(Arr1(r, 1), 18)
d1(r) = tmp
tmp2 = tmp
d2(r) = Right(Arr1(r, 1), 3)
For i = r + 1 To UBound(Arr1, 1)
tmp = Left(Arr1(i, 1), 18)
' If MsgBox(d1.Count & vbCrLf & tmp & vbCrLf & tmp2, vbOKCancel) <> vbOK Then GoTo 1000
If tmp <> tmp2 Then d1(i) = tmp: tmp2 = tmp
d2(i) = Right(Arr1(i, 1), 3)
Next
End With
Application.ScreenUpdating = True
Application.StatusBar = "正在 調整格式,請稍候……"
Application.ScreenUpdating = False
With Sheet6
…………
以前回答過類似的問題,Hi我吧,給你QQ,詳細解答
5. excel如何將符合條件的值存入數組變數
看起來與VBA有關,猜一下吧:
如果符合條件是一個區域,可以直接賦值給數組,
如果是條件單元格,可以用For循環,按條件錄入數組。
6. VBA如何把滿足條件數組存組成一個新的數組呢
SUB AA()
DIM I ,brr(1 to 1000,1 to 1)
arr1= ***.range("a2:b" & ***.range("a65535").End(xlUp).Row)
for i = 1 to ubound(arr1)
if range(c3)=arr(i,2) then
n=n+1
brr(N,1)=arr(i,2)
end if
next
[c4].resize(n,1)=brr
end sub
7. VBA筆記:數組
聲明1個1~50的數組,可以將區間值寫出來
Dim SZ(1 To 50) As String
也可以用"個數"來標識,比如上述的 1 to 50 可以用 49 來替代(0~49的意思,總計50個數字)
Dim SZ(49) As String
我們還可以模塊的開始,就設定好數組的索引值從1開始(1~50)
當數組聲明好了之後,我們可以給數組賦值
比如,給數組的第15個元素賦值的方法如下:
SZ(14) = "100"
給一個數組集體賦值的方式:
VBA還支持 橫向、縱向 同時存在的列表型數組,比如,我們聲明一個3*20的數組
Dim SZ (1 to 3 , 1 to 20)
當然,也可以用個數來表示數組
假設,有4個高3層、寬5格的貨架,用數組可以這樣來表示
與單維數組的賦值方式一樣
當無法確定數組的存儲元素多少時,我們可以先聲明一個空的數組:
Dim SZ ()
然後,再通過ReDim語句來重新聲明數組的大小
數組內,參數間用英文逗號分隔,參數支持數字、文本
數組的索引號默認從0開始,除非在模塊中的第1句已經寫入了"Option Base 1"語句
數組內,參數間用英文逗號分隔,參數僅支持文本 (需要確認)
數組的索引號默認從0開始,無論是否已寫入"Option Base 1"語句
可以把一個單元格區域的值存到數組里,也可以把數組里的值寫到單元格里去 (單元格區域的大小必須一致)
通過UBound和LBound函數,可以計算數組的最大、最小索引號
UBound(arr) 『返回數組的最大索引號
LBound(arr) 『返回數組的最小索引號
UBound(arr) - LBound(arr) +1 『返回數組一共有多少個元素
如果是一個多位數組,還需要指定數組的維度,比如:
使用join函數,可以將數組里的所有元素,通過一個指定的拼接符號,拼成一個新的字串
使用range函數,可以將數組寫入單元格、區域
無論1維數組還是2維數組,在寫入單元格區域時,區域的大小,與數組的大小需要保持一致
8. EXCEL用VBA將單元格數值存入數組
1、首先打開一個Excel的文件,在表格中輸入簡單的表格,比如學生身高表格,如下圖所示。
9. 使用excel vba 尋找符合條件的行並拷貝到另一sheet
Sub CopyDat()
Dim arrStr() As String '用於存儲表一有內容行的數據,一共十列
ReDim arrStr(0 To 9) As String
Dim RowNum As Long '用於記錄表二中當前行的行號
RowNum = 1
For i = 1 To 200
If Sheet1.Cells(i, 1) <> 「」 Then
arrStr(0) = Sheet1.Cells(i, 1)
For k = 1 To 9
arrStr(k) = Sheet1.Cells(i, k + 1) '存儲每行的數據到數組
Next k
'開始輸出數據到表二
For j = 1 To 10
Sheet2.Cells(RowNum, j) = arrStr(j - 1)
Next j
'當前行號加1
RowNum = RowNum + 1
End If
Next i
End Sub
10. 【求助】VBA怎麼將符合條件的整行放入另一個表
最恨拷屏不拷貝行列標簽的~~~~我猜著做的,如果有變化自行調整。
分三段的要求很變態,完全可以一次掃描完成的,偏要使用三倍的時間來做。
Option Explicit
Sub xx()
Dim i1, i2, i3, j, arr(1 To 11)
'1.復制到表3
i3 = 2 '數據如果不是從2行開始保存請自行修改
For i1 = 2 To Sheet1.UsedRange.Rows.Count '數據如果不是從第2行開始請自行修改
If Sheet1.Cells(i1, "D") = 24 And Sheet1.Cells(i1, "F") = "正常" Then '確認列號
Sheet1.Rows(i1).Copy Sheet3.Rows(i3)
i3 = i3 + 1
End If
Next i1
'2.統計
For j = LBound(arr) To UBound(arr)
arr(j) = 0
Next j
For i1 = 2 To Sheet1.UsedRange.Rows.Count '數據如果不是從第2行開始請自行修改
If Sheet1.Cells(i1, "F") = "正常" Then arr(1) = arr(1) + 1 '正常的統計,確認列號
j = 0
Select Case Sheet1.Cells(i1, "C") '誤差列
Case 0: j = 2
Case 1: j = 4
Case -1: j = 6
Case 2: j = 8
Case -2: j = 10
End Select
If Sheet1.Cells(i1, "E") = "出" Then j = j + 1 '類型列,如果為「進」那麼保存結果就在上面的j,否則+1
arr(j) = arr(j) + 1 '各種進出的統計
Next i1
Sheet2.Range("A1:K2") = arr '保存結果,可能需要修改保存的地方
'3.統計
j = 0
For i1 = 2 To Sheet1.UsedRange.Rows.Count '數據如果不是從第2行開始請自行修改
If Sheet1.Cells(i1, "A") <= 4 Then j = j + 1 '數量列
Next i1
Sheet2.Range("L2") = j '保存結果,可能需要修改保存的地方
End Sub