• ベストアンサー

エクセルVBAで次のような式の作成は可能でしょうか

エクセルでセルの値を取得する時に Range("B2")=Range("A1") のように式を作成しますが 上のような形式で、(「Copy」&「Paste」を使用しない式で) ワード文書の一行目の文字列をエクセルのセルに取得出来るでしょうか 例) Range("B2")=『Bunsyo.doc,一行目の文字』 (又は、最初の表のRange("A1")の文字)のような感じで取得したいのですが Office製品同士でもこのような式は作成できないのでしょうか。 なにか方法がありましたら教えていただきたいのです、どうかよろしくお願いします

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

  • ベストアンサー
noname#29107
noname#29107
回答No.2

簡易的に1行目だけを取り出すなら、#1さんの回答を参考に書いてみると、 Sub test() Dim wdapp As Object Set wdapp = CreateObject("word.Application") wdapp.documents.Open Filename:=ThisWorkbook.Path & "\" & "okwebtest.doc" wkwdth = wdapp.activedocument.PageSetup.charsline Range("A1").Value = wdapp.activedocument.Range(Start:=0, End:=wkwdth) wdapp.Application.Quit Set wdapp = Nothing End Sub とかでもいいかもしれません。

その他の回答 (1)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.1

さあ良い回答が上がるでしょうか。私も興味があります。WordVBAのことを良くご存知の方は世の中におられると思いますが、OKWEBを見ておられる層の人におられるかどうか。過去の質問や回答も極く少ないように思います。解説書も2-3冊旧いのを知ってますが、新旧とも殆ど大型書店でもみかけません。WEBでも断片的なものが多いです。今後勉強されるには、苦難の道が待っているかも知れません。私見では米国での本でも探さないとないかもしれない。 それとエクセルやアクセスのようなセルやレコード・フィールドなどと匹敵する概念がワードではあるのかどうか。 一応paragraphsが最小単位のようです。 ビジネスなどで、WORD->EXCELのケースがあまり考えられないこともあると思います。 下記をエクセルVBAのVBE画面に貼りつけ実行して見てください。 Filename:="OKWEB回答.doc"を適当なワード文書に置換えて下さい。 Sub test01() Dim wdapp As Object Set wdapp = CreateObject("word.Application") wdapp.Documents.Open Filename:="OKWEB回答.doc" i = 1 Set 段落 = wdapp.Documents(1).paragraphs(1) Cells(i, 1) = 段落 For i = 1 To 30 Set 段落 = 段落.Next If Err <> 0 Then GoTo 終了 End If Cells(i, 1) = 段落 Next i 終了: Set wdapp = Nothing End Sub これとて何に使えるのと言う代物ですが、質問のムードの 答えにはなっているかもしれません。

syu_7
質問者

補足

早速のレス有難うございます "OKWEB回答.doc"のファイル名にバス名を入れ "C:\OKWEB回答.doc"のように書き直して実現しました このコードがどのように動作しているのか検証してみます >過去の質問や回答も極く少ないように思います 本当に仰る通りです、私も過去スレを検索したのですがなかなかありませんでした もうしばらく他の方法のレスがあるかも知れないので待ちたいと思います 有難うございました

