Word VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


36 / 45 ページ ←次へ | 前へ→

【191】Re:検索文字列のある文より前の文の削除
回答  H. C. Shinopy  - 04/12/25(土) 0:17 -

引用なし
パスワード
   不具合の件について
これは、不覚でした! 申し訳ありません。
ヘルプで、MoveUntilの文法を確認しました。
ここは素直に考えるべきであったと、反省しております。
定番の「Selection.Find...」で文字列を検索することにします。
それからダイアログボックスを「msoFileDialogFilePicker」から
「msoFileDialogOpen」に変更しました。

Sub myDocRewrite()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 「一 東京」より文書の先頭を削除して、
 Rem 上書き保存する。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myDlgOpen As FileDialog
 Dim myFile As Variant
 Dim myWord As Word.Application
 Dim myCount As Long
 Dim c As Long
 '
 Rem 前処理
 If Documents.Count >= 2 Then
  MsgBox "文書を閉じて下さい。"
  Exit Sub
 End If
 If Documents.Count = 1 Then
  If ActiveDocument.Characters.Count > 1 Then
   MsgBox "文書を閉じて下さい。"
   Exit Sub
  Else
   If ActiveDocument.Words(1).Text <> vbCr Then
    MsgBox "文書を閉じて下さい。"
    Exit Sub
   Else
    Application.DisplayStatusBar = True
    ActiveDocument.Close
   End If
  End If
 End If
 '
 Rem ファイル群の指定
 Set myDlgOpen = Application.FileDialog(msoFileDialogOpen)
 With myDlgOpen
  .AllowMultiSelect = True
  .Filters.Add "Word文書", "*.doc", 1
  If .Show = 0 Then
   Rem [キャンセル]ボタン
   Set myDlgOpen = Nothing
   Application.Documents.Add
   Exit Sub
  End If
 End With
 '
 Rem ファイルごとの処理
 Set myWord = GetObject(, "Word.Application")
 '
 c = 0
 Application.ScreenUpdating = False ' 画面更新をオフにする。
 '
 For Each myFile In myDlgOpen.SelectedItems
  myWord.Documents.Open myFile ' ファイルを開く
  Selection.HomeKey Unit:=wdStory ' 文書の先頭にカーソル移動
  '
  Rem ステータスバーに件数表示
  c = c + 1
  Application.StatusBar = "処理中:" & c & "/" & myDlgOpen.SelectedItems.Count & "件"
  '
  Rem 文字列「一 東京」を一度だけ検索する。
  With Selection.Find
   .ClearFormatting
   .Text = "一 東京"
   .Forward = True
   .Wrap = wdFindStop
   .Execute
  End With
  '
  If Not Selection.Find.Found Then
   Rem 検索した文字列がない場合の処理。
   myWord.ActiveDocument.Close
  Else
   Rem 検索した文字列がある場合の処理。
   Rem カーソルを検索した文字列の前に移動する。
   Selection.Collapse wdCollapseStart
   Rem 文書の先頭までの範囲を選択する。
   myCount = Selection.HomeKey(wdStory, wdExtend)
   If myCount = 0 Then
    Rem 書き換え不要の文書だった場合の処理。
    myWord.ActiveDocument.Close
   Else
    Selection.Range.Text = "" ' 選択範囲を削除
    Rem ファイルの保存
    With myWord
     .ActiveDocument.SaveAs FileName:=myFile ' 上書き保存
     .ActiveDocument.Close
    End With
   End If
  End If
 Next myFile
 '
 Application.ScreenUpdating = True ' 画面更新をオンにする。
 '
 Rem 後処理
 myWord.Documents.Add
 Set myDlgOpen = Nothing
 Set myWord = Nothing
End Sub ' myDocRewrite *----*----*  *----*----*  *----*----*  *----*----*


「ある続きの文字列を含む行までを削除する方法はないのでしょうか」の件
文意が曖昧な感じですが、ここでは
『ある特定の文字列を含む文と、そこから文書の先頭までの文字を、
共に削除する』と解釈します。
ここで言う「文」とは、(私のWord VBA経験の範囲では)
文字列の最後に「。」あるいは改行記号があるもの
(英語の文章であれば、「. 」(ピリオド・スペース)が文字列の最後に付いているもの)という
ことになります。
その他の場合は、マクロを試しに実行することで調べる必要があります。

御質問の件は、下の通りとなります。
下の例ですと、検索した文字列のカーソル位置からではなく、
その文字列を含む文(「。」や改行のある所まで)から前を削除します。

