導航:首頁 > 編程語言 > vba編程迭代

vba編程迭代

發布時間:2022-08-26 22:35:36

❶ 你好,請教有關EXCEL中迭代計算的問題,可用公式或VBA解決。

代碼如下,詳見附件。

DimN
PrivateSubWorksheet_Change(ByValTargetAsRange)
OnErrorResumeNext
IfInStr(Target.Address,"$A$")>0ThenTarget.Offset(,1)=Target.Offset(,1)+IIf(IsEmpty(Target),-N,Val(Target))
EndSub
PrivateSubWorksheet_SelectionChange(ByValTargetAsRange)
IfInStr(Target.Address,"$A$")>0ThenN=Val(Target(1))
EndSub


❷ vba只能用一個for語句嘛

並不是。
for語句是編程語言中針對可迭代對象的語句,它的主要作用是允許代碼被重復執行。
可迭代對象是能夠一次返回其中一個成員的對象,比如我們常用的字元串、列表、元組、集合、字典等等之類的對象都屬於可迭代對象,獲取到這些對象我們就可以用for循環來進行操作。

❸ EXCEL VBA怎麼實現循環判斷

在Excel中實現循環判斷需要看實際的應用環境,大概分以下三種情況:
1、在公式中
在公式中經常用row(1:99)這樣去構造一個數列,然後通過對這個數列即可實現一定次數(如本例99次)的循環應用,在公式中加入if函數即可以實現循環判斷。
2、在VBA中
在VBA中的循環判斷其實就很簡單了,主要是結合for...next...或loop...until等循環語句結合if...then...else等判斷語句來實現。
3、在Excel新功能Power Query中
在Power Query中構造循環有很多方法,比如使用函數List.Transform或List.Accumulate實現轉換或迭代計算,其中可以通過各種方式加入條件。例如List.Transform函數的具體用法如下:
PQ-M及函數:批量處理的利器——列表轉換函數(List.Transform)及A股數據批量抓取方法
原創 大海 Excel到PowerBI在前面多個文章里用到List.Transform這個函數,為避免影響這些文章的主體內容,沒有專門詳細展開講這個函數的具體內容,本篇補上。List.Transform函數的基本功能是實現一個列表到另一個列表的轉換,即輸入一個列表,相應地得到一個經某些規則轉換後的列表。
先來看一下List.Transform函數的基本語法:
List.Transform(列表 , 轉換函數)
語法本身很簡單,但是,其中的兩個參數都非常靈活,因為:
1、第一個參數是列表,但是,列表裡的內容是可以任意的東西,簡單到幾個數字,復雜到一個個的表,甚至可以是表中帶表等任何東西!
2、轉換函數可以簡單到只返回一個字元,卻又可以復雜到引用各種函數寫任何功能強大的函數體!
所以,單純學會這個函數的簡單用法不難,但要做到靈活運用,就需要在日後大量的實際案例中磨練。本文從幾個例子,先讓大家對這個函數有一個比較全面的認識。
例1、給某個列表中的數字都加上1(簡單的對應轉換)
= List.Transform({30,40,21,33},each _+1)
結果:{31,41,22,34}
說明:轉換函數中的下換線「_」表示輸入列表中的每一個(當前計算)元素
例2、生成一個帶10個元素的列表,每個元素的內容均為「A」(生成的內容可以和輸入列表完全沒有關系)
= List.Transform({1..10}, each"A")
結果:{A,A,A,A,A,A,A,A,A,A}
例3、將數字1~26轉換為字母「A」~「Z」
= List.Transform(
{1..26},
each Character.FromNumber(64+_)
)
上面3個例子,簡單體現了List.Transform函數將一個列表轉換成另一個列表的過程,但是,這僅僅是它的基本功能,實際上,List.Transform還給了你一個批量操作的機制,讓你可以批量操作各種內容!
例4、批量抓取A股全部頁面數據
首先回頭看一下《單頁A股實時信息抓取》操作時生成的代碼:

這個代碼里,實際上只需要將頁面進行批量輸入,就可以得到批量的頁面信息,我們先刪除其他步驟代碼,僅保留最關鍵的兩行代碼,然後套上List.Transform函數修改為自定義函數(並將兩行代碼連成一個完整語句)如下:

這樣,當我們在pg_lst參數中輸入頁碼列表時,所有頁碼會被List.Transform函數批量轉換為對應的頁面數據,如取第1~3頁數據:

結果如下:

得到了批量的數據,後續就可以轉換到表,然後進行後續的數據處理了(方法與《單頁篇》一致,不再贅述)。
現在,我們在回頭看《格式化表單數據按可配置映射表轉換匯總》的內容,看是否容易理解?

❹ 提高vba運行效率

