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行下にカーソルを移動させる“処理を実行し、何回カーソルが下に移動したのかをカウントするという、何とも泥臭いものになってしまいました。

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

関連記事

  1. Office関連

    表の特定の列に対して処理を行うWordマクロ

    2015/6/12 追記:下記で紹介しているコードはセルの結合を考…

  2. Office関連

    スライドショーをループ再生設定するPowerPointマクロ

    PowerPointでスライドショーを作成するとき、投影した後流しっぱ…

  3. Excel

    アドインやテンプレートのバージョンチェックを行うVBAマクロ

    色々なアプリケーションに実装されている、「最新バージョンの確認」機能、…

  4. Office アドイン

    [Office用アプリ]User Agent他を調べてみました。

    ふと気になったので、Office 用アプリをローカル環境にインストール…

  5. Office アドイン

    YO OFFICE(Yeoman)を使ってOffice アドインのひな型を作成する方法

    Webアプリのひな型を一発で作ってくれる便利ツール「Yeoman」には…

コメント

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

Time limit is exhausted. Please reload CAPTCHA.

最近の記事

アーカイブ

RapidSSL_SEAL-90x50
PAGE TOP