• ベストアンサー

ワードVBAで、段落のタブの数を数えたい。

ワード2002使用です。 2段落目に複数のタブが入力されています。 ワードVBAで、選択した段落のタブの個数を数えたい。 sub タブ() Dim tab数 As Integer ActiveDocument.Paragraphs(2).Range.Select tab数 = Selection.Paragraphs.tabs.Count←ここがよくわかりません msgbox tab数 end sub よろしくお願いします。

  • ken123
  • お礼率73% (299/409)

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

  • ベストアンサー
  • masa_019
  • ベストアンサー率61% (121/197)
回答No.1

こんにちは。 勘違いしているかも知れませんが、 Sub タブ() Dim tab数 As Integer Dim Character For Each Character In ActiveDocument.Paragraphs(2).Range.Characters If Character = vbTab Then tab数 = tab数 + 1 End If Next MsgBox tab数 End Sub こういうことでしょうか?

ken123
質問者

お礼

masa_019様早速のご回答ありがとうございました。 まさしくご回答いただいた通りで、適正な処理ができました。 あれこれこちらも調べて、 sub タブ() Dim i As Integer Dim inttabpos As Integer i = 0 inttabpos = 0 Do inttabpos = InStr(inttabpos + 1, para.Range.Text, vbTab) If inttabpos > 0 Then i = i + 1 End If Loop While inttabpos <> 0 And i <= 60 ’最大文字数を想定 end sub instr関数を使っても処理できました。(参考書から) ありがとうございました。今後ともよろしくお願いします。

その他の回答 (1)

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

ワードVBAは自信ありませんが、下記やってみてください。 少数例では正しいよう。「あいまい検索」のチェックをはずし、特殊文字^tでの検索をして、「次を検索」を繰り返し、回数を数えて、下記結果と比べてください。 Sub tabc() Dim tab数 As Integer Dim tf As Boolean 'ブール型 ActiveDocument.Paragraphs(2).Range.Select MsgBox Selection.Text n = 0 Selection.Find.ClearFormatting '検索条件設定 With Selection.Find .Text = Chr(9) .Forward = True .Wrap = wdFindContinue End With '------------------ '繰り返すのはここから tf = Selection.Find.Execute '検索実行:成功したらTRUE Do While tf = True 'tf = True 間、Do~Loop間を繰り返す n = n + 1 With Selection.Find .Execute FindText:=Chr(9) tf = .Execute End With Loop tab数 = n MsgBox tab数 End Sub

ken123
質問者

お礼

imogasi様早速のご回答ありがとうございます。 繰り返し処理の基本ですね。なかなか基本も身につかずいつも申し訳ございません。 vbtabは検索でもChr(9)が使えるのも初めて知りました。 がんばって勉強します。 今後ともよろしくお願いします。

