2017-07-14 8 views
1

テーブルに70列あり、ほとんど空です。私は単一の値を持たない列を削除したい。問題は、テーブルが18000行あるので、手動でスクロールするのは馬鹿だということです。Access 2000間の値を持つ列の数を数えますか?

私はExpressionとSelectクエリに疲れましたが、表現が限られた数の文字を受け入れることができる、つまり70個の列すべてをカバーするのに十分なスペースがないことがわかりました。ここで

は、私が試したものです:

Format(IIf([t4k1],[t4k1],""), "00") & " " & Format(IIf([t4k2],[t4k2],""), "00") & " " & 
Format(IIf([t4k3],[t4k3],""), "00") & " " & Format(IIf([t4k4],[t4k4],""), "00") & " " & 
Format(IIf([t4k5],[t4k5],""), "00") & " " & Format(IIf([t4k6],[t4k6],""), "00") & " " & 
Format(IIf([t4k7],[t4k7],""), "00") & " " & Format(IIf([t4k8],[t4k8],""), "00") & " " & 
Format(IIf([t4k9],[t4k9],""), "00") & " " & Format(IIf([t4k10],[t4k10],""), "00") & " " & 
Format(IIf([t4k11],[t4k11],""), "00") & " " & Format(IIf([t4k12],[t4k12],""), "00") & " " & 
Format(IIf([t4k13],[t4k13],""), "00") & " " & Format(IIf([t4k14],[t4k14],""), "00") & " " & 
Format(IIf([t4k15],[t4k15],""), "00") & " " & Format(IIf([t4k16],[t4k16],""), "00") 

あなたが見ることができるように、テーブルには70個の列があり、t4k1、t4k2、t4k3、... t4k70ここ

は、表がどのように見えるかです:

empty columns access 2000

私が正しく、すべての70個の列を確認することができますどのように、それは、VBAコードを使用することですか?

コードはどのように見えますか?

これは良い方法ですか?

+0

これは正規化されていないデータのようです。このようにしてはいけません。 – Minty

+0

はい、私は同意する、70の列には、行に1と70の間の値が1含まれている必要があります。したがって、特定の列に値43が含まれている場合、正しい方法は1を含む列43になります。これらの70の列のどこにでも1から70の間の他のすべての値に対して: – Vlad

+0

3つの列しかないはずです。列のUniqueID、Kx番号と値を格納する列。次に、存在する値のみを格納し、クエリは簡単になります。 – Minty

答えて

2

私はループでDCount()を使用します。例えば。

Sub PrintEmptyColumns() 

    Dim i As Long 
    For i = 1 To 70 
     Debug.Print i, DCount("*", "CPA_foo", "Nz(t4k" & i & ", '') <> ''") 
    Next i 

End Sub 

それは(Ctrl + Gは、直接ウィンドウを開く)

x  0 

を印刷する場合、カラムt4k<x>は値ゼロの行を有します。

関連する問題