2017-01-03 9 views
-3

私は自分の部門内のすべてのプロジェクトを結合しており、常に更新されています。VBAを作成してデータベースをフィルタリングし、レポート用のプロジェクトIDに基づいてテーブルに分割しますか?

データベースは4列で構成されています。更新

  • プロジェクトタイトル
  • 参考
  • ステータスの

  • は、我々は4つのプロジェクトを持っていると仮定しましょう。

    各プロジェクトのすべての更新を1つのテーブルに収めたVBAが必要です。

    最終的には4つのテーブルが作成され、各プロジェクトには独自のテーブルが作成されます。また、それはテーブルのタイトルとしてプロジェクトタイトルを持っています。

    新しい4つのテーブルには3列

    1. 参考
    2. ステータス

    で構成されます(プロジェクトのタイトルは、それが新しいテーブルに削除されます理由です一般的になりますテーブルのタイトルになります)

    プロジェクト番号はVBAの主な検索基準になります。

    データベース情報はユーザーフォームで埋められ、ユーザーフォームはそのデータベース内のすべての更新を挿入します。これが、プロジェクトIDに基づいてデータベースをテーブルに分割したい理由です。データはユーザーフォームを使用して入力されるため、ユーザーはユーザーフォームの埋め込みドロップダウンリストによって更新するプロジェクトを選択し、送信後に入力されたデータをデータベースに挿入します。

    この要求の主な目的は、すべてのプロジェクトを組み合わせて印刷可能なレポートを持っていることですが、各プロジェクトには、簡単にanalysis.Subレポート()

    Sheet4.Activate 
    
    
    Dim project1 As String 
    Dim project2 As String 
    Dim project3 As String 
    Dim project4 As String 
    Dim project5 As String 
    Dim project6 As String 
    Dim project7 As String 
    Dim project8 As String 
    Dim project9 As String 
    Dim project10 As String 
    Dim project11 As String 
    Dim project12 As String 
    Dim project13 As String 
    Dim project14 As String 
    Dim project15 As String 
    
    Dim finalrow As Integer 
    
    Dim i As Integer 
    
    project1 = Sheet4.Range("U1").Value 
    project2 = Sheet4.Range("U2").Value 
    project3 = Sheet4.Range("U3").Value 
    project4 = Sheet4.Range("U4").Value 
    project5 = Sheet4.Range("U5").Value 
    project6 = Sheet4.Range("U6").Value 
    project7 = Sheet4.Range("U7").Value 
    project8 = Sheet4.Range("U8").Value 
    project9 = Sheet4.Range("U9").Value 
    project10 = Sheet4.Range("U10").Value 
    project11 = Sheet4.Range("U11").Value 
    project12 = Sheet4.Range("U12").Value 
    project13 = Sheet4.Range("U13").Value 
    project14 = Sheet4.Range("U14").Value 
    project15 = Sheet4.Range("U15").Value 
    
    
    finalrow = Sheet4.Range("A2000").End(xlUp).Row 
    
    i = 0 
    
    For i = 1 To finalrow 
    If Cells(i, 1) = project1 Then 
    Sheet7.Range("A100").End(xlUp).Offset(1, 0) = project1 
    
    
        If Cells(i, 1) = project1 Then 
          Sheet4.Range(Sheet4.Cells(i, 2), Sheet4.Cells(i, 8)).Copy 
          Sheet7.Range("A100").End(xlUp).Offset(1, 0).PasteSpecial xlPasteValuesAndNumberFormats 
    
        End If 
    End If 
    
    Next i 
    
    
    
    Sheet7.Activate 
    
    
    
    
    
    End Sub 
    
    +5

    可能な限り公正な方法で;このサイトは質問のためのものです...あなたは何ですか? – User632716

    答えて

    0

    あなたは、コードを入れていないため、別のテーブルになります私はどちらも入れないでしょう。 アイデアは簡単です:

    • プロジェクトのリストを作成します。 4つあることがわかっている場合は、固定パラメータとして使用できますが、醜いです。それらを数えてください。
    • 各プロジェクトで使用する行を数えます。
    • 配列の配列を作成します(redim A 4)、あなたは、各プロジェクトのために)
    • をVBAでそれを行う正しいサイズの新しい配列をREDIMし、適切なプロジェクトに
    • ループをそれを埋めると便利なワークシートに配列全体を貼り付けることができ

    あなたはそれに問題がある場合は幸運と戻って自由に感じる!

    エディションを次の配列を使用するようにしてください:

    Dim projectList() As String 
    projectList= Range(Sheet4.Range("U1"),Sheet4.Range("U1").end(xldown)).Value2 
    

    プロジェクトの数は(projectlist)ループについて

    をUBOUNDされます:あなたは恐ろしく時間がかかり細胞上のループを使用しています。

    finalrow = Sheet4.Range("A2000").End(xlUp).Row 
    dim data() 
    data=range(Sheet4.Range("A1),Sheet4.Range("A" & finalrow)).value2 
    

    をして出力するために、あなたは配列を使用し、二回のループを行うことができます:私はあなたが使用することをお勧め一度あなたがそれらを保存するために、1を保存する必要がありますどのように多くの要素をカウントします。それは私がここで読むことができますし、データベースの視点に関して、それはプロジェクトごとに新しいテーブルを作成するために、あまり意味がありません。何より

    +0

    ご意見ありがとうございます!たぶん、正しい方法で私の質問を説明することができませんでした..各プロジェクトの新しいテーブルを生成する考えは、報告のためです。すべてのプロジェクトについて毎月レポートを作成したい場合は、各プロジェクトを別々のテーブルに入れる必要があるため、レポート作成がより簡単になります。そうでなければ、私はデータベース全体を印刷しましたが、報告には実用的ではありません。 – Keem

    +0

    @Keem:この場所は "私のためのコード"ではありません。私が提案したようにコードを実行してから、私たちに戻ってきてください。 – Pierre

    +0

    あなたが私を誤解した場合はすみません、ごめんなさい、私のコード全体を書く人はいません。しかし、私はVBAで新しく、私は可能かどうかを知りたいのですか?情報を結合するために使用しなければならないコードは何ですか。あなたが箇条書き2で示唆したことについては、データベースが絶えず更新されているので、私は各プロジェクトでどれくらいの行を持っているのか判断できません。いくつかのプロジェクトには10​​がいくつかあります。 – Keem

    0

    :-)幸運

    はるかに速くなります私を信頼しています。これにより、コーディング中に難しくなります。

    プロジェクトにテーブルがあり、必要に応じてプロジェクトに詳細が表示されている場合は、オフにする方がよい場合があります。これらのテーブルを一意の識別子でリンクすることができます。したがって、データを1つのテーブルに格納するだけで、データベースの二重項目を避けることができます。今は、データを複数回保存するようです。

    +0

    あなたのフィードバックのためにみんなありがとう!たぶん、正しい方法で私の質問を説明することができませんでした..各プロジェクトの新しいテーブルを生成する考えは、報告のためです。すべてのプロジェクトについて毎月レポートを作成したい場合は、各プロジェクトを別々のテーブルに入れる必要があるため、レポート作成がより簡単になります。そうでなければ、私はデータベース全体を印刷しましたが、報告には実用的ではありません。 – Keem

    関連する問題