• ベストアンサー

Cell内の一部を指定する方法(Word VBA)

Cell内の一部を指定する方法(Word VBA) Word VBAで、特定のCellの中の一部だけを指定するには、どうすればいいのでしょうか。 たとえば、ある表のCell(1, 2)の6~10文字目を指定して、そこだけを太字にするために、 Set Date1 = Table1.Cell(1, 2).Range(Start:=5, End:=10) としても、RangeメソッドはCellに使えないようなので、エラーになってしまいます。

  • krmr
  • お礼率79% (110/138)

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

  • ベストアンサー
  • mimeu
  • ベストアンサー率49% (39/79)
回答No.2

> RangeメソッドはCellに使えないようなので WordのVBA編集画面のオブジェクトブラウザで確認しますと、 Document.Range メソッド → Start:, End: で範囲を指定できる Cell.Range プロパティ(メソッドではない)→ Start: End: の範囲指定はできない 事がわかります。ご指摘の通りです。 それで、   Dim 範囲 As Range   Set 範囲 = ThisDocument.Tables(1).Cell(2, 3).Range   Debug.Print 範囲.Start; 範囲.End などとしてみますと、この Range はセルではなく、 セクションの頭からの位置として、Start, End を持っていることがわかります。 そこで   Set 範囲 = ThisDocument.Tables(1).Cell(2, 3).Range   範囲.End = 範囲.Start + 10   範囲.Start = 範囲.Start + 6 - 1 ' ★注意★ -1 が必要   範囲.Font.Color = wdColorRed   Debug.Print 範囲.Text としてみると、うまくいきました (ここでは太字ではなく赤字にしていますが、おなじことです)

krmr
質問者

お礼

ありがとうございます。これでうまく行きました。

その他の回答 (1)

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

こういうことでしょうか。 文字数が足りなければ、その文字列最後まで選択します。 Sub Test1()  Dim i As Long, j As Long, k As Long  Dim buf As String  Const iSTART As Integer = 5 'スタート  Const iEND As Integer = 10 '終わり    With Tables(1).Cell(1, 2).Range 'セル   .Select   '文字カウント   buf = Selection.Text   For i = iSTART + 1 To Len(buf)    If AscW(Mid(buf, i, 1)) >= 33 Then     k = k + 1    Else     Exit For    End If   Next   If k >= (iEND - iSTART) Then    j = iSTART   ElseIf k > 0 Then    j = k   Else    Exit Sub   End If   Selection.MoveLeft Unit:=wdCharacter, Count:=1   Selection.MoveStart Unit:=wdCharacter, Count:=iSTART   Selection.MoveRight Unit:=wdCharacter, Count:=j, Extend:=wdExtend   Selection.Font.Bold = True   Selection.MoveLeft Unit:=wdCharacter, Count:=1  End With End Sub

krmr
質問者

お礼

ありがとうございます。しかし、ちょっとややこしそうですね。

