4

複数のチームで使用されている Excel テンプレートから、書式設定された Word レポートを自動作成しようとしています。たとえば、次の Excel 構造があるとします。

......A.... |.....B.... |....C...
1 名前| 身長| 重量
2 ジェイソン | 74 | 170
3 グレッグ | 70 | 160
4 サム | 71 | 200

そのデータを取り出して、次の形式の Word ファイルにフォーマットします。

2.1 ジェイソン
身長: 74
体重: 170

2.2 グレッグ
身長: 70
体重: 160

2.3 サム
身長: 71
体重: 200

VBA を使用して、特定の Excel ファイルに存在する可能性のある行を反復処理できる簡単な方法はありますか? (数から数百まで変化する可能性があります) 実際の Excel ファイルには約 12 の列が含まれており、各レコード (行) について、標準のテンプレート (フォント サイズ/色、インデント、配置など) を使用してデータを取り出して書式設定する必要があります。 ..) しかし、抽出を機能させたいだけで、後でフォーマットをいじることができます。

参考までに、私は既知の解決策を調査しようとしましたが、ほとんどは名前付きブックマークと比較的静的なコンテンツを中心にしています。

4

1 に答える 1

1

最終的にVBAを使用する場合は、Word文書から始まる以下のコードを使用できます。VBEの[ツール]>[参照]で、MicrosoftExcelXXオブジェクトライブラリの参照がチェックインされていることを確認してください。

ご存知のように、文字列をWordに配置する部分の方がおそらく適切に記述できます。Wordは、知識の面ですべてのMSOffice製品の中で私の最も弱いものです。

Sub XLtoWord()

Dim xlApp As Excel.Application
'Set xlApp = CreateObject("Excel.Application")
Set xlApp = GetObject(, "Excel.Application") '-> assumes XL is open, if not use CreateObject

Dim wkb As Excel.Workbook
Set wkb = xlApp.Workbooks("Book5.xlsm") '-> assumes xl is open, if not use .Workbooks.Open(filename)

Dim wks As Excel.Worksheet
Set wks = wkb.Sheets(1) '-> assumes data is in sheet 1

With wks

    Dim lngRow As Long
    lngRow = .Range("A" & .Rows.Count).End(xlUp).Row

    Dim cel As Excel.Range
    Dim i As Integer

    i = 1

    For Each cel In .Range("A2:A" & lngRow) 'assumes data is filled from top left cell of A1 including headers

        strLabel = "2." & i & " " & cel.Text
        strHeight = "Height " & cel.Offset(, 1).Text
        strWeight = "Weight " & cel.Offset(, 2).Text

        Dim myDoc As Word.Document
        Set myDoc = ThisDocument

        myDoc.Range.InsertParagraphAfter
        myDoc.Range.InsertAfter strLabel & Chr(11) & strHeight & Chr(11) & strWeight

        i = i + 1

    Next

End With


End Sub
于 2012-10-22T20:40:53.167 に答える