[PR]
2025年11月04日
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
wordの表をエクセルに張り付ける
2021年01月09日
Wordで作った表をエクセルに貼り付けようとすると、崩れる。。。
1セルに2行書かれていると、ほかの列がグループ化されるので、
Word VBAを使ってエクセルに貼り付けるマクロを作成。
1セルに2行書かれていると、ほかの列がグループ化されるので、
Word VBAを使ってエクセルに貼り付けるマクロを作成。
【参考ページ】
【コード】Wordの表をExcelにコピペするWordマクロ | みんなのワードマクロ (wordvbalab.com)
Wordファイルにあるすべての表をエクセルの各シートに張り付け。
For tbl = 1 To ActiveDocument.Tables.Count
シート名は、Word表の1行2列目の文字にした。
Set myTable = myDoc.Tables(tbl)
SHname = Left(myTable.Cell(1, 2).Range.Text, Len(myTable.Cell(1, 2).Range.Text) - 2)
(Word表では、セル内の最終2文字は捨てるのが鉄則)
さらにシート名が重複しないように、Wordの表番号を使用。
(Word VBAでエクセルを動かすので、凝った作りにはできず)
最初は行と列のループで作ろうとしたけど、
元々のWordの表が結合されていると、「セルが存在しない!」と怒られる。
てなわけで、表の左上からタブで遷移する仕様で作成。
 Do
各処理
各処理
        Set objTableCell = objTableCell.Next    '次のセルへ(tabと同様)
    Loop Until objTableCell Is Nothing 
以下ソースSub ◆Wordの表をExcelにコピペする()
  Dim myExcelApp As Object
  Dim myWorkBook As Object
  Dim myWorkSheet As Object
  Dim myDoc As Document
  Dim myTable As Table
  Dim myText As String
  Dim i As Long
  Dim j As Long
  '-------------------------------------------
  '前処理
  '-------------------------------------------
  Set myDoc = ActiveDocument
  If myDoc.Tables.Count = 0 Then Exit Sub
    '-------------------------------------------
  'Excelブックを開く
  '-------------------------------------------
  'Excelが起動中かどうかを判定
  On Error Resume Next
  Set myExcelApp = GetObject(, "Excel.Application")
  'Excelが起動していない場合にExcelを起動する
  If Err.Number <> 0 Then
    Err.Clear
    Set myExcelApp = CreateObject("Excel.Application")
    DoEvents
    myExcelApp.Visible = True
  End If
  On Error GoTo 0
     'ブックを開く
     Set myWorkBook = myExcelApp.workbooks.Add
    Dim tbl As Long
    For tbl = 1 To myDoc.Tables.Count
    Set myTable = myDoc.Tables(tbl)
     'シートを指定
     Set myWorkSheet = myWorkBook.sheets.Add
  '-------------------------------------------
  'コピペの開始
  '-------------------------------------------
    Dim objTableCell As Object, SHname As String
'    myWorkSheet.Name = Left(myTable.Cell(1, 2).Range.Text, Len(myTable.Cell(1, 2).Range.Text) - 2)
    SHname = Left(myTable.Cell(1, 2).Range.Text, Len(myTable.Cell(1, 2).Range.Text) - 2)
    myWorkSheet.Name = SHname & "_" & Format(tbl, "00")
    Set objTableCell = myTable.Cell(1, 1)
    '文字列のコピペ
    Do  '-- Loop Until objTableCell Is Nothing
        i = objTableCell.RowIndex
        j = objTableCell.ColumnIndex
        myText = myTable.Cell(i, j).Range.Text
        myText = Left(myText, Len(myText) - 2)
        myText = Replace(myText, vbCr, vbLf)
        myWorkSheet.Cells(i, j).Value = myText
        Set objTableCell = objTableCell.Next    '次のセルへ(tabと同様)
    Loop Until objTableCell Is Nothing '------------------------------
    ' objTableCell.Range.Text = objTableCell.RowIndex & "-" &objTableCell.ColumnIndex
    '途中休憩
    If i Mod 20 = 0 Then
      DoEvents
    End If
Next tbl
  '-------------------------------------------
  '後処理
  '-------------------------------------------
  'オブジェクト変数の解放
  Set myDoc = Nothing
  Set myTable = Nothing
  Set myWorkBook = Nothing
  Set myWorkSheet = Nothing
  Set myExcelApp = Nothing
  MsgBox "終了しました。"
End Sub
PR
Comment