Word VBA質問箱 IV

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

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


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

【21】リストボックス内を並べ替え WhiteRabbit 03/4/24(木) 15:17 質問[未読]
【28】Re:リストボックス内を並べ替え らいでん 03/5/4(日) 1:42 発言[未読]
【31】Re:リストボックス内を並べ替え WhiteRabbit 03/5/13(火) 15:14 お礼[未読]
【33】Re:リストボックス内を並べ替え らいでん 03/5/14(水) 0:16 回答[未読]
【36】Re:リストボックス内を並べ替え WhiteRabbit 03/5/15(木) 15:27 質問[未読]
【39】Re:リストボックス内を並べ替え らいでん 03/5/16(金) 16:15 回答[未読]
【40】Re:リストボックス内を並べ替え WhiteRabbit 03/5/16(金) 21:18 お礼[未読]

【21】リストボックス内を並べ替え
質問  WhiteRabbit  - 03/4/24(木) 15:17 -

引用なし
パスワード
   こんにちは。
リストボックスの項目を追加セットする際に五十音もしくはJISコード順に並べ替えする方法を教えてください。Excelだとシートの並べ替えで済むのですが、Wordではどうしてよいかわかりません。
よろしくお願いします。

【28】Re:リストボックス内を並べ替え
発言  らいでん  - 03/5/4(日) 1:42 -

引用なし
パスワード
   レスつかないですね。

>リストボックスの項目を追加セットする際に

追加セット?・・ってどういったことでしょうね?
単にAddItemするという事とは違うのですか?

>Excelだとシートの並べ替えで済むのですが

シートの並び替えですか?シートの順を並び替えてどうするのでしょう?
多分Wordで表内データの並び替えを行って、そのデータをリストボックス
に取り込みたい、という事だと想像しましたが?

あまり感覚的な言葉を使わない方が宜しいかと。

【31】Re:リストボックス内を並べ替え
お礼  WhiteRabbit  - 03/5/13(火) 15:14 -

引用なし
パスワード
   ▼らいでん さん:
レスありがとうございます。返信がおくれましてすみません。
あまりに反応ないので半ば諦めておりました。

>>リストボックスの項目を追加セットする際に
>
>追加セット?・・ってどういったことでしょうね?
>単にAddItemするという事とは違うのですか?

分かりづらくてすみません。AddItemでもいいんですが、Listプロパティに指定するデータをどうにかできないかと考えていました。

>>Excelだとシートの並べ替えで済むのですが
>
>シートの並び替えですか?シートの順を並び替えてどうするのでしょう?
>多分Wordで表内データの並び替えを行って、そのデータをリストボックス
>に取り込みたい、という事だと想像しましたが?

Excelを引き合いに出したのがまずかったかもしれません。
Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですがWordにはシートの概念がないのでそうはいかない、という意味で書いたので実際にExcelシートを流用するということではありません。

やりたかったのは文書内の表の並べ替えをしたいのではなくてリストボックス内のデータを並べ替えたいのです。
※このリストボックスには「使用用語」のリストみたいな用途で適宜用語が追加されます。

並べ替えについては他のサイトを検索したら配列変数にとりこんでからのソートで対応できそうだということは判りました。この方法で取り組み中ですが、もし他に簡単な方法がありましたらご教示ください。

【33】Re:リストボックス内を並べ替え
回答  らいでん  - 03/5/14(水) 0:16 -

引用なし
パスワード
   らいでんです。

>Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですがWordには
>シートの概念がないのでそうはいかない、という意味で書いたので実際にExcelシートを
>流用するということではありません。

私はExcelシートを流用しようという事は考えておりませんよ。
リストボックスに取り込むべきデータの所在をお聞きしたかったのです。
こちらはWord掲示板ですので、データはWord文書上に存在するのだと考えるのが自然
だと思ったのですが?

>やりたかったのは文書内の表の並べ替えをしたいのではなくてリストボックス内のデー
>タを並べ替えたいのです。

はい、了解していますよ。
Wordでも表のソート機能を使って配列に取り込めば良いと考えたのですが?
Excelでも
>Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですが
と仰っていますように、データの並び替えをされているのですから同じ事ですよね。

【36】Re:リストボックス内を並べ替え
質問  WhiteRabbit  - 03/5/15(木) 15:27 -

引用なし
パスワード
   ▼らいでん さん:

こんにちは、

>>Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですがWordには
>>シートの概念がないのでそうはいかない、という意味で書いたので実際にExcelシートを
>>流用するということではありません。
>
>私はExcelシートを流用しようという事は考えておりませんよ。
>リストボックスに取り込むべきデータの所在をお聞きしたかったのです。
>こちらはWord掲示板ですので、データはWord文書上に存在するのだと考えるのが自然
>だと思ったのですが?
>
>>やりたかったのは文書内の表の並べ替えをしたいのではなくてリストボックス内のデー
>>タを並べ替えたいのです。
>
>はい、了解していますよ。
>Wordでも表のソート機能を使って配列に取り込めば良いと考えたのですが?
>Excelでも
>>Excelでは作業用のシートを適宜追加しSortメソッドで並べ替えが可能ですが
>と仰っていますように、データの並び替えをされているのですから同じ事ですよね。

