プロが教えるわが家の防犯対策術!

Excelマクロの勉強中です。

マクロで封筒の宛名印刷をしたいと考えています。
Excelシートの内容は下のような感じです。
---------------------------------------------------
整理番号 氏名  郵便番号  県   市町村
00001 徳川家康 000-0000 愛知県 ○○市・・・
00002 武田信玄 000-0000 山梨県 ○○市・・・
00003 豊臣秀吉 000-0000 愛知県 ○○市・・・
00004 上杉謙信 000-0000 新潟県 ○○市・・・
00005 伊達正宗 000-0000 宮城県 ○○市・・・
00006 浅井長政 000-0000 滋賀県 ○○市・・・
00007 前田利家 000-0000 福井県 ○○市・・・
00008 毛利元就 000-0000 岡山県 ○○市・・・
00009 斉藤道三 000-0000 岐阜県 ○○市・・・
00010 島津義光 000-0000 福岡県 ○○市・・・
---------------------------------------------------

(1)このシートを「県」でフィルターをかけて、
 ユーザーフォームに結果を表示したい。
 (表示行数は不定となります。)

(2)結果表示行のそれぞれにチェックボックスを設け、
 一斉印刷と選択印刷の両方を選べるようにしたい。

と言うのが目的なのですが、
このような処理はユーザーフォームで可能なのでしょうか?

よろしくお願いします。

A 回答 (2件)

>のような処理はユーザーフォームで可能なのでしょうか?


可能です。

ユーザーフォーム上にListBoxを設けListBoxにフィルターをかけた値を表示します。
ListBoxは
ListStyleプロパティ を fmListStyleOption
MultiSelectプロパティ を fmMultiSelectMulti
に設定すると1列目にチェックボックスが表示されます

この回答への補足

ご回答ありがとうございます。

途中まではうまく行ったのですが・・・、

============================================================
Private Sub UserForm_Initialize()

Dim データ範囲
With Worksheets("住所録")
データ範囲 = .Range(.Cells(2, 1), .Cells(Rows.Count, 5).End(xlUp)).Value
End With
With ListBox1
.ColumnCount = 5
.ColumnWidths = "20;50;50;50;50"
.List = データ範囲
.MultiSelect = fmMultiSelectMulti
.ColumnHeads = True
.ListStyle = fmListStyleOption
End With

End Sub
============================================================

問題は、
(1)フィルターをかけた情報と違うものが表示されることがある。
(2)コラムヘッドが表示されない。

お分かりになるでしょうか?

補足日時:2012/05/15 20:59
    • good
    • 0

>(1)フィルターをかけた情報と違うものが表示されることがある。


フィルターで抽出された値をリストボックスに設定するには一旦、抽出したデーターを
他のシートに移して、それを基に設定する必要があります。
例ではSheets("作業場").を設けて行っています。

Private Sub UserForm_Initialize()
  Dim データ範囲

  With Worksheets("住所録")
    Sheets("作業場").Cells.ClearContents
    .Range("A2", .Cells(Rows.Count, 5).End(xlUp)).Copy Sheets("作業場").Range("A1")
    データ範囲 = Sheets("作業場").Range("A1").CurrentRegion.Value
  End With
  With ListBox1
    .ColumnCount = 5
    .ColumnWidths = "20;50;50;50;50"
    .List = データ範囲
    .MultiSelect = fmMultiSelectMulti
    .ListStyle = fmListStyleOption
  End With
End Sub


>(2)コラムヘッドが表示されない。
見出しを表示するにはリストデーターの設定は.RowSourceを使います。
Private Sub UserForm_Initialize()
  Dim データ範囲 As String
  Dim LastRow As Long

  With Worksheets("住所録")
    LastRow = .Cells(Rows.Count, 5).End(xlUp).Row
    データ範囲 = .Range("A2:E" & LastRow).Address(External:=True)
  End With
  With ListBox1
    .ColumnCount = 5
    .ColumnWidths = "20;50;50;50;50"
    .RowSource = データ範囲
    .MultiSelect = fmMultiSelectMulti
    .ColumnHeads = True
    .ListStyle = fmListStyleOption
  End With
End Sub

こちらは、直接、フィルターのデーターを参照していますので
フィルターで隠れているデーターも表示されますので
一旦、別のシートにデーターをコピーして参照してやる必要があります。
    • good
    • 0

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