毎月更新する必要があるフォルダに20個のファイルがあるとします。現在のプロセスは、それぞれを開いて手動で更新することです。
私はすべてのトランザクションで1つの "マスターファイル"を作成しようとしていて、そのマスターファイルのデータを個々のファイルにプルするマクロを使用しています。個々のファイルは、FundAを呼び出すことができるセルh5にトリガーを持ちます。VBA列内の複数のオカレンスのコーディングと対応する結果
マスターファイルでは、列Aはすべてのファンド名になります。だから1ヶ月間、FundAは買い/売り/配当/月末の価格を持つことができます(これは常にそこにあります)。最初の手順を示すだけのコードがありますが、実際には Selection.FormulaArrayパーツのヘルプが必要です。
目標: は何回トリガー(個々のファイルのセルH5におけるファンド名)をカウントすることにより、取引のための個々のファンドのファイル検索をお持ちのClientMonthlyUpdate列Aである:Gごとに:その後、ClientMonthlyUpdate列Bにあるものを私に与えて発生。本質的に複数の出現を伴うVlookup。一度それがすべての出現を持っていると、私は数式製品を ""持って、すべてが完了したら値を貼り付けます。
Sub MonthlyUpdate()
Dim MyFolder As String
Path collected from the folder picker dialog
Dim MyFile As String
Filename obtained by DIR function
Dim wbk As Workbook
Used to loop through each workbook
Dim myExtension As String
myExtension = "*.xls"
Target File Extension (must include wildcard "*")
On Error Resume Next
Application.ScreenUpdating = False
Opens the folder picker dialog to allow user selection
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "Please select a folder"
.Show
.AllowMultiSelect = False
If .SelectedItems.Count = 0 Then
'If no folder is selected, abort
MsgBox "You did not select a folder"
Exit Sub
End If
MyFolder = .SelectedItems(1) & "\"
'assign selected folder to MyFolder
myExtension = "*.xls"
'Target File Extension (must include wildcard "*")
End With
MyFile = Dir(MyFolder)
'DIR gets the first file of the folder
'Loop through all files in a folder until DIR cannot find anymore
Do While MyFile <> ""
'Opens the file and assigns to the wbk variable for future use
Set wbk = Workbooks.Open(Filename:=MyFolder & MyFile)
'Replace the line below with the statements you would want your macro to perform
Sheets(1).Select
' opens up first sheet
range("A12").Select
'always the first populated cell in all workbooks, easy start
Selection.End(xlDown).Offset(1, 0).Select
'go down to last months update plus a new blank cell to insert current months activity
'this is where i get lost. this gives me runtime error 1004. There are named ranges transactions,and Fund.
Selection.FormulaArray = _
**"=IF(OR(ISERROR(INDEX(ClientMonthlyUpdate.xlsx!Transactions,SMALL(IF(ClientMonthlyUpdate.xlsx!Fund=R1C8,ROW(Date)),ROW(R[-54])),COLUMN(R[-1]C)+1)),INDEX(ClientMonthlyUpdate.xlsx!Transactions,SMALL(IF(ClientMonthlyUpdate.xlsx!Fund=R1C8,ROW(Date)),ROW(R[-54])),COLUMN(R[-1]C)+1)=0),"""",INDEX(ClientMonthlyUpdate.xlsx!Transactions,SMALL(IF(ClientMonthlyUpdate.xlsx!Fund=R" & _
"Date)),ROW(R1:R1])),COLUMN(R[-1]C)+1))"**
range("A12").Select
Selection.End(xlDown).Select
'select formula just created
Selection.Copy
range(Selection.Offset(0, 1), Selection.Offset(0, 5)).Select
'copy over through column F
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
MyFile = Dir
'DIR gets the next file in the folder
Loop
Application.ScreenUpdating = True
End Sub