Word2007で選択範囲の先頭文字を削除するVBAマクロの作成方法について

このQ&Aのポイント
  • Word2007で、選択範囲にある全ての段落の先頭文字を削除するVBAマクロを作成する方法について質問があります。
  • 現在、選択範囲に対して連続で処理を行いたいため、マクロ実行後に範囲選択が解除されていない状態である必要があります。
  • 具体的なVBAコードの例や、期待する動作についてのアドバイスをいただけないでしょうか。
回答を見る
  • ベストアンサー

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

こんにちは。 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 が選択されているようにしたいのです。。 以上の件について、何か良い方法を知っておられる方がいらっしゃれば、是非教えて頂きたいと思います。 では、よろしくお願い致します。

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

  • ベストアンサー
  • DreamyCat
  • ベストアンサー率56% (295/524)
回答No.1

2010版なので違っていたらすみません。 2010版だと単にコードのミスのようにしか思えないエラーになります。 rangeを取り除けば1文字削除されるだけで元の範囲が選択されます。 1回目だけあらかじめ選択しておけば、その後は繰り返し実行しても次々に1文字が減っていくだけです。  Selection_Range.Range.Select End Sub   ↓ Selection_Range.Select End Sub

MetalLover
質問者

お礼

御回答ありがとうございます。 御提案された通り、Selection_Range.Range.Selectを、 Selection_Range.Selectに変更すると上手く行きました。 せっかくなので、この際お聞きしたいのですが、 段落の先頭文字を削除する時に、僕はRight関数を使って str = Selection_Range.Paragraphs(x).Range.Text Selection_Range.Paragraphs(x).Range.Text = Right(str, Len(str) - 1) としたのですが、もっと簡単に削除する方法はありますでしょうか? 恐れ入りますが、よろしくお願い致します。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

>段落の先頭文字を削除する時に、僕はRight関数を使って Mid(str, 2) です。

MetalLover
質問者

お礼

御回答ありがとうございます。 Midという関数の存在は知りませんでした。 すごく便利ですね。 おかげでやりたいことができるようになりました。

