アプリ版:「スタンプのみでお礼する」機能のリリースについて

Word上で文字列の長さを基準に並び替えをしたいのですが、可能でしょうか?
現在業務に使用するWordマクロを作成しておりますが、ExcelのLEN関数やテキストエディタ(秀丸)を使用して行っている上記の並び替えがWord上でもできないかと調べております。
Wordはあいうえお順?や数値順の並べ替えはするようなので、なんとなくできるような気もするのですが、どうしてもみつかりません。ご存知の方がいらしたらご教示いただければ幸いです。

A 回答 (3件)

マクロは苦手なほうなので、簡単なアドバイスだけですが。



WordのマクロでもLEN関数は使えます。
対象文字列を取得してLEN関数で取り出せば、その文字数を使って
並べ替えも可能かと思います。

例えば2列の表があり、1列目の文字列の文字数を取得し、2列目に
書き出すことで、2列目を対象にして並べ替えができるということ
ですね。
https://www.relief.jp/docs/word-macro-fill-array …
https://www.relief.jp/docs/018048.html
https://docs.microsoft.com/ja-jp/office/vba/api/ …
    • good
    • 0
この回答へのお礼

早々の回答ありがとうございます。できそうな気もするのですが、調べていると、なかなか出てこないですね。もう少し探してみます。ありがとうございました。

お礼日時:2018/12/04 17:25

No.1の回答者です。



こちら↓のマクロを応用しただけなので、適当なマクロですが。
http://akashi-keirin.hatenablog.com/entry/2018/0 …

Sub Mozisuu_sout()
 Dim targetTable As Table
 Dim str As String
 Dim i As Integer
 Dim mozisuu As Long

 Selection.WholeStory
 Selection.ConvertToTable
 Set targetTable = ActiveDocument.Tables(1)
 targetTable.Columns(1).Select
 Selection.InsertColumnsRight

 For i = 1 To targetTable.Rows.Count
  str = getStringFromCell(targetTable:=targetTable, _
              targetRow:=i, _
              targetColumn:=1)
  mozisuu = Len(str)
  targetTable.Cell(i, 2).Range.InsertAfter (mozisuu)
 Next

 With Selection
  .Sort FieldNumber:="列 2", SortFieldType:=wdSortFieldNumeric
  .Columns(2).Delete
  .Rows.ConvertToText Separator:=wdSeparateByParagraphs, _
   NestedTables:=True
 End With
End Sub

Public Function getStringFromCell( _
        ByVal targetTable As Table, _
        ByVal targetRow As Integer, _
        ByVal targetColumn As Integer) As String
 Dim str As String
 str = targetTable.Cell(targetRow, targetColumn).Range.Text
 str = Left(str, Len(str) - 2)
 getStringFromCell = str
End Function
    • good
    • 0
この回答へのお礼

enunokokoroさん、試してみました。確かに「文字列の長さを基準」に昇順でソートされました。ありがとうございます。
実は、書いていなかったのですが、私は降順でのソートが目的でした。
恐らくどこかのコードを書き直すだけだと思うのですが、みつけられませんでした。それが解れば完成だと思います。

降順でのソートはどこを書き換えればよいのか、教えていただけないでしょうか?

よろしくお願いします

P.S.
ちなみに、VBEに書き込んだ時点で、End Subの下、Public Function getStringFromCell( _以下が切れてしまったのですが、昇順のソートに関しては問題が起こらなかったようです。

お礼日時:2018/12/04 21:00

No.1の回答者です。


End Subの6行上からを以下のように書き換えます。

 With Selection
  .Sort FieldNumber:="列 2", SortFieldType:= _
  wdSortFieldNumeric, SortOrder:=wdSortOrderDescending
  .Columns(2).Delete
  .Rows.ConvertToText Separator:=wdSeparateByParagraphs, _
   NestedTables:=True
 End With

Selection.Sort method (Word)のSortOrderで指定します。
https://docs.microsoft.com/ja-jp/office/vba/api/ …
https://docs.microsoft.com/ja-jp/office/vba/api/ …


Public Function の部分は表の指定列のセルを読み込んで、文字列
だけを Sub Mozisuu_sout() に戻すための別に用意したマクロだと
考えてください。
http://macrocat.net/ExcitingJoboost/excelvba-sub …
このマクロを呼び出し、指定列から行を順番に指定し、その文字列
のみを str の変数に代入して戻しています。
戻った文字列の文字数をLENで取得して2列目に順番に挿入している
のです。
文字数をすべて挿入後に2列目を基準にソートしてから不要な列を
削除して表を解除しているのです。
    • good
    • 0
この回答へのお礼

enunokokoroさん、ありがとうございました。
これで完成しました。
謹んでベストアンサーとさせていただきます。

お礼日時:2018/12/05 14:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!