Word VBA質問箱 IV

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

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


62 / 308 ツリー ←次へ | 前へ→

【733】ワードマクロ 列3に【第(*)話】がある場合列6に【】内の数字を入れる みぃ 12/9/16(日) 16:45 質問[未読]
【734】Re:ワードマクロ 列3に【第(*)話】がある場... 774 12/9/18(火) 13:01 回答[未読]
【735】Re:ワードマクロ 列3に【第(*)話】がある場... みぃ 12/9/19(水) 0:37 お礼[未読]
【740】Re:ワードマクロ 列3に【第(*)話】がある場... マナ 13/4/30(火) 10:24 発言[未読]

【733】ワードマクロ 列3に【第(*)話】がある場合...
質問  みぃ  - 12/9/16(日) 16:45 -

引用なし
パスワード
   お世話になっております。
以前アドバイスをいただき、大変助かりました。
よろしくお願いします。

ワード2010
一つのドキュメントに複数の表(行数は不特定、列は基本7列)

列3に【第1話】とか、【第12話】とか、の文字列が含まれる場合
列6に その【】内の数字のみ、挿入したかったのですが
数字を取り出す方法がわかりません。

下記マクロは途中まで書いたマクロで
列3に指定文字列が含まれていた場合・・までとなっています。

Sub 表の列3に連番がある場合、列6に連番を入れる()
'表の列3に【第(*)話】がある場合列6に【】内の数字を入れる4()
  Dim 表数 As Variant
  表数 = ActiveDocument.Tables.Count'ドキュメントに表がいくつあるか、カウント

  Dim i As Long
  Dim j As Long

For j = 1 To 表数

  With ActiveDocument.Tables(j)
    For i = 1 To .Rows.Count
     If .Columns.Count >= 6 Then
      If .Cell(i, 3).Range.Text Like "*【第*話】*" Then
        If Not .Cell(i, 6).Range.Text Like "*【第*話】*" Then
        .Cell(i, 6).Range.InsertBefore "【第*話】"
        End If
      End If
    
     Else: j = j + 1
    
     End If
    
    Next

  End With

Next

End Sub

【734】Re:ワードマクロ 列3に【第(*)話】がある...
回答  774  - 12/9/18(火) 13:01 -

引用なし
パスワード
   色々方法はあるけど、たとえばFindを使うとか。

Public Sub Macro1()
  Dim rng As Range
  Dim str As String
  
  With ActiveDocument.Tables(1)
    Set rng = .Cell(1, 3).Range
    If rng.Text Like "*【第*話】*" Then
      With rng.Find
        .ClearFormatting
        .Text = "第*話"
        .Replacement.Text = ""
        .Forward = True
        .MatchPhrase = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        .MatchFuzzy = False
        .MatchWildcards = True
        .Execute
        If .Found Then
          str = Replace(rng.Text, "第", "")
          str = Replace(str, "話", "")
          Debug.Print str
        End If
      End With
    End If
  End With
End Sub

あと、いきなりループで処理するコード走らせるよりは、まずは適当なセルを対象に文字列を上手く処理できるか確認した方がいいと思う。
上のコードみたいに。

【735】Re:ワードマクロ 列3に【第(*)話】がある...
お礼  みぃ  - 12/9/19(水) 0:37 -

引用なし
パスワード
   アドバイスありがとうございます。
リファレンスを参照して
自分なりに注釈をつけて、どういうふうになるのか
動かしてみました。

Debug.Print str の部分は
小さなウインドウを表示して
そこに、変数strが表示される・・と思ったのですが
表示されず、動作の是非の判断がつかないず

そこで

ActiveDocument.Tables(1).Cell(1, 6).Range.InsertBefore str
に変更したところ
列3に【第1話】⇒列6のセルの文字列の文頭に1が挿入されました。

ありがとうございます。
後は、複数の表の行の列にて、動作するように頑張ってみます。


Public Sub 表の列3に連番がある場合、列6に連番を入れる3()

'参照メモ
'Replace(expression, find, replace[, start[, count[, compare]]])
'置換する文字列を含む文字列式 検索する文字列 置換する文字列


  Dim rng As Range
  Dim str As String
 
  With ActiveDocument.Tables(1)
    Set rng = .Cell(1, 3).Range
    If rng.Text Like "*【第*話】*" Then
     With rng.Find
        .ClearFormatting     '何かを初期化している?
        .Text = "第*話"      '検索する文字列
        .Replacement.Text = ""  '置換後の文字列
        .Forward = True      '書式
        .MatchPhrase = False   '大文字と小文字の区別する
        .MatchSoundsLike = False 'あいまい検索(英)
        .MatchAllWordForms = False '英単語の異なる活用形を検索する
        .MatchFuzzy = False    'あいまい検索(日)
        .MatchWildcards = True   'ワイルドカードを使用する
        .Execute          '指定した条件で検索開始?
        If .Found Then       '検索条件が一致した場合?
          str = Replace(rng.Text, "第", "") '文字列「第」削除
          str = Replace(str, "話", "")   '文字列「話」削除
          ActiveDocument.Tables(1).Cell(1, 6).Range.InsertBefore str
          'Debug.Print str '変数の値をイミディエイト ウィンドウに表示
        End If
      End With
    End If
  End With
End Sub

【740】Re:ワードマクロ 列3に【第(*)話】がある...
発言  マナ  - 13/4/30(火) 10:24 -

引用なし
パスワード
   さすがにもう見ていないでしょうから、
遠慮無く、ここも勉強に使わせていただきましょっと。

ところでDebug.Print strの件は? こちらではちゃんと機能しました。

>Debug.Print str の部分は
>小さなウインドウを表示して
>そこに、変数strが表示される・・と思ったのですが
>表示されず、動作の是非の判断がつかないず

Sub test()
  Dim tbl As Table
  Dim r As Row
  Dim str As String

  With CreateObject("VBScript.RegExp")
    .Pattern = ".*【第([0-9]{1,2})話】.*"
    For Each tbl In ActiveDocument.Tables
      For Each r In tbl.Rows
        str = r.Cells(3).Range.Text
        If .test(str) Then
          r.Cells(6).Range.Text = .Replace(str, "$1")
        End If
      Next
    Next
  End With
End Sub

62 / 308 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
207136
(SS)C-BOARD v3.8 is Free