- ベストアンサー
ワードVBAで、段落のタブの数を数えたい。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 勘違いしているかも知れませんが、 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 こういうことでしょうか?
その他の回答 (1)
- imogasi
- ベストアンサー率27% (4737/17068)
ワード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
お礼
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 が選択されているようにしたいのです。。 以上の件について、何か良い方法を知っておられる方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。
- ベストアンサー
- その他MS Office製品
- ワードの詳しいスタイルを知らせるマクロ
ワード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+下線」とメッセージさせることはできないでしょうか。
- ベストアンサー
- Word(ワード)
- 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(エクセル)
- 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 *********************************
- ベストアンサー
- Visual Basic
- word VBA ファイル名 保存
wordで作成したファイルの最初の第1行名をファイル名として、名前を付けて保存できるマクロを作りたいのですが、うまくいきません。 Sub 保存() Dim ファイル名 As Variant ファイル名 = ActiveDocument.Paragraphs(1) & ".docx" ActiveDocument.SaveAs FileName:=(ファイル名), FileFormat:= _ wdFormatXMLDocument End Sub ではだめなのですが、どなたか添削よろしくお願いします。困っております。なにぶん初心者ですので基本的な文法のミスかもしれないですが、うまくいきません。
- ベストアンサー
- その他MS Office製品
- ワード 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 ここで教えていただきたいのは,上記のマクロを実行するためにボタンを押した際,実行前にカーソルが置かれていたのと同一の場所に実行後のカーソルを戻す方法です。(ちなにみ上記のマクロを実行する際にカーソルが置かれているのは,空白行ではない行の先頭です。※処理とは関係ないかもしれませんが,念のために。) そのような処理を行うには,上記のマクロにどのような記述を追加すればよいのでしょうか。 どなたかご教示いただければと思います。 どうぞよろしくお願いいたします。
- ベストアンサー
- その他MS Office製品
- ワード マクロ
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年間である と行ったような行で段落を使用するときには いかがでの使用方法か教えていただけませんか
- 締切済み
- その他MS Office製品
お礼
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関数を使っても処理できました。(参考書から) ありがとうございました。今後ともよろしくお願いします。