そういわれますとそうですね。納得です。
その方法でも試してみることにします。
WORDの表を配列に取り込む場合、具体的にどういうコードになりますでしょうか?」

表は2列×任意の複数行とします。
index    data
1    あああ
2    いいい
3    ううう
..

【39】Re:リストボックス内を並べ替え
回答  らいでん  - 03/5/16(金) 16:15 -

引用なし
パスワード
   こんにちは。
ご提示のデータですと

Sub TempTable()
 Dim TmpTb As Table
 Dim myArray() As Variant
 Dim lngCol As Long
 Dim strCell As String
 Dim i As Long
 
 Set TmpTb = ThisDocument.Tables(1)
 'ソート処理
 '見出しは対象外,2列目,JISコードを基準,昇順
 TmpTb.Sort ExcludeHeader:=False, FieldNumber:="列 2", SortFieldType:= _
  wdSortFieldJapanJIS, SortOrder:=wdSortOrderAscending
 
 lngCol = TmpTb.Rows.Count - 1
 ReDim myArray(lngCol, 1)
 
 For i = 0 To lngCol
  '一列目のデータを配列に格納
  strCell = TmpTb.Cell(i + 1, 1).Range.Text
  myArray(i, 0) = Left(strCell, Len(strCell) - 2)
  '二列目のデータを配列に格納
  strCell = TmpTb.Cell(i + 1, 2).Range.Text
  myArray(i, 1) = Left(strCell, Len(strCell) - 2)
 Next
 
 With UserForm1.ListBox1
  .ColumnCount = 2
  .List = myArray
  .ListIndex = 0
  .ColumnWidths = "20;40"
 End With
 UserForm1.Show
 
 Set TmpTb = Nothing
End Sub

こういったところでしょうか。

Excelですとご存知の通りUsedRangeそのものが配列として取り扱えますが
Wordの表(セル)では、改行情報やセル区切りといったWord固有の情報が
存在しますのでこの情報を切り捨てるという処理が必要になります。

ですのでExcelと同じような使い勝手のよさを期待されると辛いものが
あります。

>作業用のシートを適宜追加し
と仰っていますので、多分
リストボックスのデータを一旦表に書き出す→ソート処理→配列変数格納
→表の削除、または作業用文書の削除
といった一連の処理を考えておられるのでしたら、更なる工夫が必要に
なるでしょう。

この点
>他のサイトを検索したら配列変数にとりこんでからのソートで対応
こちらのアルゴリズムと天秤にかけて考える必要がありそうですね。

【40】Re:リストボックス内を並べ替え
お礼  WhiteRabbit  - 03/5/16(金) 21:18 -

引用なし
パスワード
   ▼らいでん さん:
こんばんは。返信ありがとうございます。

>こんにちは。
>ご提示のデータですと
>
>Sub TempTable()
> Dim TmpTb As Table
> Dim myArray() As Variant
> Dim lngCol As Long
> Dim strCell As String
> Dim i As Long
> 
> Set TmpTb = ThisDocument.Tables(1)
> 'ソート処理
> '見出しは対象外,2列目,JISコードを基準,昇順
> TmpTb.Sort ExcludeHeader:=False, FieldNumber:="列 2", SortFieldType:= _
>  wdSortFieldJapanJIS, SortOrder:=wdSortOrderAscending
> 
> lngCol = TmpTb.Rows.Count - 1
> ReDim myArray(lngCol, 1)
> 
> For i = 0 To lngCol
>  '一列目のデータを配列に格納
>  strCell = TmpTb.Cell(i + 1, 1).Range.Text
>  myArray(i, 0) = Left(strCell, Len(strCell) - 2)
>  '二列目のデータを配列に格納
>  strCell = TmpTb.Cell(i + 1, 2).Range.Text
>  myArray(i, 1) = Left(strCell, Len(strCell) - 2)
> Next
> 
> With UserForm1.ListBox1
>  .ColumnCount = 2
>  .List = myArray
>  .ListIndex = 0
>  .ColumnWidths = "20;40"
> End With
> UserForm1.Show
> 
> Set TmpTb = Nothing
>End Sub
>
>こういったところでしょうか。

サンプルコードありがとうございます。うまく作動しました。

>Excelですとご存知の通りUsedRangeそのものが配列として取り扱えますが
>Wordの表(セル)では、改行情報やセル区切りといったWord固有の情報が
>存在しますのでこの情報を切り捨てるという処理が必要になります。

>ですのでExcelと同じような使い勝手のよさを期待されると辛いものが
>あります。

ExcelVBA自体もよくわかってませんがWordの方もなかなか難しいのですね。

>>作業用のシートを適宜追加し
>と仰っていますので、多分
>リストボックスのデータを一旦表に書き出す→ソート処理→配列変数格納
>→表の削除、または作業用文書の削除
>といった一連の処理を考えておられるのでしたら、更なる工夫が必要に
>なるでしょう。

まさにそんなところですね。ちょっと勿体ない感じはしますが、ありものでできるのは捨てがたいですね。

>この点
>>他のサイトを検索したら配列変数にとりこんでからのソートで対応
>こちらのアルゴリズムと天秤にかけて考える必要がありそうですね。

いろいろと教えていただき勉強になります。
また質問すると思いますが今後もよろしくお願いします。

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