
例えば段落の先頭から(全角半角問わず)スペースが5つ連続して入力されていたら、スペース5つ全てを削除して5文字分のインデントに変換したいです。
変換前 □□□□□あいうえお ※□=スペース
変換後 あいうえお
Wordの文書全体がインデントではなくスペースが段落の先頭から連続で入力されていて困っています。
段落の先頭に入力されたスペース1つのみインデントに変換するマクロはありましたが、連続したスペースをインデントに変換するマクロは見つけられませんでした。
お詳しい方、ご教授よろしくお願いします。
No.4ベストアンサー
- 回答日時:
どうやら、Wordの[オプション]にある[貼り付け時に自動調整する]が
関わっているようです。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
この設定を一時的に無効にし、マクロ処理して再度有効に戻すことで
対応できそうです。
※ 修正版
Sub 行頭スペースをインデントに()
'
' スペースが半角の場合0.5文字に変換
'
Dim myRange As Range
Dim par As Paragraph
' [貼り付け時に自動調整する]を一時的に無効にする
Options.PasteSmartCutPaste = False
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = "[ ]{1,}"
.MatchWildcards = True
Do While .Execute = True
Set par = myRange.Paragraphs.First
If myRange.Start = par.Range.Start Then
par.CharacterUnitFirstLineIndent = LenMbcs(myRange) / 2
myRange.Delete
End If
Loop
End With
Set myRange = Nothing
' [貼り付け時に自動調整する]を有効に戻す
Options.PasteSmartCutPaste = True
End Sub
Function LenMbcs(ByVal str As String)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
No.1のマクロでも、Options.PasteSmartCutPasteの処理をいれて、
応答なしにならないようにしてください。
関連情報
https://www.wordvbalab.com/code/6858/
No.3
- 回答日時:
No.1のマクロとNo.2のマクロでは、動作は一緒です。
「応答なし」になる条件があるみたいで、特定の半角記号が段落頭の
全角または半角スペースの後ろにある場合に、半角スペース1つ分に
置き換わり残るようです。
その結果、その段落に残ったスペースを対象に無限の処理をしようと
するようで、結果的に「応答なし」になるようです。
私の試してみた結果、半角の大括弧・丸括弧・引用符・二重引用符が
行頭スペースの直後にある場合に、半角スペース1つ分に置き換わり、
その部分で無限ルールしているようです。
[や(または"や'などを全角にすれば、私が提示したマクロでも問題は
ないのですが、それでは無意味なので対処方法がないか検討します。
対処方法が見つかるまで、しばらくお待ちください。
No.2
- 回答日時:
> 半角スペースの場合は0.5文字分のインデントに変換
通常は、文の開始位置を考えれば全角と半角は分けますよね。
この場合、ユーザー定義関数を用意すれば可能です。
par.CharacterUnitFirstLineIndent = Len(myRange)
LEN関数を使い、文字数を取得した分だけインデントしています。
このLEN関数では0.5文字単位では出せないので、以下で説明している
ユーザー定義関数のLenMbcs関数を用意して対応します。
https://docs.microsoft.com/ja-jp/office/vba/lang …
Function LenMbcs(ByVal str As String)
LenMbcs = LenB(StrConv(str, vbFromUnicode))
End Function
Sub 行頭スペースをインデントに()
'
' スペースが半角の場合0.5文字に変換
'
Dim myRange As Range
Dim par As Paragraph
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = "[ ]{1,}"
.MatchWildcards = True
Do While .Execute = True
Set par = myRange.Paragraphs.First
If myRange.Start = par.Range.Start Then
par.CharacterUnitFirstLineIndent = LenMbcs(myRange) / 2
myRange.Delete
End If
Loop
End With
Set myRange = Nothing
End Sub
重ねてご回答ありがとうございます!
大変恐縮ですが、ご回答いただいたマクロを動かすと、
途中で「応答なし」になり、どうやら半角スペースは一文字分のインデントに変換されているみたいです。
大変申し訳ありませんが、原因が分かりましたらご教授いただけないでしょうか。
よろしくお願いいたします。
No.1
- 回答日時:
見つけたマクロとはこちら↓のことですか?
https://tonari-it.com/word-vba-indent-space/
このマクロを応用してもよいのですが、そのままだと使いにくいので
変更しています。
行頭のスペースは、全角半角どちらでも同じ一文字単位でインデント
します。
Sub 行頭スペースをインデントに()
Dim myRange As Range
Dim par As Paragraph
Set myRange = ActiveDocument.Range(0, 0)
With myRange.Find
.Text = "[ ]{1,}"
.MatchWildcards = True
Do While .Execute = True
Set par = myRange.Paragraphs.First
If myRange.Start = par.Range.Start Then
par.CharacterUnitFirstLineIndent = Len(myRange)
myRange.Delete
' myRange.Collapse wdCollapseEnd '無くても問題ない
End If
Loop
End With
Set myRange = Nothing
End Sub
ご教示いただき、本当にありがとうございます!
大変恐縮ですが、半角スペースの場合は0.5文字分のインデントに変換する、と設定することは可能でしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- Excel(エクセル) 【マクロ】フォルダAからダBへファイルを、ファイルの更新日時の条件で、1つづつ移動するには? 3 2022/08/25 09:56
- Word(ワード) スペースを1回押したら前回入力したのを最初に出るようにしたい 1 2023/06/10 14:34
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) 【マクロ】フォルダを2つのモニターの定位置に並べたい 2 2022/09/02 01:14
- Excel(エクセル) 【マクロ】フォルダを3つ、POモニター上に、決まった並べ方をしたい 4 2022/08/31 11:05
- Access(アクセス) Accessのテキストボックスの入力文字制限 1 2023/01/18 20:43
- Excel(エクセル) EXCEL 和暦を西暦に変換する方法について 4 2023/03/02 20:57
- Visual Basic(VBA) 指定列最終行までのスペースを改行するVBAについて 2 2022/06/01 19:50
- Excel(エクセル) エクセルでのデータの統一に関して リストを作成する際、元データをコピペでリストに転記しており、元デー 2 2022/08/31 15:33
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの改行時、2行目の頭...
-
パワーポイントで箇条書きの際...
-
WORDで見出しを設定すると空白...
-
ワードの左インデントとぶら下...
-
インデントの幅
-
VBAコード記述に際して、コード...
-
エクセル マイナスの表示を▲に...
-
【ワード】レポートで引用部分...
-
PowerPointで、Wordのようにぶ...
-
Wordで左詰めできない・・・。
-
行の真ん中で改行されてしまい...
-
Excel でインデントを左右に入...
-
エクセル表の正負が混じった数...
-
ワードで余白に文字が行かない...
-
WORDのぶら下げインデント...
-
エクセルの横位置の均等割付(...
-
セル内右寄せ文字列の右側に半...
-
エクセルのインデント
-
Word:ぶら下げインデントだけ...
-
Wordでインデントを設定すると...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの改行時、2行目の頭...
-
パワーポイントで箇条書きの際...
-
WORDで見出しを設定すると空白...
-
ワードの左インデントとぶら下...
-
VBAコード記述に際して、コード...
-
エクセル マイナスの表示を▲に...
-
インデントの幅
-
Wordで左詰めできない・・・。
-
【ワード】レポートで引用部分...
-
セル内右寄せ文字列の右側に半...
-
行の真ん中で改行されてしまい...
-
エクセル表の正負が混じった数...
-
ワードで余白に文字が行かない...
-
PowerPointで、Wordのようにぶ...
-
Excel でインデントを左右に入...
-
Wordでインデントを設定すると...
-
エクセルの横位置の均等割付(...
-
パワー・ポイントのテキスト・...
-
Word 縦書き時に行末に一字分...
-
ワードの目次 フィールドの更新...
おすすめ情報