0

Microsoft Excel 2003 を使用して徹底的な検索を行いましたが、特定の問題に対する回答が見つかりません。

列 R の説明 (英数字) を 1 つの xls スプレッドシート (ssA と呼びましょう) から別のスプレッドシート (ssB) の列 L & M に svc_itm_cde (サービス項目コード) でコピーする必要があります。約 300 の svc_itm_cdes があります。

3 つの合併症:

  1. ssA の svc_itm_cde 列は、ssB の列と同じ順序ではありません。
  2. ssB の L & M の行の一部には既に説明が含まれているため、スキップする必要があります。
  3. ssB の svc_item_cdes の一部は ssA に表示されず、その逆も同様です。

友人が cvs へのエクスポートと Python スクリプトの開始を手伝ってくれましたが、それは長すぎました。(できれば) vba コードでこれを行う方法はありますか?

どうもありがとう。

4

1 に答える 1

0

これは、300 レコードに対してこれを行うには複雑すぎる方法かもしれませんが、より大きなデータセットには便利な手法です...

すべてのデータを 1 か所にまとめて、どの説明を保持し、どの説明を失うかを判断する必要がある場合は、ADO を使用して 2 つのデータ セットを結合することができます。

まず、Visual Basic Editor に移動します (Alt+F11 キーを押します)。[ツール] > [参照] を使用して、「Microsoft ActiveX Data Objects 2.8 Library」への参照を追加します。

次に、挿入 > モジュールを選択して、次のコードを貼り付けます。

Option Explicit

Sub master_list()

    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection

    ' This is the connection string for .xlsx files (Excel 2007 and later)
    With cn
        .Provider = "Microsoft.ACE.OLEDB.12.0"
        .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
            "Extended Properties=Excel 12.0 Xml;"
        .Open
    End With

    Dim rs As ADODB.Recordset
    Set rs = New ADODB.Recordset

    rs.Open "SELECT * FROM [ssA$] LEFT JOIN [ssB$] ON [ssA$].[svc_itm_cde] = " & _
    "[ssB$].[svc_itm_cde] UNION ALL SELECT * FROM [ssA$] RIGHT JOIN [ssB$] ON " & _
    "[ssA$].[svc_itm_cde] = [ssB$].[svc_itm_cde] " & _
    "WHERE [ssA$].[svc_itm_cde] IS NULL;", cn

    Dim i As Integer
    Dim fld As ADODB.Field
    i = 0

    ' Sheet3 should be a blank sheet that we can output the results to
    With Worksheets("Sheet3")
         For Each fld In rs.Fields
             i = i + 1
             .Cells(1, i).Value = fld.Name
         Next fld

        .Cells(2, 1).CopyFromRecordset rs
    End With

    rs.Close
    cn.Close

    End Sub

Excel 2003 以前を使用している場合、接続文字列部分は次のようになります。

With cn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & ThisWorkbook.FullName & ";" & _
        "Extended Properties=Excel 8.0;"
    .Open
End With
于 2013-01-15T23:19:40.623 に答える