関連するQ&A

  • 選択範囲にある全ての段落の先頭文字を削除するマクロ

    こんにちは。 Word2007において、 「選択範囲にある、全ての段落の、先頭文字を削除する。」 という処理を行うVBAマクロを作成しようとしています。 このマクロは、選択範囲に対して連続で行いたいので、 マクロ実行後に、範囲選択が解除されていない状態である必要があります。 このマクロを記述しようと、自分なりに考えたVBAコードは以下の通りです。 ------------------------------------------------------------ Sub 選択範囲の先頭文字を削除する() '選択範囲にある、全ての段落の先頭文字を削除する。 Set Selection_Range = Selection.Range '次のForループで範囲選択がなくなるので、Rangeオブジェクトで処理範囲を固定している。 For x = 1 To Selection_Range.Paragraphs.Count Dim str As String str = Selection_Range.Paragraphs(x).Range.Text Selection_Range.Paragraphs(x).Range.Text = Right(str, Len(str) - 1) Next Selection_Range.Range.Select End Sub ------------------------------------------------------------ このマクロを、例えば abc def ghi jkl という範囲を選択して実行すると、 abc def ghi jkl となり、 abc def ghi だけが選択された状態になります。 しかし、本来期待している動作を考えると、マクロを実行した後に、 abc def ghi jkl が選択されているようにしたいのです。。 以上の件について、何か良い方法を知っておられる方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。

  • ワードの詳しいスタイルを知らせるマクロ

    ワード2007です。カーソルのおいてある段落のスタイルを知るマクロを作りました。 Sub スタイルを伝える() Dim 範囲 As Range Dim スタイル As Style Set 範囲 = Application.Selection.Range Set スタイル = 範囲.Paragraphs(1).Style MsgBox ("カーソルのあった場所のスタイルは " _ & vbCrLf & vbCrLf & スタイル) End Sub です。その段落が見出し2だったとします。全体ではなしに、二文字だけに、アンダーラインしたとします。スタイルウインドウを見ると、「見出し2+下線」と表示されています。 しかし、上のマクロでは、相変わらず、「見出し2」としかメッセージしてくれません。 「見出し2+下線」とメッセージさせることはできないでしょうか。

  • EXCELからWORDの文章を取得

    set WD=GetObject(,"Word.Appllication") para1=Wd.activedocument.Paragraphs(1).Range.Sentences(1).text で、無事、activeなWordの文章は取れるのですが、 実際にあり、開いているWord文章(D:\aabbcc.docx)を処理しようと set WD=GetObject("D:\aabbcc.docx") para1=Wd.activedocument.Paragraphs(1).Range.Sentences(1).text とするとエラーになります。 どうやったら、取得できるでしょうか?

  • EXCEL VBA Sendkeys {TAB}

    済みません、EXCELのマクロで自動でタブ移動が出来なく困っています。 いろいろ参考にして作ってみましたが、Sendkeysがセルに対して動作していないようです。 ご教授をお願いします。 Private Sub Tab_Count_Click() Worksheets("音楽リスト").Activate Range("A4:AF8").Select For i = 1 To 3 SendKeys "{TAB}", True MsgBox "OK" Next End Sub

  • VBAについて

    エクセルシートで任意に選択されたセルの個数を VBAのUserFormのTextBoxに表示されるのは どのようにしたらよいのでしょうか? 例)エクセルシートで、B2~D2をマウスで選択すると、   UserFormのTextBoxに3と表示されるようにする。 任意に選択されたセルの個数を求めるのは 以下のようにしました↓↓↓ ********************************* * Sub GetAreaValue() *   Dim CELLNUM As Integer *   CELLNUM = Selection.Count * End Sub *********************************

  • word VBA ファイル名 保存

    wordで作成したファイルの最初の第1行名をファイル名として、名前を付けて保存できるマクロを作りたいのですが、うまくいきません。 Sub 保存() Dim ファイル名 As Variant ファイル名 = ActiveDocument.Paragraphs(1) & ".docx" ActiveDocument.SaveAs FileName:=(ファイル名), FileFormat:= _ wdFormatXMLDocument End Sub ではだめなのですが、どなたか添削よろしくお願いします。困っております。なにぶん初心者ですので基本的な文法のミスかもしれないですが、うまくいきません。

  • ワード VBA

    ワードのマクロについて教えてください。 以下のようなマクロをボタンに登録しています。 Sub Macro10() Dim myReg As Object Dim st As String Dim match As Variant Set myReg = CreateObject("VBScript.Regexp") myReg.Pattern = "\x0d\x0d(|$)" myReg.Global = True st = ActiveDocument.Range.Text ActiveDocument.Range(1, 1).Select For Each match In myReg.Execute(st) With Selection .Find.Text = match.Value .Find.Replacement.Text = vbCr .Find.Execute , , , , , , , , , , wdReplaceAll End With Next st = ActiveDocument.Range.Text If myReg.Test(st) Then _ ActiveDocument.Range.Text = myReg.Replace(st, "") Set myReg = Nothing End Sub ここで教えていただきたいのは,上記のマクロを実行するためにボタンを押した際,実行前にカーソルが置かれていたのと同一の場所に実行後のカーソルを戻す方法です。(ちなにみ上記のマクロを実行する際にカーソルが置かれているのは,空白行ではない行の先頭です。※処理とは関係ないかもしれませんが,念のために。) そのような処理を行うには,上記のマクロにどのような記述を追加すればよいのでしょうか。 どなたかご教示いただければと思います。 どうぞよろしくお願いいたします。

  • ワード マクロ

    WORDについての質問です。 現在以下のマクロをツールバーのボタンに登録しています。 Sub Macro1() Dim Para As Paragraph For Each Para In ActiveDocument.Paragraphs '段落単位で With Para.Range.Characters If .First.Text Like "[tk]" Then '先頭を処理 .First.Delete End If End With Next End Sub これによって各段落の頭にある「t」と「k」を消去する処理を行っています。 現在作成を試みているのは,上記の処理を行ったあとに,別の作業をしたあと,いったん消してしまった文頭の「t」「k」をやっぱり復活させたいという場合の処理です。 そのようなマクロを作成し,ツールバーのボタンに登録させたいのですが,うまくできません。 どなたか教えていただければ非常に助かります。 どうかよろしくお願いいたします。

  • word2003 段落について教えて!

    こんばんは wordで「・」と入力して改行すると、次も勝手に「・」(段落)が付きますよね。この状態でTABを押すと次の記号(右矢印みたいなの)に移行します。 これを繰り返すと、最後は手裏剣みたいなマークになりますよね。 そこで質問なのですが、この手裏剣以降に段落をつけることができないのでしょうか?つまり段落数をもっと増やしたいのです 現在は「・」「右矢印」「手裏剣」「●」「右矢印」「手裏剣」「●」「右矢印」「手裏剣」の9つまでしか段落を作れません。 よろしくおねがいします。

  • ワード2003でTabを使用して区切りを

    ワード2003でTabを使用して行の頭だしのタブで段落の区切りをつけたいのですが教えてください (例) 大項目  中項目 小項目 大学校は4年間で (ここでTabキーを使用すると下段の中項目の頭だしとなる)       中学校は3年間で (ここでTabキーを使用すると下段の小項目の頭だしとなる)             小学校は6年間である   と行ったような行で段落を使用するときには いかがでの使用方法か教えていただけませんか

専門家に質問してみよう