Sub mySentencesDelete()
 Dim myCount As Long
 '
 Selection.HomeKey Unit:=wdStory ' 文書の先頭にカーソル移動
 '
 Rem 文字列「一 東京」を一度だけ検索する。
 With Selection.Find
  .ClearFormatting
  .Text = "一 東京"
  .Forward = True
  .Wrap = wdFindStop
  .Execute
 End With
 '
 If Not Selection.Find.Found Then
  Rem 検索した文字列がない場合の処理。
  Exit Sub
 Else
  Rem 検索した文字列がある場合の処理。
  Rem 検索した文字列を含む文の選択。
  Selection.Sentences(1).Select
  Rem カーソルを文の後に移動する。
  Selection.Collapse wdCollapseEnd
  Rem 文書の先頭までの範囲を選択する。
  myCount = Selection.HomeKey(wdStory, wdExtend)
  Selection.Range.Text = "" ' 選択範囲を削除
 End If
End Sub
・ツリー全体表示

【190】Re:検索文字列のある文より前の文の削除
質問  TAMA  - 04/12/24(金) 16:21 -

引用なし
パスワード
   H. C. Shinopy様
早速、ご回答ありがとうございます。

しかし、不具合が...。
「一 東京都」という続きの文字列ではなく、その中の文字のうち
一番早く出てくる文字を検索して、それ以前の文字を削除してしまいます。
例えば、「一 東京都」という文字列より前に、「東」という文字やスペースがあるとその文字やスペースの前までの文字を削除してしまうのです。

あと、行単位の削除というのは難しいのでしょうか。
ある続きの文字列を含む行までを削除する方法はないのでしょうか。

お願いばかりで申し訳ありませんが、よろしくお願いします。
・ツリー全体表示

【189】Re:検索文字列のある文より前の文の削除
回答  H. C. Shinopy  - 04/12/24(金) 0:08 -

引用なし
パスワード
   以下、取り敢えず、返信したします。

過去の事例を引っ張り出しきて、
「一 東京都」という文字列を検索し、
その文字列より前を削る処理だけ追加しました。

下記のマクロは、
ファイルを警告なしに上書き保存しますので、
処理前に、必ずファイルをバックアップして下さい。

Wordを起動した直後の状態で実行して頂ければ幸いです。
尚、「一 東京都」という文字列がない場合は、
ファイルを閉じるだけの処理をするようにしています。

Sub myDocRewrite()
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Rem 「一 東京」より文書の先頭を削除して、
 Rem 上書き保存する。
 Rem *----*----*  *----*----*  *----*----*  *----*----*
 Dim myDlgPick As FileDialog
 Dim myFile As Variant
 Dim myWord As Word.Application
 Dim myCount As Long
 Dim c As Long
 '
 Rem 前処理
 If Documents.Count >= 2 Then
  MsgBox "文書を閉じて下さい。"
  Exit Sub
 End If
 If Documents.Count = 1 Then
  If ActiveDocument.Characters.Count > 1 Then
   MsgBox "文書を閉じて下さい。"
   Exit Sub
  Else
   If ActiveDocument.Words(1).Text <> vbCr Then
    MsgBox "文書を閉じて下さい。"
    Exit Sub
   Else
    Application.DisplayStatusBar = True
    ActiveDocument.Close
   End If
  End If
 End If
 '
 Rem ファイル群の指定
 Set myDlgPick = Application.FileDialog(msoFileDialogFilePicker)
 With myDlgPick
  .AllowMultiSelect = True
  .Filters.Add "Word文書", "*.doc", 1
  If .Show = 0 Then
   Rem [キャンセル]ボタン
   Set myDlgPick = Nothing
   Application.Documents.Add
   Exit Sub
  End If
 End With
 '
 Rem ファイルごとの処理
 Set myWord = GetObject(, "Word.Application")
 '
 c = 0
 Application.ScreenUpdating = False ' 画面更新をオフにする。
 '
 For Each myFile In myDlgPick.SelectedItems
  myWord.Documents.Open myFile ' ファイルを開く
  Selection.HomeKey Unit:=wdStory ' 文書の先頭にカーソル移動
  '
  Rem ステータスバーに件数表示
  c = c + 1
  Application.StatusBar = "処理中:" & c & "/" & myDlgPick.SelectedItems.Count & "件"
  '
  Rem 文字列「一 東京」を探す。
  myCount = Selection.MoveUntil(Cset:="一 東京", Count:=wdForward)
  myCount = myCount - 1
  '
  If myCount = -1 Then
   Rem 探した文字列なしの場合
   myWord.ActiveDocument.Close
  Else
   Selection.HomeKey Unit:=wdStory, Extend:=wdExtend ' 文書の先頭までの範囲を選択する。
   Selection.Range.Text = "" ' 選択範囲を削除
   Rem ファイルの保存
   With myWord
    .ActiveDocument.SaveAs FileName:=myFile ' 上書き保存
    .ActiveDocument.Close
   End With
  End If
 Next myFile
 '
 Application.ScreenUpdating = True ' 画面更新をオンにする。
 '
 Rem 後処理
 myWord.Documents.Add
 Set myDlgPick = Nothing
 Set myWord = Nothing
