2016-04-25 9 views
0

これはあなたにとっては簡単かもしれませんが、私はVBAで新しくなりました。excel vbaでリストを追加/更新する

私は、それらのうちの1つがキー値である「id」である多くの列を持つExcelファイルを持っています。私はファイルの選択を開くためのコードを書いた。

Sub GetFile() 
Dim fNameAndPath As Variant 
fNameAndPath = Application.GetOpenFilename(FileFilter:="Excel Files (*.XLSM), *.XLSM", Title:="Select File To Be Opened") 
    If fNameAndPath = False Then 
    Exit Sub 
Workbooks.Open Filename:=fNameAndPath 
End Sub 

このリストには、他のファイル(同じ列名が異なる値と不確定な行数を持つ)を追加する必要があります。そして、 "id"カラムが追加されたファイルで同じ値を持つ場合、古いものは完全に削除されるべきです。

提案はありますか?

Option Explicit 

Dim myWorkbooks As New Collection 

Sub GetFile() 
    Dim fNameAndPath As Variant, i As Long, x As Variant 
    fNameAndPath = Application.GetOpenFilename("All Files (*.*), *.*", , "Select Files To Be Opened", , True) 

    If Not IsArray(fNameAndPath) Then 
    If fNameAndPath = False Then Exit Sub Else fNameAndPath = Array(fNameAndPath) 
    End If 

    For i = LBound(fNameAndPath) To UBound(fNameAndPath) 
    Set x = Workbooks.Open(fNameAndPath(i)) 
    myWorkbooks.Add x 
    Next 
End Sub 

これは、複数のファイルを開くことができますし、また、それら(それらへのポインタ)を格納します。私はこのような何かを示唆してあなたの最初の問題を解決するために

+0

まあまあです。私はこれをやっている間に任意の量のファイルを選択できるようにしたい。また、 "id"列の値がすでに同じ場合、リスト内の古い列の値が削除されます。 –

+0

私はファイル選択を開く方法を知っていますが、それらが変数であれば、リストに他のファイル値を追加する方法はわかりません(いくつかのファイルのうちのいくつかは100などです)。レコードマクロでそれを行うことができます。また、私は2つの値が同じかどうかをチェックし、古いものを削除するアルゴリズムを知らない。 –

+0

私はそれを編集しましたが、私はどんな応答も受け取りません。 –

答えて

0

。あなたはこのように、後でそれらにアクセスすることができ

Sub ChkID(ID As String) 
    Dim x As Variant 
    For Each x In myWorkbooks 

    If IsNumeric(Application.Match(ID, x.Sheets(1).Columns(1), 0)) Then 
     x.Sheets(1).Rows(Application.Match(ID, x.Sheets(1).Columns(1), 0)).Delete xlUp 
     x.Save 

    End If 
    Next 
End Sub 

これはIDが含まれている場合、各ワークブックの最初のシートの列Aをチェックし、そうであれば、行を削除するでしょう。あなたはすべてを完了したら

、あなたは/閉じるを経由して、すべてのWBのを保存することができます:

Sub ClsFile() 
    While myWorkbooks.Count 
    myWorkbooks(1).Close True 
    myWorkbooks.Remove 1 
    Wend 
End Sub 

唯一の欠点である、VBAを停止する必要がある場合は、そのコレクションは、(再び空になることをお


これはあなたがあなた自身のコードあなたがそれを必要とする方法を構築するために必要なすべてが含まれている必要があります。それらを手動で閉じて、サブ介して、それらを再度開く必要があります。しかし、あなたはまだ質問があれば、ちょうど頼みます:)

+0

ありがとう、私は今それを試してみよう!もう一つ質問があります。次の空の行に他のファイルの値を追加するコードを見つけるにはどうすればよいですか? –

+0

「最初に空の行を見つけてください」または「最後に使用された行を取得する」など... googleは何百万もの可能性を表示します(ok ...それらへのリンクのみ):P –

+0

チェックします –

関連する問題