1

Excel ピボット テーブルを使用して、大きな Access テーブルに記録された値を分析しています。

たとえば、私はテーブルを持っています

mark1 | mark2 | value
x     |y      |1
w     |z      |2
t     |l      |3

そして今、アクセスクエリフィールド式を使用してフィールド「mymark」を追加しています:

GROOPER: 
Switch(
[mark1]="x";"yes";
[mark2]="z";"no";
1=1;"dunno"
)

またはさらに複雑:

COMPLEXGROOPER: 
Switch(
([mark1]="x" or [mark1]="r") and [mark2]<>"";"yes";
[mark2]="z" or [mark2]="zz" or left([mark2],1)="z";"no";
1=1;"dunno"
)

私の目的は、次のような方法でデータを取得することです。

mark1 | mark2 | value| mymark
x     |y      |1     |yes
w     |z      |2     |no 
t     |l      |3     |dunno

次に、「mymark」によってExcelピボットテーブルで分析します

式のサイズが 1023 シンボルの制限に達するまでは問題ありませんでした。

この制限を克服する良い方法はありますか?

また、すべてのロジックを VBA 関数にパックしてから、アクセス式で関数名を使用しようとしました。アクセス内でクエリ結果を作成するのに有効なのですが、そのクエリをExcelのピボットテーブルデータのソースとして使おうとすると、自分のカスタムvba関数が式で定義されていないというエラーが発生します。

4

1 に答える 1

1

1)グループ化の値を別のテーブルに入れるのはどうですか:

key   | value
--------------
x     | yes
y     | no

LEFT JOIN:

FROM mytable
LEFT JOIN keyvalueTable ON mytable.mark = keyvalueTable.key

次に、keyvalueTable にない値を表示するNzには、null でない場合は最初の引数を返し、それ以外の場合は 2 番目の引数を返すいずれかを使用します。

GROUPER: Nz(keyvalueTable.value, "dunno")

Nzリンクされた Excel クエリで使用できない場合は、次のことを試してIifください。

GROUPER: Iif(keyvalueTable.value Is Null, "dunno", keyvalueTable.value)

2) 必要に応じて、Excel から読み取る代わりに、Access 内でクロス集計クエリを使用することを検討することもできます。クロス集計クエリ内で VBA 関数を使用できます。

于 2012-08-31T07:27:51.313 に答える