• ベストアンサー

ワードでエクセルデータを参照

エクセルで表を作成しています A:風袋 B:実重量 C:総重量 C=A+B のCの所が、縦倍角で表示させてありまして Cの所をワードで作成しエクセルシートに貼り付けました。 (わざわざ面倒な事をしていますが) 現在、Cを編集する時、ダブルクリックでワードを起動し 書き換えています。 これを、ワードを起動した時に計算結果Cが表示されるように するにはどうすればよいのでしょうか? コマンドボタンでUserFormを表示させOKボタンで編集する事を 考えましたが私のVBAの知識では エクセルのAとBをワードのUserFormに表示する事が出来ません なにか良い方法をお教え下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.6

こんにちは。 私の書いた#4のコードは、Excelのブックを開く必要がありません。直接、取得する方法です。 どういう方法にするのかは、お決めください。こちらとしては、ADOで取得する方法でなくてもよいのですが、違う場合はコードは違ってきます。 >Private Sub CommandButton1_Click() これについては、私の回答ではありませんので、直接の回答は省かせていただきますが、「実行時エラー」なら、 = Val(TextBox1.Value) + Val(TextBox2.Value) とすれば、型の違いのエラーはなくなります。

acecon
質問者

補足

アドバイス頂きありがとうございます。 #4のコードをコピペさせて頂き実行しましたが  変わりませんでした。 現環境:OS Vista HomeEdtion Office2007 で 使用環境:OS XP HomeEdtion   Office2000 の予定です。 フォルダー C:\Testを作成し C:\Test\test1.xlsm とC:\Test\文書1.docmを作りました test1.xlsmのA1:風袋 B1:実重量 C1:総重量 に書き込んであります。 (OSの違いでC:\My DocumentsやC:\Documents and Settings\My Documents  VISTAのC:\Documents and Settings\[UserName]\My Documents等色々なので C:\Testとしましたが間違っていますでしょうか?) Wordの参照設定はOffice2007の初期インストール時のままです。 ちなみに VisualBasic ForApprications MicrosoftWord12.0 ObjectLibrary OLEAutomation MicrosoftOffice12.0 ObjectLibrary の4Fileです Microsoft.Jet.OLEDB.4.0に近い Microsoft Jet and Replication Objects2.6 Libraryにチェックいれましたが 変化ありませんでした。 ワードは不案内なのですが文書1.docmには何か書き込んで置くのでしょうか?  やりたい事は ワードを開いた時にエクセルにあるA1:風袋 B1:実重量 C1:総重量を ワードに表示させ、C1の総重量を縦倍角で表示出来ればよいのですが 質問と変わるかも知れませんがワードで印刷するかエクセルで印刷するかの違いで 目的は一緒です。

その他の回答 (5)

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.5

すみませんでした、総重量なので >ActiveDocument.Tables(1).Cell(2, 3).Range.Text = TextBox1.Value * TextBox2.Value は ActiveDocument.Tables(1).Cell(2, 3).Range.Text = TextBox1.Value + TextBox2.Value ですね(足し算) >書き込むと 実行時エラー 型が一致しません。 テキストボックスが全角数値 あるいは半角でも文字が含まれていればエラーかと思います。 ただ私もいちいちユーザーフォームを開かずとも、マクロでシートの値をWordの表へ代入すればと思います。 足し算の計算もエクセル上で行っておくという方法もあります。

acecon
質問者

補足

ありがとうございます。 ActiveDocument.Tables(1).Cell(2, 3).Range.Text = TextBox1.Value + TextBox2.Value 上記を実行しますと文字列の足し算になりTextBox1=12 TextBox2=34とすると Cell(2, 3)に1234と入ってしまいます。  そうですね、私の質問が悪く、現在は エクセルtest1.xlsmのA1:風袋 B1:実重量 C1付近に:総重量(縦倍角)をワードオブジェクトで作成 このオブジェクトをダブルクリックするとワードが起動し編集可能になり、風袋+実重量の結果を キーボード入力し確定しています。この部分をマクロで自動入力したいのです。 エクセルで作ってしまったのでこうなってしまいましたが 改訂版としてワードの差し込み印刷でする事を検討中です。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 全体のレイアウトが見えてこないけれども、Word では、特別なことがない限りは、めったにUserFormを立ち上げることはありません。 Excelとリンクさせるなら、差し込み文書(OLE)でExcelのブックとつなげばよいのではありませんか? C = A + B  例 差し込み印刷の[宛先の選択] --[差し込みフィールドの挿入] {MERGEFIELD "風袋"} {MERGEFIELD "実重量"} {= A1 + B1 } で、Cは、単なる計算ですから、表の中で計算させればよいと思います。 ただし、これは一行のみです。 複数行のデータなら、ADO や DAO で、Excelファイルを呼び出して、それをTable(表の挿入) にするなり、TextBox(フィールドの挿入) にして表示させればよいと思います。 以下も計算自体は、計算式{= A1 + B1 }にさせます。 ADOで、Excelファイルを呼び出し、Wordのテーブルに自動的に出すマクロ '標準モジュール Sub Auto_Open()   Dim cnADO As Object   Dim rsADO As Object   Dim i As Long   Dim mySource As String   Dim strQuery As String   Set cnADO = CreateObject("ADODB.Connection")   mySource = ""C:\Documents and Settings\[UserName]\My Documents\test1.xls" 'Excelファイル   With cnADO     .Provider = "Microsoft.Jet.OLEDB.4.0"     .ConnectionString = "Data Source=" & mySource & ";" & _     "Extended Properties=Excel 8.0;"     .Open   End With   strQuery = "SELECT * FROM [Sheet1$]"   Set rsADO = CreateObject("ADODB.Recordset")   rsADO.Open strQuery, cnADO, adOpenKeyset, adLockOptimistic   rsADO.MoveFirst   Do Until rsADO.EOF = True     For i = 1 To 4 '行数分         With ThisDocument.Tables(1)          .Cell(i, 1).Range.Text = rsADO.Fields("風袋")          .Cell(i, 2).Range.Text = rsADO.Fields("実重量")          .Cell(i, 3).Range.Fields.Update '計算式をアップデート         End With         rsADO.MoveNext     Next i     Exit Do 'Wordの表とExcelの表の行数が違っている場合を考慮する   Loop   Set rsADO = Nothing   Set cnADO = Nothing End Sub なお、プロシージャ名を、自動起動はやめるなら、Auto_Openではなく、CommandButton の中に入れてもよいです。 また、Excel側は、タイトル行(シートの1行目)が、 [風袋]  [実重量] と書かれてあり、シート名は、[Sheet1] となっていることが条件です。

