1

MS Access のテーブルから Excel への出力のレイアウトを制御する方法を知っている人はいますか?

例えば:

私のMS Accessテーブルは次のようになります

--------------------------------------------------
|ID      | Field 2 | Field 3| Field 4 | ETC
--------------------------------------------------
|A       | 1       | 2      | 3       |
|A       | 4       | 5      | 6       |
|B       | 7       | 8      | 9       |
|C       | 10      | 11     | 12      |
|A       | 13      | 14     | 15      |

次のようにデータをExcelに出力したいのですが:

--------------------------------------------------
|ID      | Field 2 | Field 3| Field 4 | ETC
--------------------------------------------------
|A       | 1       | 2      | 3       |
|        | 4       | 5      | 6       |
|        | 13      | 14     | 15      |
|B       | 7       | 8      | 9       |
|C       | 10      | 11     | 12      |

したがって、「ID」フィールドですべてのレコードをグループ化できます。

何か案は?

4

2 に答える 2

2

Re: 行順

もちろん、Excel で行を並べ替えることができますが、Access で行う場合は、並べ替えを行う選択クエリを作成して保存し、テーブルの代わりにクエリをエクスポートします。

Re: 重複値の抑制

それらを完全に省略したくない場合もありますが、条件付き書式設定機能を使用して Excel で非表示にすることができます。あなたの場合、あなたは

  • 列 A の ID 値を選択します (行 2 から開始)
  • 条件付き書式を呼び出す
  • 「数式を使用して、書式設定するセルを決定する」を選択します
  • 数式を =A2=A1 に設定します
  • フォントの色を背景色と同じに設定する

(参考:こちら

編集: 以下のコメントに応じて、書式設定を適用するためのサンプル Excel VBA コード (Excel の「マクロの記録」によってキャプチャされたもの):

Range("A2:A6").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=A2=A1"
Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
With Selection.FormatConditions(1).Font
    .ThemeColor = xlThemeColorDark1
    .TintAndShade = 0
End With
Selection.FormatConditions(1).StopIfTrue = False
于 2013-03-12T10:42:31.907 に答える
1

このようなことを試してください。

最初にいくつかの便利な関数:

1)SELECTステートメント(引数を介して渡される)に基づいてAccessからRecordsetを取得します。

Option Explicit
Public Function Rst_From_Access(sSQL_Select As String) As ADODB.Recordset

Dim oConn                           As ADODB.Connection
Dim oRst                            As ADODB.Recordset
Dim sPath_DB                        As String
Dim sFile_DB                        As String

Dim sConn                           As String


'Instantiate the ADO-objects.

Set oConn = New ADODB.Connection
Set oRst = New ADODB.Recordset

'Set Path and File
sPath_DB = ThisWorkbook.Names("PARAM_PATH_DB").RefersToRange.value
sFile_DB = ThisWorkbook.Names("PARAM_FILE_DB").RefersToRange.value

 'Create the connectionstring.
sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath_DB & sFile_DB & ";"

With oConn
    .Open (sConn) 'Open the connection.
    .CursorLocation = adUseClient 'Necessary to disconnect the recordset.
End With

With oRst
    .Open sSQL_Select, oConn 'Create the recordset.
    Set .ActiveConnection = Nothing 'Disconnect the recordset.
End With

Set Rst_From_Access = oRst

End Function

2)ADO接続:

Public Sub open_ADODB_Connection()

Dim oConn                           As ADODB.Connection
Dim sPath_DB                        As String
Dim sFile_DB                        As String

Dim sConn                           As String


'Instantiate the ADO-objects.

Set oConn = New ADODB.Connection

'Set Path and File
sPath_DB = ThisWorkbook.Names("PARAM_PATH_DB").RefersToRange.value
sFile_DB = ThisWorkbook.Names("PARAM_FILE_DB").RefersToRange.value

 'Create the connectionstring.
sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sPath_DB & sFile_DB & ";"

With oConn
    .Open (sConn) 'Open the connection.
    .CursorLocation = adUseClient 'Necessary to disconnect the recordset.
End With

End Sub

3)レコードセットを呼び出します。

オプション明示

Sub Connect_To_DB()

Dim oSheet                      As Excel.Worksheet

Dim sSQL_Select                 As String
Dim oRst                        As ADODB.Recordset
Dim iMax_Col                    As Integer
Dim lMax_Row                    as long


Set oSheet = ThisWorkbook.Sheets("Main")

'Get recordset
sSQL_Select = "SELECT * FROM T_TABLE ORDER BY ID;"

Set oRst = Rst_From_Access(sSQL_Select)

iMax_Col = oRst.Fields.Count
oRst.MoveLast
iMax_Row = oRst.RecordCount

With oSheet
   .Range(.Cells(1, 1), .Cells(iMax_Row, _
        lMax_Col)).CopyFromRecordset oRst
End With

End Sub

もちろん、IDの繰り返しがありますが、それは問題を引き起こしますか?一般的に、すべての行のすべてのデータを保持する方が良いと思います。印刷用の場合は、Accessからすぐに印刷します。

于 2013-03-12T10:20:59.847 に答える