関連するQ&A

  • エクセルVBAで教えて下さい。

    A1のセルに [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 A2のセルに [ 6-10] -5.12224e-04 4.07480e-04 -2.73746e-04 -1.77853e-02 -2.13805e-03 A3のセルに [11-15] -6.88489e-03 -2.06765e-02 -9.44633e-03 6.97059e-03 -1.28400e-02 と、このような感じでA7セルまで同じ感じでスペースで空いた数値が入力されています。 A8のセルのみ [36-37] -6.39210e-03 -1.55806e-03 と入力されております。 まず行いたいのはスペースが空いてる部分で、それぞれの数値を各セルに分けたいです。 A1のセルに入力されている [ 1- 5] 4.05398e-01 3.63385e-01 -2.22992e-01 9.89158e-03 -6.43695e-02 ならば A1に[1-5] B1セルに4.05398e-01 C1セルに3.63385e-01 のように これをA1からA8のセルで行ったあと指定のセルを30行目に貼り付けます。 E1→A29 C2→B29 D2→C29 E2→D29 E3→E29 F3→F29 B4→G29 D5→H29 E5→I29 F5→J29 貼り付けのデータは増えていきます。つまり、30行目にデータが入ってる場合は そのデータが1行下の行に下がり、新たなデータが30行目に追加されます。 このようにして、データが最大で58行目まで追加される可能性があります。 最小であれば30行目、31行目の2つしかない場合あります。 この時、0の近似値を各列のセルから探し、当てはまるセルを赤く塗り潰すというのが 今回行いたいことです。 A列ならA30~A58までの中で0の近似値を探し、当てはまるセルを赤く塗り潰す。 ただ空白の場合は無視してもらいたいです。0の近似値だと空白が選択されてしまうので。 近似値探しの前までならマクロがありますのでご参照下さい。 Sub Macro4() ' ' Macro4 Macro ' ' Range("A1:A8").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(7, 1), Array(21, 1), Array(34, 1), Array(47, 1), _ Array(60, 1)), TrailingMinusNumbers:=True Range("A1").Select Range("E1").Select Selection.Copy Range("A29").Select ActiveSheet.Paste Range("C2:E2").Select Application.CutCopyMode = False Selection.Copy Range("B29").Select ActiveSheet.Paste Range("E3:F3").Select Application.CutCopyMode = False Selection.Copy Range("E29").Select ActiveSheet.Paste Range("B4").Select Application.CutCopyMode = False Selection.Copy Range("G29").Select ActiveSheet.Paste Range("D5:F5").Select Application.CutCopyMode = False Selection.Copy Range("H29").Select ActiveSheet.Paste Range("J7").Select Application.CutCopyMode = False Range("A29:K29").Select Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A29:K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Range("A29").Select Range("A1:F8").Select Selection.ClearContents Range("A1").Select Range("K29").Select With Selection.Interior .Pattern = xlNone .TintAndShade = 0 .PatternTintAndShade = 0 End With Selection.NumberFormatLocal = "G/標準" End Sub わかりずらい質問ですみませんが、ご指導の程 お願い致します。

  • エクセルVBAでコピーすると行の高さが低くなる

    いつもお世話になってます。 エクセル2003のVBAで、セルの範囲を指定してコピーすると行の高さが低くなってしまいます。その他の書式は、変化せずうまくコピーできています。以下がプログラムです。 Sub copy_hyou() Worksheets("sheet1").Activate Range("A1:K24").Copy 'セルA1からK24をコピーします。 Range("A25").Select 'A25からペイストします。 ActiveSheet.Paste End Sub どう直せば、行の高さもコピーできるでしょうか? お休み中すみませんがよろしくお願いいたします。

  • EXCEL VBAのオフセットの使い方について

    EXCEL VBAのOffsetの使い方で質問があります。 (1)選択したセルをコピーする (2)選択したセルの下10行全部に貼り付ける という処理をしたいのですが、 i = Selection.Address With Range(i) .Copy .Offset(10, 0).PasteSpecial Paste:=xlPasteFormulasAndNumberFormats End With というコードだと、10行下のセルのみに貼り付けがされてしまい、 下10個のセル全部に貼り付けができません。 Range()を使うのではないかと思ったのですが、うまく出来ませんでした。 よろしくお願いいたします。

  • Excelの三つのVBAを一つにまとめる。

     初めまして、よろしくお願いします。当方全くの素人でVBAの基礎もよくわからず、ネットから拾ってきていじった三つのVBAがあります。この三つ、一つ一つは個別に機能するのですが、VBAとして正しいのかさえよく解っていません。この三つを一つにまとめて、同時に機能するようにしたいと頭を抱えています。 Sub TEST() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Range("b10:b20").Insert shift:=xlShiftToRight Range("b10:b20").Value = Range("a10:a20").Value Application.OnTime TimeValue("09:00:00"), "TEST" Application.ScreenUpdating = True Application.EnableEvents = True ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST1() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c30:c40").Copy Range("d30:d40").PasteSpecial Paste:=xlPasteValues Range("b30:b40").Copy Range("c30:c40").PasteSpecial Paste:=xlPasteValues Range("a30:a40").Copy Range("b30:b40").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("01:00:00") Application.OnTime nextTime, "TEST1" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________ Sub TEST2() Application.ScreenUpdating = False Application.EnableEvents = False ActiveSheet.Calculate Dim myCnt As Long Range("c50:c60").Copy Range("d50:d60").PasteSpecial Paste:=xlPasteValues Range("b50:b60").Copy Range("c50:c60").PasteSpecial Paste:=xlPasteValues Range("a50:a60").Copy Range("b50:b60").PasteSpecial Paste:=xlPasteValues nextTime = Now() + TimeValue("00:10:00") Application.OnTime nextTime, "TEST2" Application.ScreenUpdating = True Application.EnableEvents = True ActiveSheet.Calculate ActiveWorkbook.Save End Sub ________________________________________________________________  解る方、よろしくお願いします。

  • エクセルVBAで別範囲のセル書式設定を利用したいと思っています。

    エクセルVBAで別範囲のセル書式設定を利用したいと思っています。 最近、 Worksheets("Sheet2").Range("B1:B10").Formula = Worksheets("Sheet1").Range("B1:B10").Formula のような式を覚えたので、同じようにRangeを利用して別範囲の書式をコピーしたいと考えましたが、 .Formula に換えるプロパティがわかりません。 試しに .font.bold としても反応しませんでした。 Worksheets("Sheet1").Range("B1:B10").Copy Worksheets("Sheet2").Range("B1:b10").PasteSpecial Paste:=xlPasteFormats の2行より短くはならないのでしょうか? 宜しくお願いします

  • エクセルVBAの貼付けについて

    エクセルVBAの貼付けについて シートAとBがあって、シートBの1~7列をコピーし、シートAの最終行に貼り付ける方法を教えて下さい。 下記のように書いてみたのですがダメでした。 Sheets("B").Select Rows("1:7").Select Selection.Copy Sheets("A").Select With Range("A1").End(xlDown).Offset(1, 0) .ActiveSheet.Paste End With

  • Excel VBAの繰り返し構文について

    A列に日付、B列に曜日、C列に休、D列に1直、E列に2直、という形の年間シフトを作成しています。 初期値としてA2セルに数字を入力→C列が空白の時だけD列に記入するマクロを作成したと思っています。 現在仮として、 Sub C列のセルが空白の行のD列に数値を入力() 下端行 = Range("A" & Rows.Count).End(xlUp).Row '下端検出 For 行 = 3 To 下端行 '1行目から下端行まで1行ずつ繰り返す If Range("C" & 行).Value = "" Then 'その行のC列のセルの値が空白の時 Range("A2").Copy 'A2をコピーする Range("D" & 行).PasteSpecial Paste:=xlPasteFormulas 'その行のA列のセルを起点に 'して数式を貼り付ける End If Next End Sub というマクロを置いていますが、「Range("A2").Copy」の部分を 「A2を初期値として、最初にC列が空白でなくなる時まで初期値を繰り返し、次にC列が空白になった場合は初期値+1の数をD列に入力する。 ただし初期値+1の最大数は6までとする(要するに1~6の繰り返しです)」 という感じに変更したいのですが、どうすればいいのかさっぱりです…。 VBAレベルはこの質問をする程度なのでかなり初級です。

  • VBAの勤務割表の式を短く

     月間の勤務割表を作成しています。 1列3行を一枡として一人・一日の枡とし、勤務の割り振り状態を表示するものです。 列に日付、行を個人名(max16名)とし1列3行を名前の定義で13種類作成してあります。 別シートの各セルの入力番号に応じて13種類を貼り付けていますが、式を簡単にできませんでしようか?  お教えくださいませんでしょうか?勉強不足は否めませんが。 尚名前の定義は、1行3列に1--で勤務1・""-""で日勤・""公休""で公等にしてあります。 OS Windows7 Office2010 Sub 図形の貼付け2() If Worksheets("メイン").Range("J9").Value Then Select Case Worksheets("メイン").Range("J9").Value 1人-1日 Case 1: ActiveSheet.Range("勤務1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 2: ActiveSheet.Range("勤務2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 3: ActiveSheet.Range("勤務3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("日勤1").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("日勤2").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("日勤3").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select Else Select Case Worksheets("メイン").Range("I9").Value Case 2: ActiveSheet.Range("明け").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 4: ActiveSheet.Range("夜勤").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 5: ActiveSheet.Range("公").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 6: ActiveSheet.Range("有").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 7: ActiveSheet.Range("特").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 8: ActiveSheet.Range("振").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False Case 9: ActiveSheet.Range("欠").Select Selection.Copy Range("D10").Select ActiveSheet.Paste Application.CutCopyMode = False End Select End If End Sub

  • VBAでの結合セルのコピー&ペースト

    こんにちは。 EXCELのVBAでマクロを作成しています。 セルの値のコピー&ペーストを行おうとしているのですが、結合されているセルのペーストのときに、「同じ結合セルが必要です」とエラーになってしまいます。 例えば、A1とA2が結合されたセル+A3をコピー Worksheets(x).Activate Range("A1:A3").Selection Range("A1:A3").Copy 別のシートで、B1とB2が結合されたセル+B3にペースト Worksheets(y).Activate Range("B1:B3").Paste セルの結合を解除すればうまくいきます・・・ セルを結合したままペーストしたいのですが、どうやら間違っているようです(ノ_・。) どなたか教えてください。 よろしくお願いします。

  • エクセルVBAのテキスト保存の仕方

    次のようなマクロがあり、最後の行でできあがった表をクリップしています。 現在そのクリップボードの表をテキストに手動で貼り付けてその都度保存しているのですが これを自動的にテキスト保存できればと思っています。 更にファイル名は左上1セルめ(この場合多分A1000のセル)にある文字列の最初から10文字をファイル名にしたいです。 マクロはよく知らないので記述の仕方を教えてください。 ※このマクロはマクロの記録により自動作成したものです。 よろしくお願いします。 (office2013/Windows7) Sub rep1000行削除集約() Dim i As Long Range("AC1.AI650").Copy Range("A1000").PasteSpecial Paste:=xlPasteValues Range("A1000:A2000").Value = Range("A1000:A2000").Value Range("A1000:A2000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete Application.Goto Reference:="R1000C1" Range("A1000:G1000").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy End Sub

専門家に質問してみよう