2016-07-26 3 views
1

おはようございます。 参照番号dllはCitrixアカウント(OWC10.dll)では利用できないため、過去8時間にわたってAccess 2007でピボットの代替案を探しています。だから私はこれについての回避策を研究するためにできる努力をしましたが、これまで何もありませんでしたので、ちょっとした助けを必要とします。私がここに持っていることは、生データのサンプルであるVBAを使用してアクセスデータをピボットする別の方法

は...

enter image description here

これは、私はもちろん、中に見ることが可能なピボットテーブル、探しています最終的な結果でありますフォーム(最適解)または抽出されたExcelファイルに変換します。

enter image description here

enter image description here

だから、基本的に、私は表示する必要があります。

  • 彼らは毎日働いていたどのように多くの毎日
  • を働いていたどのくらいの時間。

私はTRANSFORM Statement/Crosstabを試してみましたが、私は20,000行持っているので、列にするあまり行があることがエラーを取得 - 働いていた30日/月*人々を。 - DISTINCTしかし、私はどのように知っているのですか?

私のシステムには.dllファイルがありません。したがって、通常のピボットは問題になりません。誰も私にこれらの表示結果を与えることができる選択肢を知っていますか?

+0

質問にあなたが試したTRANSFORMクエリを追加してください。 ---あなたはデータに何日あるのですか?(SELECT DISTINCT ProcessDate FROM yourTable'を実行し、一番下にスクロールします)? – Andre

+0

申し訳ありません、私はGoogleからのコードを取得し、モジュールに入れて、この 'Print Transforms(" Table "、" column ")のように使用しました。私が覚えていることは、この列のすべてのフィールドをループし、それは新しい列として。そのあまりにも多くの、それはエラーを返します - それはマイクロソフトのサイトから、それを再び見つけることができません。 私はまだ代替案を探しているので、クロス集計を実際には研究していません。しかし、あなたの質問に答えるためには、その日に何人の作品を作ったかによって日々の違いがあります。たとえば、現在の生データには6月分の25k行があります。 – AdorableVB

+0

SQL Serverがオプションでない限り、CrosstabクエリやPivotテーブル以外のものはありません(Access 2010の後には使用されなくなります)。私は6月のすべての行を与えるクエリを作成し、その上でクロス集計クエリウィザードを実行することをお勧めします。このデータはTRANSFORMに適しています。 – Andre

答えて

0

私は同じ問題を抱えている他の人のために。私は、CrossTabを使って解決策を作った。 クエリウィザードの使用は非常に簡単でわかりやすいものです。以下は、私のニーズに合わせて編集されたSQLクエリです:

TRANSFORM format(Sum(MyCopy.[Duration]), "hh:mm:ss") AS SumOfDuration 
SELECT MyCopy.[UserID].[FullName], MyCopy.[TL], Sum(MyCopy.[Duration]) AS [Total Of Duration] 
FROM MyCopy 
Group BY MyCopy.[UserID], MyCopy.[FullName], MyCopy.[TL] 
PIVOT MyCopy.[Process Date]; 

注:この目的のために、このクエリを抽出するのは非常に簡単です。私はformatを使用したので、小数点では醜く見えません。明らかに、MS Accessは答えを実数ではなく、同じパーセンテージで与えます。 sum of total durationが24時間を過ぎると、それは異なって解決します。だから、正しい数字が表示されるように10進形式にしました。

0

あなたが必要とするのは、必要なデータのクエリをコンパイルし、これをExcelにプッシュし、プログラマチックにアクセスからExcelテーブルにピボットテーブルを作成することです。

私はADOをほぼすべて使用しています。そのため、私がここにある構文はこれを反映しています。あなたがDAOならば、それを翻訳する必要があります。

sql = _ 
    "SELECT Name, ProcessDate, HandlingTime " & _ 
    "FROM tbl ... WHERE ..." 

GenerateSimplePivot(excel_path&file_name_to_create, sql, 2) 


Private Sub GenerateSimplePivot(xname As String, auditData As String, _ pivotColumns As Long) 
    Dim ii  As Long 
    Dim XL  As Object 
    Dim WB  As Object 
    Dim WS1  As Object 
    Dim WS2  As Object 
    Dim rst  As ADODB.Recordset 

    'create/assign xl objects 
    Set XL = CreateObject("Excel.Application") 
    XL.Visible = False 
    XL.DisplayAlerts = False 
    Set WB = XL.Workbooks.Add 
    Set WS1 = WB.Worksheets(1) 

    Set rst = New ADODB.Recordset 
    rst.Open auditData, CurrentProject.Connection, adOpenKeyset, adLockReadOnly 

    For ii = 0 To rst.Fields.Count - 1 
     WS1.Cells(1, ii + 1) = rst.Fields(ii).Name 
    Next 

    WS1.Range("A2").CopyFromRecordset rst 
    WS1.Columns.Autofit 
    WS1.Name = "AuditData" 

    For ii = 0 To rst.Fields.Count - 1 
     'add column formatting logic here, if required 
    Next 
    rst.Close 

    If WB.Worksheets.Count < 2 Then 
     Set WS2 = WB.Worksheets.Add(, WB.Worksheets(WB.Worksheets.Count)) 
    Else 
     Set WS2 = WB.Worksheets(2) 
    End If 

    WS2.Name = "PivotTable" 

    DoCmd.SetWarnings False 

    Dim PTcache  As Object 
    Dim pt   As Object 

    WS1.Activate 

    Set PTcache = WB.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=WS1.Range("A1").CurrentRegion.Address) 
    Set pt = PTcache.CreatePivotTable(TableDestination:=WS2.Range("a6"), TableName:="PivotTable ") 

    WS2.Activate 

    With pt 
     For ii = (pivotColumns - 3) To 2 Step -1 
      .PivotFields(ii).Orientation = xlPageField 
     Next 
     On Error Resume Next 
     .PivotFields(1).Orientation = xlPageField 
     Err.Clear 
     ON Error GoTo [error handler label] 
     .PivotFields(pivotColumns - 2).Orientation = xlRowField 
     .PivotFields(pivotColumns - 1).Orientation = xlColumnField 
     .PivotFields(pivotColumns).Orientation = xlDataField 
    End With 

    WB.SaveAs FileName:=xname 
    WB.Close 
    Set WS1 = Nothing 
    Set WS2 = Nothing 
    Set PTcache = Nothing 
    Set pt = Nothing 
    Set WB = Nothing 
    XL.Quit 

    DoCmd.SetWarnings True 
    Set rst = Nothing 
    Set WS1 = Nothing 
    Set WS2 = Nothing 
    Set PTcache = Nothing 
    Set pt = Nothing 
    Set WB = Nothing 
    Set XL = Nothing 
End Sub 

これはあなたの後ろのものですか?

+0

私はこれがデータ表示のようなものだと信じていますが、クロス集計クエリを使用して私の問題の解決策をすでに持っています。計算に必要な値を取得して、 。申し訳ありませんが私は私のオフィス内の任意のサイトへのアクセス権を持っていないとして答えを投稿していません。しかし、私はxtabクエリをエクスポートする代わりにこれを見ていきます。ありがとう – AdorableVB

関連する問題