Office関連

セルの行数をカウントするWordマクロ

ソースコードを番号行付きのテーブルに変換するWordマクロ」を実行したとき、「GetCellLines」Functionが呼び出されます。
このFunctionプロシージャによってセルの行数を取得しているのですが、今回は私がセルの行数を取得するために試行錯誤した結果をまとめてみます。

まず、行数を求める方法としてすぐに思い浮かぶのは”対象セルで何回改行されているのか?“を調べる方法で、これが分かればすぐに行数が取得できます。
コードとしては下記の通り。

Public Sub Sample()
  Dim s As String
  
  s = ActiveDocument.Tables(1).Cell(1, 2).Range.Text
  Debug.Print UBound(Split(s, vbCr))
End Sub

対象の文字列を”改行“で区切って、それにより返される配列の要素数を調べるだけの単純なマクロです。
このマクロを下図のようなテーブルを対象に実行すると、Debug.Printで”4“が出力されます。

一見問題が無いように見えますが、このマクロを下図のようなテーブルを対象に実行すると、上図の場合と同じく”4“が出力されます。
結果を見れば分かる通り、”改行の個数“で判断しているために文字列の折り返しには対応していないわけです。

次に考えたのが、セルの最初の行番号と最後の行番号の差から取得する方法です。
コードとしては下記の通り。

Public Sub Sample2()
  Dim fln As Long, lln As Long
  
  ActiveDocument.Tables(1).Cell(1, 2).Select
  Selection.StartOf wdCell, wdMove
  fln = Selection.Information(wdFirstCharacterLineNumber)
  Selection.EndOf wdCell, wdMove
  lln = Selection.Information(wdFirstCharacterLineNumber)
  Debug.Print lln - fln + 1
End Sub

StartOfメソッドによってセルの最初にカーソルを移動して行番号を取得、EndOfメソッドによってセルの最後にカーソルを移動して行番号を取得、こうすることで最初の行番号と最後の行番号が取得できるので、あとは差を計算するだけです。

上図テーブルに対して改めてマクロを実行すると、今度はちゃんと”5“が出力され、文字列の折り返しにも対応しているように見えます。
ですが、このマクロを何回か試していると、セル内の行数が多い場合は何故か”0″が返ってきたり、セルが複数ページにまたがる場合は正確な行数が取得できなかったりと、意図する結果にはならない場合が多々あることに気が付きました。

そこで最終的に私が取った方法が下記ような方法です。

Private Function GetCellLines(ByVal tbl As Word.Table) As Long
'セルの行数カウント
  Dim ln As Long
  
  ln = 0 '初期化
  tbl.Columns(2).Cells(1).Range.Select
  Selection.StartOf wdCell, wdMove
  Do While Selection.Information(wdWithInTable)
    ln = ln + 1
    Selection.MoveDown wdLine, 1, wdMove
  Loop
  GetCellLines = ln
End Function

セルの最初の行にカーソルを移動し、”カーソルがテーブルを抜けるまで1行下にカーソルを移動させる“処理を実行し、何回カーソルが下に移動したのかをカウントするという、何とも泥臭いものになってしまいました。

気持ち的に何かすっきりしないものはありますが、一応はこれで事が足ります。
今後、もっと効率の良い処理を思いついたときは、そちらの方にコードを書き換えたいと思います。

ソースコードを番号行付きのテーブルに変換するWordマクロ前のページ

選択範囲内で文字列検索を行うWordマクロ次のページ

関連記事

  1. Office関連

    PDFのしおり数を取得するVBAマクロ

    「VBA Acrobat しおり数」といったキーワード検索でのアクセス…

  2. Excel

    続・Microsoft Edgeを操作するVBAマクロ(DOM編)

    以前VBAからMicrosoft Edgeを操作するマクロについて記事…

  3. アイコン一覧

    Office 2013 アイコン一覧(G)

    ・Office 2013 アイコン一覧 NUM…

  4. Office アドイン

    [Office用アプリ]「あいさつ文の挿入」を作業ウィンドウアプリに移植してみる。

    ※ この情報はOffice 2013 カスタマー プレビュー版を元にし…

  5. Office関連

    「変更履歴とコメントの表示」を設定するWordマクロ

    Microsoft コミュニティに「変更履歴とコメントの表示」オプショ…

  6. Office関連

    Office 2019のインストール方法

    下記ニュースサイトにある通り、永続ライセンス版のOffice 2019…

コメント

  1. この記事へのコメントはありません。

Time limit is exhausted. Please reload CAPTCHA.

※本ページはプロモーションが含まれています。

Translate

最近の記事

アーカイブ

PAGE TOP