• ベストアンサー

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に使えないようなので、エラーになってしまいます。

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

  • ベストアンサー
  • 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