由於Microsoft Office辦公套件的廣泛應用,以及該軟體版本的不斷提升,功能不斷完善,在Office辦公套件平台上開發出的的VBA應用程序越來越多,而VBA是一種宏語言,在運行速度上有很大的限制。因此VBA編程的方法直接關繫到VBA程序運行的效率,本文列舉了一些提高VBA程序運行效率的方法。
方法1:盡量使用VBA原有的屬性、方法和Worksheet函數
由於Excel對象多達百多個,對象的屬性、方法、事件多不勝數,對於初學者來說可能對它們不全部了解,這就產生了編程者經常編寫與Excel對象的屬性、方法相同功能的VBA代碼段,而這些代碼段的運行效率顯然與Excel對象的屬性、方法完成任務的速度相差甚大。例如用Range的屬性CurrentRegion來返回Range 對象,該對象代表當前區。(當前區指以任意空白行及空白列的組合為邊界的區域)。同樣功能的VBA代碼需數十行。因此編程前應盡可能多地了解Excel對象的屬性、方法。
充分利用Worksheet函數是提高程序運行速度的極度有效的方法。如求平均工資的例子:
For Each c In
Worksheet(1).Range(″A1:A1000″)
TotalValue = TotalValue + c.Value
Next
AverageValue = TotalValue / Worksheet(1).Range(″A1:A1000″).Rows.Count
而下面代碼程序比上面例子快得多:
AverageValue=Application.WorksheetFunction.Average(Worksheets(1).Range(″A1:A1000″))
其它函數如Count,Counta,Countif,Match,Lookup等等,都能代替相同功能的VBA程序代碼,提高程序的運行速度。
方法2:盡量減少使用對象引用,尤其在循環中
每一個Excel對象的屬性、方法的調用都需要通過OLE介面的一個或多個調用,這些OLE調用都是需要時間的,減少使用對象引用能加快VBA代碼的運行。例如
1.使用With語句。
Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.Name=″Pay″
Workbooks(1).Sheets(1).Range(″A1:A1000″).Font.FontStyle=″Bold″ ...
則以下語句比上面的快
With Workbooks(1).Sheets(1).Range(″A1:A1000″).Font
.Name = ″Pay″
.FontStyle = ″Bold″
...
End With
2.使用對象變數。
如果你發現一個對象引用被多次使用,則你可以將此對象用Set 設置為對象變數,以減少對對象的訪問。如:
Workbooks(1).Sheets(1).Range(″A1″).Value = 100
Workbooks(1).Sheets(1).Range(″A2″).Value = 200
則以下代碼比上面的要快:
Set MySheet = Workbooks(1).Sheets(1)
MySheet.Range(″A1″).Value = 100
MySheet.Range(″A2″).Value = 200
3.在循環中要盡量減少對象的訪問。
For k = 1 To 1000
Sheets(″Sheet1″).Select
Cells(k,1).Value = Cells(1,1).Value
Next k
則以下代碼比上面的要快:
Set TheValue = Cells(1,1).Value
Sheets(″Sheet1″).Select
For k = 1 To 1000
Cells(k,1).Value = TheValue
Next k
方法3:減少對象的激活和選擇
如果你的通過錄制宏來學習VBA的,則你的VBA程序里一定充滿了對象的激活和選擇,例如Workbooks(XXX).Activate、Sheets(XXX).Select、Range(XXX).Select等,但事實上大多數情況下這些操作不是必需的。例如
Sheets(″Sheet3″).Select
Range(″A1″).Value = 100
Range(″A2″).Value = 200
可改為:
With Sheets(″Sheet3″)
.Range(″A1″).Value = 100
.Range(″A2″).Value = 200
End With
方法4:關閉屏幕更新
如果你的VBA程序前面三條做得比較差,則關閉屏幕更新是提高VBA程序運行速度的最有效的方法,縮短運行時間2/3左右。關閉屏幕更新的方法:
Application.ScreenUpdate = False
請不要忘記VBA程序運行結束時再將該值設回來:
Application.ScreenUpdate = True
以上是提高VBA運行效率的比較有效的幾種方法。

❺ Excel 請教如何用vba來實現迭代運算

[A1]=[A1]+1

❻ 我利用EXCEL VBA錄制了一個宏,用來打開工作簿的迭代計算屬性,但運行時出現424錯誤,求高人解答!

報錯的行上面一行有錯,修改為:

WithApplication.MultiThreadedCalculation
.Enabled=False
.ThreadMode=0
EndWith

❼ 關於VBA事件迭代的問題

可能不行喲。過程可以迭代調用,沒聽說過事件也可以呀。只是事件觸發時可以達到迭代效果而已

❽ EXCEL怎樣利用VBA將工作簿的迭代計算勾選為是,我錄制了一個宏,但運行出錯!

With Application.MultiThreadedCalculation
.Enabled = False
.ThreadMode = 0
End With
你的代碼丟失了Application

❾ EXCEL迭代怎麼實現(用vba也行)

迭代計算沒有問題,是你的邏輯問題,當你輸入A1的公式時,A1已經不屬於3 了

Private Sub CommandButton1_Click()

1 [A4] = [A1] - [A3]
If [A4] < 10 Then
[A1] = [A1] + 10

GoTo 1
End If

End Sub

閱讀全文

與vba編程迭代相關的資料

熱點內容
阿里雲伺服器終端在哪裡 瀏覽:144
app紙有什麼用 瀏覽:219
cuteftp命令 瀏覽:502
最開始的編程語言是什麼 瀏覽:757
at遠程命令 瀏覽:490
雲伺服器哪家好點 瀏覽:211
android系統源碼閱讀 瀏覽:925
dumpjava分析工具 瀏覽:678
怎麼下載cpu源碼 瀏覽:154
代碼加密怎麼取消 瀏覽:888
編譯原理代碼在哪裡運行 瀏覽:584
解密攝影pdf 瀏覽:72
演算法編程中級題目 瀏覽:250
c語言編譯器畢業設計 瀏覽:717
醫保卡申請app哪個好 瀏覽:945
阿里雲伺服器上傳源碼 瀏覽:602
營銷管理科特勒pdf 瀏覽:696
願望清單app哪個好 瀏覽:461
安卓外放聲音怎麼解決 瀏覽:196
脈脈app干什麼用的 瀏覽:362