acecon
質問者

お礼

この回答への補足 間違えました 補足欄訂正の仕方わからず お礼欄を使わせていただきました。  確かに 最初にエクセルで作成してしまい、総重量Cはポイントを 変えて作りましたが、訳あって縦倍角にする事になり こうなってしまいましたが おっしゃる様にワードの差し込み印刷を使えば良いのではと気づきました。 (いままでワードは不勉強でエクセルの文書作成機能で満足していました)

acecon
質問者

補足

ありがとうございます ワードのUserForm1のVBコードに Private Sub CommandButton1_Click() ActiveDocument.Tables(1).Cell(2, 1).Range.Text = TextBox1.Value ActiveDocument.Tables(1).Cell(2, 2).Range.Text = TextBox2.Value ActiveDocument.Tables(1).Cell(2, 3).Range.Text = TextBox1.Value * TextBox2.Value End Sub を書き込むと 実行時エラー 型が一致しません。 が出て止まってしまいます。 ActiveDocument.Tables(1).Cell(2, 3).Range.Text = TextBox1.Value * TextBox2.Valueの部分が黄色に この時エクセルBook1は開いて置くのですよね Tables(1)はエクセルでいうとSheet(1)でCell(2, 3)はエクセルのRange("A2:C2")をコピーした 内のC:総重量でよいのですよね? よろしくお願い致します。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.3

>ワードに置いたCommandButton1をクリックすると >なにも変化がありません >エクセルのマクロには少し経験がありますが、 >ワードは初めてでして、どこかに >UserForm1.Showは必要ないのでしょうか? 最初にコマンドボタンでUserFromを表示させます。 Private Sub CommandButton1_Click() UserForm1.Show End Sub は必要です。 Private Sub UserForm_Initialize() ~ End Sub は、UserForm上のコードです。InitializeはUserFromを開いたときに実行されます。 UserFromにはTextBox1とTextBox2が配置されていると思いますが?

acecon
質問者

補足

補足をつける所を間違えました 大変失礼いたしました。 ありがとうございます ワードのUserForm1のVBコードに Private Sub CommandButton1_Click() ActiveDocument.Tables(1).Cell(2, 1).Range.Text = TextBox1.Value ActiveDocument.Tables(1).Cell(2, 2).Range.Text = TextBox2.Value ActiveDocument.Tables(1).Cell(2, 3).Range.Text = TextBox1.Value * TextBox2.Value End Sub を書き込むと 実行時エラー 型が一致しません。 が出て止まってしまいます。 ActiveDocument.Tables(1).Cell(2, 3).Range.Text = TextBox1.Value * TextBox2.Valueの部分が黄色に この時エクセルBook1は開いて置くのですよね Tables(1)はエクセルでいうとSheet(1)でCell(2, 3)はエクセルのRange("A2:C2")をコピーした 内のC:総重量でよいのですよね? よろしくお願い致します。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

エクセルのAとBをワードのUserFormに表示する事が出来ません A、BがBook1というファイルの一番上のシートの 2行目のA列、B列として Word上のUserFormのInitializeに Private Sub UserForm_Initialize() Dim xlApp As Object Dim xlBook As Object Set xlApp = GetObject(, "Excel.Application") Set xlBook = xlApp.Workbooks("Book1") TextBox1.Value = xlBook.Sheets(1).Cells(2, 1).Value TextBox2.Value = xlBook.Sheets(1).Cells(2, 2).Value Set xlApp = Nothing Set xlBook = Nothing End Sub の様なコードは参考になりますでしょうか。 Private Sub CommandButton1_Click() ActiveDocument.Tables(1).Cell(2, 1).Range.Text = TextBox1.Value ActiveDocument.Tables(1).Cell(2, 2).Range.Text = TextBox2.Value ActiveDocument.Tables(1).Cell(2, 3).Range.Text = TextBox2.Value * TextBox2.Value End Sub でWordの表へです。

acecon
質問者

補足

早々のアドバイス ありがとうございます。 早速、コピペさせて頂き、 ワードに置いたCommandButton1をクリックすると なにも変化がありません エクセルのマクロには少し経験がありますが、 ワードは初めてでして、どこかに UserForm1.Showは必要ないのでしょうか?

回答No.1

代案と言うか・・・ 1. 適当なセルに解を表示させる 2. コピー 3. [Shift]押しつつ 編集メニュー 4. 図のリンク貼り付け 5. 図の書式設定で高さのサイズのみ200% 6. 目的の位置に配置 参考まで

acecon
質問者

補足

早速の回答ありがとうございます。 現在、お答頂いたようにして編集しておりますが  一連の作業をワ-ドを開いた時に マクロで実行させたいと思い質問させて頂きました。

関連するQ&A