関連するQ&A

  • エクセルで,スペースのある文字列を列ごとに分けるには?

    例えば abc def ghi jkl mno pqr という文章があったとします。 それを |abc|def|ghi| ------------- |jkl|mno|pqr| みたく,スペースのあるところで区切るにはどのようにすればよいでしょうか。教えてください。

  • 秀丸の検索・置換の正規表現の最短一致の挙動が変です

    秀丸の検索または置換の正規表現の 最短一致での挙動ですが、 /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz の先頭にカーソルを置いた状態で、 (質問1) 正規表現のチェックボックスをチェックして /.*$ で検索すると /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されると思うのですが 実際には /def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます。 なぜでしょうか。 (/abc/.*$とするとカーソルがある /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz ではなく次の行以降の /abc/def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます?) (質問2) 正規表現のチェックボックスをチェックして /.*?$ で検索すると最短一致となるため /uvw.xyz が検索されると思うのですが 実際には /def/ghi/jkl/mno/pqr/st/uvw.xyz が検索されてしまいます。 なぜでしょうか。 (なお、/[^/]*$では/uvw.xyzが検索されます)

  • マクロを使い選択範囲を次々と変えて並べ替えたい

    マクロ作成は 範囲選択 A4~G12 マクロ記録開始 並べ替え E列 降順 マクロ記録終了 でマクロを作成し 次に範囲選択 A14~G22でこのマクロを実行すると範囲選択が前と同じA4~G12が並べ替えられてしまいます。 マクロの中を見ると範囲選択 A4~G12が書かれてしまっています。 次のように、選択範囲を次々と変えて並べ替えるマクロを作りたいのですがお教え願います。 1. 範囲選択 A4~G12を選択 マクロ実行で選択範囲をE列の値で降順並べ替える 2. 範囲選択 A14~G22を選択 マクロ実行で選択範囲をE列の値で降順並べ替える 3. 範囲選択 A28~G32を選択 マクロ実行で選択範囲をE列の値で降順並べ替える

  • 削除のマクロ(エクセル)

    Sub test()  Selection.Delete  Selection.Interior.ColorIndex = xlNone  Selection.Borders(xlDiagonalDown).LineStyle = xlNone  Selection.Borders(xlDiagonalUp).LineStyle = xlNone  Selection.Borders(xlEdgeLeft).LineStyle = xlNone  Selection.Borders(xlEdgeTop).LineStyle = xlNone  Selection.Borders(xlEdgeBottom).LineStyle = xlNone  Selection.Borders(xlEdgeRight).LineStyle = xlNone  Selection.Borders(xlInsideVertical).LineStyle = xlNone  Selection.Borders(xlInsideHorizontal).LineStyle = xlNone  Selection.ClearContents End Sub 上記マクロは、まず図形が選択状態にある時はそれを削除します。 また、セルが選択状態にある時は、選択範囲内の文字を消し、罫線を消し、塗りつぶしの色を消します。 上記マクロを実行すると不具合が生じます。 選択範囲外のデータが消えたり、選択範囲外のセルが移動したりしてしまいます。    c5 d5 e5 f5    c6 d6 e6 f6    c7 d7 e7 f7    c8 d8 e8 f8 上記の全てのセルにデータが入力されている場合、d6:e7を選択してマクロを実行すると、d6:e8のデータが消えてしまいます。 d6:d7を選択してマクロを実行すると、d6:e7のデータが消える上にf6:f7が一セル分左に移動してしまいます。 マクロ内の"Selection.Delete"をコメントにして実行すると不具合は生じることなく、選択範囲内のデータだけに作用させることができます。 ただ、"Selection.Delete"を外すと、「図形が選択されている時は図形を削除する」ができなくなります。 どのようにマクロを修正すれば、セルのデータと図形のそれぞれを不具合なく削除させることができるでしょうか?

  • excelの重複データの削除方法。

    excel2003で重複する値を自動的に削除する方法を探しています。 現在、以下のような手順で作業をしています。     A   B   C 1 ○○○ 100 ABC 2 ▼▼▼ 200 DEF 3 ◇◇◇ 300 GHI 4 ■■■ 400 JKL 5 △△△ 500 MNO ↑の元データに      A   B   C 1 ○○● 100 ABC 2 ◇◆◇ 300 GHI ↑のデータを追加(貼り付け)して並び替えをすると      A   B   C 1 ○○○ 100 ABC 2 ○○● 100 ABC 3 ▼▼▼ 200 DEF 4 ◇◇◇ 300 GHI 5 ◇◆◇ 300 GHI 6 ■■■ 400 JKL 7 △△△ 500 MNO というデータが出来るとします。 「C列の値を基準」として、重複している箇所を検出・削除し (上の例で言えば、1・2・4・5の行。)      A   B   C 1 ▼▼▼ 200 DEF 2 ■■■ 400 JKL 3 △△△ 500 MNO というデータにしたいと考えております。 重複した値のどちらか一方を残す、という方法ではなく、 重複した値の全てを削除する、という方法が解りません。 手作業で1つ1つ削除していけばいいのですが、本物のデータは何千件とあるので 手作業では時間が掛かりすぎてしまいますので…。なにかよい方法はないでしょうか? 簡単な方法であれば大変助かりますが、マクロなどを使用する方法でもかまいませんのでご教授下さい。 よろしくお願い致します。

  • PHP 配列について

    PHPで簡単なプログラムを作っています。 上手い方法があれば教えてください。 例えば $arr = array(); $arr(0) = "ABC"; $arr(1) = "DEF"; $arr(2) = "GHI"; $arr(3) = "JKL"; $arr(4) = "MNO"; この様な配列があり、これを以下の様に「特定のデータを削除し空いているキーを詰めたい」場合どうしたら良いのでしょうか? この場合は"DEF"を削除。 $arr(0) = "ABC"; $arr(1) = "GHI"; $arr(2) = "JKL"; $arr(3) = "MNO"; アドバイスお願いします。

    • ベストアンサー
    • PHP
  • excelでデータの位置を変えたい

    abcdefghijklmn~と続いているものを abc def ghi jklと変えることはできるでしょうか? よろしくお願いします

  • エクセルのマクロについて質問、次のマクロが欲しいです。「選択した範囲のセルに左から○○番目に半角スペースを挿入」

    エクセルのマクロについて質問、次のマクロが欲しいです (1)選択した範囲のセルに左から○○番目に半角スペースを挿入。 例:○○を1とした場合 1234 5678 9101 1235 5679 9102 1236 5680 9103 ↓ 1■234 5■678 9■101 1■235 5■679 9■102 1■236 5■680 9■103 *■はスペースのつもりです (2)選択した範囲のセルに右から○○番目に半角スペースを挿入。 例:○○を1とした場合 1234 5678 9101 1235 5679 9102 1236 5680 9103 ↓ 123■4 567■8 910■1 123■5 567■9 910■2 123■6 568■0 910■3 (3)選択セルの1番右の文字を上付き文字。 例: 1234 1235 1236 ↓ 1234←4を上付き 1235←5を上付き 1236←6を上付き 「選択した範囲のセル中にスペースやタブがあれば全部削除」 といった似たようなマクロを発見したのですが。これを利用してできないでしょうか? Sub 空白除去() Dim rng As Range Dim str as String For Each rng In Selection ' --- タブを除去 str = Replace(rng.Value, vbTab, "") ' --- 半角スペースを除去 str = Replace(str , " ", "") ' --- 全角スペースを除去 rng.Value = Replace(str , " ", "") Next End Sub お力添えよろしくお願いします。

  • ワードで選択範囲だけの改行を削除するマクロ

    こんにちは いつもお世話になっています ワード2010で、選択範囲だけの部分の改行を削除するマクロを記録マクロで作ったのですが、選択部以外もすべて改行してしまいます。どこがいけないのでしょうか。あるいは、操作の仕方でしょうか。以前は使えていたと思うのですが、仕様が変わったのでしょうか。 任意の範囲を選択しておいて、記録を開始しました。 よろしくお願いします。 Sub Macro1() ' ' Macro1 Macro ' ' Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = "" .Forward = True .Wrap = wdFindAsk .Format = False .MatchCase = False .MatchWholeWord = False .MatchByte = False .MatchAllWordForms = False .MatchSoundsLike = False .MatchWildcards = False .MatchFuzzy = False End With Selection.Find.Execute Replace:=wdReplaceAll End Sub ネット上で見つけた以下のマクロでもすべての改行が削除されます。 http://okwave.jp/qa/q960285.html Sub Macro14() Selection.Find.ClearFormatting Selection.Find.Replacement.ClearFormatting With Selection.Find .Text = "^p" .Replacement.Text = " " End With Selection.Find.Execute Replace:=wdReplaceAll End Sub

  • 複数種類の括弧でくくられてない文字をマッチングさせたい

    Perlの正規表現で質問です。 複数種類の括弧、たとえば()、【】、[]などで囲まれていない文字をマッチングさせたいのです。 括弧は1行に複数ある可能性があり、ない場合もあります。 (abc)【def】ghi【jkl】 だとghiの部分。 【abc】【def】(ghi)jkl(mno) だとjklです。 頭に必ず括弧が来たり、括弧が一回だけなら括弧閉じるの種類をor検索ではじけるのですが、何回くるかわからないのでどうしたらいいか困っています。 方法がありましたら教えてください。

    • ベストアンサー
    • Perl

専門家に質問してみよう