関連するQ&A

  • エクセルVBAでエクセルのシートの内容をワードの表に移そうとしています

    エクセルVBAでエクセルのシートの内容をワードの表に移そうとしています。 ワードに表を作って その表のフォントサイズや行の高さなどは設定できたのですが、ワードの表の中での文字列の配置がどうしたらいいのかわかりません。 上に述べたことは次のような文で実現しています ※oTableはWord内の表です。 oTable.Cell(i, j).range.Font.Size = 10 oTable.Cell(i, j).range.Font.Bold = True With oTable.Rows(1) .Height = 25 End With 実現したいことは、特定の列だけを右寄せしたいと思っているのですが、 「oTable.range.ParagraphFormat.Alignment 」 「wdAlignParagraphRight」 などを使って記述するのだろうということは想像できるのですが、よくわかっていないので実現できていません。 恐れ入りますが、どなたかご教示いただけないでしょうか?   よろしくお願いします。

  • ヘッダ内の表をマクロ(VBA)で指定する方法

    あるテンプレートからマクロで表内のセルに文字列を挿入しています。 Set newdoc = Application.Documents.Add("雛型.dot", False, wdNewBlankDocument, True) With newdoc.Tables(1) .Cell(1, 1).Range.Text = hensu1 .Cell(3, 1).Range.Text = hensu2 End With 現在は、上記のようなコードで、本文内の表に文字列をセットしていますが、この表をヘッダ領域に移動すると動きません。 ヘッダ領域内の表をマクロから指定する方法を教えてください。

  • VBAで、エクセルからワードへの変換について

    VBAは、全くの初心者で、テキスト等のサンプルコードを参照して書いているのですが 期待通りの動きをしないので、教えてください。 やりたい事は、Excelファイル(A-Fカラム、400行程度)を 1行ページのワードに変換し、400枚のワードファイルを作成します。 その際に、添付画面のように、各カラムを、タイトル、連番、内容などと区分けをして フォントも変えたいです。 下のコードでは、転送は、出来るのですが、1行1ページにならず、また、 エクセルの枠も転送されてしまいます。 ワードVBAも試したのですが、特定文字での検索が難しく、各ページでの 改行位置が異なるため、自分の理解では出来ませんでした。 ワードでテンプレートを作って、Excel VBAから差込になるのでしょうか? よろしくお願い致します。 Sub CopyExcelDataToWord() Dim wsSource As Excel.Worksheet Dim cell As Excel.Range Dim collUniqueHeadings As Collection Dim lngLastRow As Long Dim i As Long Dim appWord As Word.Application Dim docWordTarget As Word.Document Set wsSource = ThisWorkbook.Worksheets(1) With wsSource lngLastRow = .Range("A" & Rows.Count).End(xlUp).Row Set collUniqueHeadings = New Collection For Each cell In .Range("A2:A" & lngLastRow) On Error Resume Next collUniqueHeadings.Add Item:=cell.Value, Key:=cell.Value On Error GoTo 0 Next cell End With Set appWord = CreateObject("Word.Application") With appWord .Visible = True Set docWordTarget = .Documents.Add .ActiveDocument.Select End With For i = 1 To collUniqueHeadings.Count With wsSource .Range("A1").AutoFilter Field:=1, Criteria1:=collUniqueHeadings(i) .Range("A1:D" & lngLastRow).Copy End With With appWord.Selection .PasteExcelTable linkedtoexcel:=False, wordformatting:=True, RTF:=False .TypeParagraph End With Next i For i = 1 To collUniqueHeadings.Count collUniqueHeadings.Remove 1 Next i Set docWordTarget = Nothing Set appWord = Nothing End Sub

  • Word版VBで表の任意の箇所を取得する(Cellメソッド)

    Visual Basic でワードの表を操作する際の方法をお伺いします。 通常は、Cellメソッドを利用して、  ActiveDocument.Tables(1).Cell(2,3) のように、Cellメソッドに行・列を引数として与えますが、セルが結合されている場合に引数はどのように指定するのでしょうか。 会社のPCだと結合されたセルは飛ばして列数を数えているようでしたが、自分のPCだと結合されたセルも数えています。結合されている(他に併合された)セルの行・列を指定するとエラーがでます。 Wordのバージョンによっても違うのでしょうか。あるいはTableオブジェクトのプロパティか何かを指定することで、結合されたセルを数えるかどうかを指定できるのでしょうか。

  • access2000のテーブルデータをexcelの指定したsheetのcellに貼り付けたい!

    仕事で困っています!教えて下さい。 Accsess2000の指定したテーブルデータをExcel2000の指定したbookのsheetのcell位置に貼り付けたいのですがVBAでロジックを組む方法がわかりません。 ぜひぜひ教えて下さい。お願いします。

  • エクセル VBA 範囲指定方法

    エクセルVBA初心者です。 以下の範囲指定について教えてください。 一つの表のK列の一番下のセル(不定)を選択→Range("K65536").End(xlUp).Select その選択されたセルからA3(固定)まで範囲を選択したいのですが、不定セル:固定セル の範囲指定方法が分かりません。 よろしくお願いいたします。

  • MS-WordのVBAで図形サイズの指定(100%)方法

    MS-WordのVBAで図形サイズの指定(100%)方法 Word2000です。VBAは知らない(嫌い)ですが、時々必要になり、通常はマクロ記録したものを多少手直ししたりして使用しています。今回の問題ではマクロ記録すると100%ではなく、ある特定のサイズを指定したように記録されます。100%で指定するには、どのようなコードになるのでしょうか?

  • なぜ張り付けは、「セルを指定+.Paste」ではだ

    なぜ張り付けは、「セルを指定+.Paste」ではだめなのでしょうか? VBAを勉強しているのですが セルを指定+メソッドで セルに対して動作ができると覚えていました。 例えば、 Range("A1").Copy もRange("A1")でセルを指定して、Copyメソッドを使っています。 しかし、張り付けに関しては、 Range("A1").Paste をすると、 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438)」 と言うエラーになってしまいます。 それに、 「 Range("A1")」を入力して、「.」を入力すると、ヒントが出ますが そこにCopyはあるけど、Pasteは出てきません。 Pasteは特別な扱いなのでしょうか? そもそもPasteはメソッドではないのでしょうか? ちなみに Sub test() Range("A1").Copy Range("A2").PasteSpecial End Sub なら問題なくできました。 どなたか Range("A1").Paste がエラーになる理由を教えてください。 ご回答よろしくお願いします。

  • Word vbaからexcel vbaへ値を渡すことができますか?

    Word vbaからexcel vbaへ値を渡すことができますか? 現在Wordでvbaを組んでいますが、Wordで取得した値をexcel vbaで利用したいのに変数の値がnullになってしまい四苦八苦しています。Application間で値を渡すには何か特別な処理がいるのでしょうか?(参照は設定済みです) やりたい事は、Wordで「ShipTo」文字列をsearch→後ろの番号を変数へ格納→excel vbaを起動→シートの表中からWordで取得した番号を元に文字列を検索しセルに入れる(VLOOKUPを使用)→セルの文字列をWord vbaへ返しWord側で利用、という処理です。excel vbaの起動は以下のように記述しています。 ------------------excelVBAの起動 Sub getExcelTable() Dim xLobj As Object, myObj As Object Set xLobj = CreateObject("excel.application") xLobj.Visible = True Set myObj = xLobj: workbooks.Open (ThisDocument.Path & "\sample.xls") myObj.Run ("'sample.xls'!getStr") MsgBox strA ←これがでない MsgBox strB ←これがでない Set xLobj = Nothing End Sub -----------------excel vbaのコード Option Explicit Dim endRow As Integer, ShipTo As Variant Dim strA As Variant, strB As Variant Sub getStr() endRow = Range("a65536").End(xlUp).Row MsgBox ShipTo ←これがでない Cells(endRow + 2, 1).Select Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",3,0)" strA = ActiveCell.Text Cells(endRow + 2, 2).Select Selection.Value = "=VLOOKUP(" & ShipTo & ",$A$1:$T$" & endRow & ",13,0)" strB = ActiveCell.Text End Sub Word vbaからexcel vbaは起動します。Word側、excel側で使う関数はグローバル変数にし、variant型にしてみましたが値がわたりません(Wordでは取得できています)。Application間で値を渡す方法、もしくは根本的にもっとうまい方法があればご教示ください! WinXP、Office2003を使用です。

  • ACCESS VBA レコード位置をマウスで指定

    いつもお世話になっています。 ACCESS のテーブルにデータ入力をしていますが、データ入力後、その各レコードをマウスで指定して別データを入力したいと考えています。 エクセルVBAであれば、SET RANGE = APPLICATION.INPUT() を使えばマウスで範囲指定ができると思うのですが、ACCESS でそういった方法はできないでしょうか? マウスでレコード位置を指定する方法があれば教えていただきたいです。 よろしくお願いします。

専門家に質問してみよう