End Sub ' myDocRewrite *----*----*  *----*----*  *----*----*  *----*----*
・ツリー全体表示

【188】検索文字列のある文より前の文の削除
質問  TAMA  - 04/12/22(水) 11:29 -

引用なし
パスワード
   「一 東京都」という文字列を検索して、
その文字列を含む最初のセンテンスを
先頭にするため、それより前のセンテンスを
全て削除したいのです。
該当の文書ファイルがたくさんあるので
あるフォルダ内の文書ファイルを自動的に
処理できればと思います。
フォルダ内には、検索文字列が無い
文書ファイルもあるという前提で
教えていただけるとありがたいです。
よろしくお願いします。
・ツリー全体表示

【187】文字数カウント
質問  やるすけ  - 04/12/21(火) 23:49 -

引用なし
パスワード
   初めて投稿します。
以前文字数カウントの質問があがっていたようですが、vbaで入力文字数を取得するのはどうしたらよいのでしょうか?
教えていただけませんか?
・ツリー全体表示

【186】余白は十分にあるのに....
質問  林檎  - 04/12/20(月) 16:23 -

引用なし
パスワード
   同じ大きさ複数の表が1枚の用紙(A4)に収まらないのはなぜなんでしょう?
抽象的過ぎてわかりにくいと思いますがどなたか教えていただけると幸いです。
・ツリー全体表示

【185】Re:列のそろえ方と数式マクロの設定
回答  H. C. Shinopy  - 04/12/18(土) 16:25 -

引用なし
パスワード
   日が経ってしまいましたが、
御質問の件について、
以下の通り答えさせて頂きます。

・列がうまく揃わない件について

1.全角のフォントと半角のフォントを同一のものを使う。

2.フォント名に「P」が付かないフォントを選択する。
(等幅フォントを使う。)

3.日本語と英数字の間隔の自動調整を無効にする。
([書式]メニューから[段落]を選択し、
体裁タブの[日本語と英字の間隔を自動調整する]
[日本語と数字の間隔を自動調整する]のチェックを外す。

(参考文献1)「Q099 全角1桁と半角2桁の幅が揃わないのはなぜ?」

厳密に文字数を数えるものでないのであれば、
表を挿入し、[罫線なし]を指定して(つまり、透明な表を作り)、
その中に文字を入力し、縦の罫線を左右に動かすという方法があります。
表の中でも、フィールドの挿入や両端揃え・均等割り付けができます。
(要は、人の名前をたくさん揃えて並べて入力する時に使う手です。)


・数式の入力の件について

1.本格的に数式を入力する場合は、数式エディタを使います。
(参考文献1)
「Q061 「分数」「ルート3」「5の3乗」などを入力するには?」

ただ御質問の件は余り複雑でない数式の場合のようですので、
フィールドの挿入で対処します。

1.メニューバーの[挿入]から[フィールド...]を選ぶ。
2.[フィールド]ダイアログボックスの[フィールドの種類]から
  [数式と計算]を選ぶ。
3.[フィールドの名前]から[Eq]をクリックし、[オプション]を押す。
4.[スイッチ]を選んで(下に[説明]が表示される)、クリックして選ぶ。
5.[フィールド]に選んだものが表示されているので、
  数値を指定する。

参考文献2 「013 数式を入力するには」では、
「EQ \I(,,\F(1,\R(x\S(2)+A))dx)」を指定した例が載っています。

御質問の例では、「ルート2」は「EQ \R(,2)」、
「三乗根ルート5」は「EQ \R(3,5)」です。

ただ、フィールドの挿入で表示された数式は、
数値の大きさが不釣り合いな場合がありますので、
その時は、[Alt]+[F9]キーを押して、
フィールドコードの表示・非表示を切り替えて、
フィールド内に指定した数値のフォントの大きさを変更します。


参考文献1
プロジェクトA 工藤喜美枝・木村幸子
『すぐ効くWORDのトラブルシューティング』毎日コミュニケーションズ

参考文献2
加藤晴子『Word2002機能引きテクニック集』ナツメ社
・ツリー全体表示

【184】わかりました。
お礼  yama  - 04/12/15(水) 15:03 -

引用なし
パスワード
   原稿用紙ではどうやらできないことがわかりました。
文字数と行数を指定すればいいようです。
ありがとうございました。
・ツリー全体表示

【183】ルビをすると文字の位置が変わる。
質問  yama  - 04/12/14(火) 15:31 -

引用なし
パスワード
   原稿用紙にしています。
ルビをすると文字がくっついてしまいます。
原稿用紙にぴったりにルビをつけるにはどうしたらよいのでしょうか
・ツリー全体表示

【182】アプリケーションの起動
質問  ペン  - 04/12/14(火) 14:18 -

引用なし
パスワード
   Word上にてクリックすると別アプリケーションを起動させる方法を教えてください。
(ACDseeです)
・ツリー全体表示

【181】Re:ExcelとWordのVBAの違いについて
回答  ちゃっぴ  - 04/12/14(火) 1:03 -

引用なし
パスワード
   >Excelに含まれるVBAと、Wordに含まれるVBAはどのように違うのでしょうか?
>教えていただけませんか?よろしくお願いいます。

なにが知りたいのでしょう?

WordもExcelも同じVBA Library上で動いているので
VBAとOfficeのLibraryにあるものは扱えます。

もちろん、Application固有のObjectはそのApplicationのLibraryに
あるので、そいつを参照設定しないと(CreateObjectしても使えますが・・・)
使えません。

Object Browserを除いてみてください。
・ツリー全体表示

【180】Re:wordをつかってて間違って消してしまっ...
回答  ちゃっぴ  - 04/12/14(火) 0:58 -

引用なし
パスワード
   >wordをつかってて2時間かけて作ったレポートを間違えて消してしまいました・・・復元とかできますか?

ご愁傷様・・・

上書きしてしまった場合には復旧はできないものと思いましょう。

上書きでない場合、市販のFile復元ソフト使って復元してやりましょう。
ただ、時間がたつと復元できなくなるのでお早めに・・・

保存は、こまめにね☆
・ツリー全体表示

【179】列のそろえ方と数式マクロの設定
質問  ひろ  - 04/12/13(月) 21:48 -

引用なし
パスワード
   はじめまして。初めて投稿します。

今wordで数学の問題を作成しているのですが、空白を入れて数式を並べると
列がうまく揃いません。何か揃えるやり方とかありますか?あれば教えてください。

もうひとつですが、√などの記号の中に数値を入れたいのですが、
そのやり方などがあれば教えていただけないでしょうか?

よろしくお願い致します。
・ツリー全体表示

【178】ExcelとWordのVBAの違いについて
質問  たま  - 04/12/13(月) 16:29 -

引用なし
パスワード
   Excelに含まれるVBAと、Wordに含まれるVBAはどのように違うのでしょうか?
教えていただけませんか?よろしくお願いいます。
・ツリー全体表示

【177】WORD文章の印刷について
質問  るな  - 04/12/13(月) 11:09 -

引用なし
パスワード
   WORD文章を印刷できなくて困っています。
沢山ある他の文章は普通に印刷できているのに、何もエラーがでずに印刷されない状態です。
何故この文章だけ印刷されないのか・・・
お願いします。教えて下さい。
@るな
・ツリー全体表示

【176】wordをつかってて間違って消してしまった・...
質問  どんくさお E-MAIL  - 04/12/12(日) 0:36 -

引用なし
パスワード
   wordをつかってて2時間かけて作ったレポートを間違えて消してしまいました・・・復元とかできますか?
・ツリー全体表示

【175】グリッド線
質問  匿名  - 04/12/9(木) 15:03 -

引用なし
パスワード
   はじめまして。
グリッド線は、印刷のとき消えてしまいますが、
これを表示して印刷はできないものでしょうか?
・ツリー全体表示

【174】Re:連続質問すみません・・・
回答  らいでん  - 04/12/4(土) 0:20 -

引用なし
パスワード
   らいでんです。
まずはその操作をマクロ記録してみてはどうでしょうか?
・ツリー全体表示

【173】Re:段落番号がうまくいきません
発言  通りすがり E-MAIL  - 04/12/1(水) 23:14 -

引用なし
パスワード
   はじめまして。通りすがりのものです。

もしかしたら、「ツール」→「テンプレートとアドイン」の
文章作成に使用するテンプレートで、「Normal」以外の値が設定されていないでしょうか?
以前、同様の現象が起こったもので。

以上です。


▼マル さん:
>段落番号の設定で、
>(1)○○○
>(2)xxx
> ・
> ・
>と入力して保存しファイルを閉じて、
>再度ファイルを開けると
>(1)○○○
>(ア)xxx
> ・
> ・
>と段落番号が変わってしまいます。
>何度直しても変りません。
>何が原因なのでしょうか?
>教えて下さい。よろしくお願いします。
・ツリー全体表示

【172】連続質問すみません・・・
質問  みみ  - 04/11/28(日) 22:31 -

引用なし
パスワード
   教えてくださいばかりで申し訳ないです。

ワードで縦書きにすると、文字の幅などの設定に限界があって、あまり望んだ見た目にならないのですが、マクロを使って文書を縦書きにしてさらに文字の幅を自由に変更したりできないでしょうか。
できる、できないだけでもいいのでお願いします。
・ツリー全体表示

36 / 45 ページ ←次へ | 前へ→
ページ:  ┃  記事番号:
207185
(SS)C-BOARD v3.8 is Free