[[20150823170240]] 『フォームコントロールでリスト作成』(ジョン) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『フォームコントロールでリスト作成』(ジョン)

 開発タブの挿入から、フォームコントロールの中のコンボボックスで
 リストを作成し、このリストから選択したものをSheet1にフィルタをかけ、Sheet2に
 表示できるようにしたいです。コードは以下です。

    Sheets("Sheet1").Range("A1").CurrentRegion.ClearContents

    Sheets("Sheet1").Select
    Range("A1").AutoFilter Field:=1, Criteria1:="abc"
    Range("A1").CurrentRegion.Copy Sheets("Sheet1").Range("A1")

 それと不明な点が一つ。
 コントロールの書式設定から、入力範囲を設定しましたがリンクする
 セルの意味がわかりません。
 どうかご指導ください。

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 >>リンクする セルの意味がわかりません。

 ドロップダウンで選択した結果は、その値ではなく、入力範囲の何番目の値か、そのインデックスが数値で返されますが
 その数値をセットするセルを指定します。ドロップダウンコントロールの裏側あたり(つまり見えない)を指定することが多いですね。

 以下は、そのセルが設定されたとしての処理コード案です。
 これを、ドロップダウンコントロールにマクロ登録してください。

 Sub DoFilter()
    Dim idx As Variant
    Dim key As String

    With ActiveSheet.DropDowns(Application.Caller)
    idx = Range(.LinkedCell)
        If IsEmpty(idx) Then
            MsgBox "まだ選択されていません"
        Else
            key = Range(.ListFillRange).Cells(idx)
            ActiveSheet.AutoFilterMode = False
            Range("A1").AutoFilter Field:=1, Criteria1:=key
            Sheets("Sheet2").UsedRange.ClearContents
            Range("A1").CurrentRegion.Copy Sheets("Sheet2").Range("A1")
            ActiveSheet.AutoFilterMode = False
        End If
    End With

 End Sub

(β) 2015/08/23(日) 18:10


 リンクするセルを設定しない方法もあります。
 その場合、以下のようなコードで。

 Sub DoFilter()
    Dim idx As Variant
    Dim key As String

    With ActiveSheet.DropDowns(Application.Caller)
        idx = .Value
        If idx = 0 Then
            MsgBox "まだ選択されていません"
        Else
            key = Range(.ListFillRange).Cells(idx)
            ActiveSheet.AutoFilterMode = False
            Range("A1").AutoFilter Field:=1, Criteria1:=key
            Sheets("Sheet2").UsedRange.ClearContents
            Range("A1").CurrentRegion.Copy Sheets("Sheet2").Range("A1")
            ActiveSheet.AutoFilterMode = False
        End If
    End With

 End Sub

(β) 2015/08/23(日) 18:25


 コントロールの書式設定のリンクするセルの意味がわかりました。
 ドロップダウンコントロールへのマクロも無事に出来ました。
 βさん、有難うございました。
(ジョン) 2015/08/23(日) 22:26

 βさん、8月にご教示いただいたものです。
 かなり前のことで、申し訳ありません。

 keyで選択された項目を、Sheets("Sheet2").Range("A1")にタイトルを入れ 
 本文の貼り付けをA5に変更したと思います。
 再度、ご教示お願いいたします。

(ジョン) 2015/12/19(土) 12:07


横から失礼します。どのあたりがわからないのでしょうか。

keyをいう変数を、Sheets("Sheet2").Range("A1").Valueに入れる方法?
Range("A1").CurrentRegion.Copy Sheets("Sheet2").Range("A1")
のコピー先を変更する方法?

もらったコードを理解するようにしないと、いけないですねえ。
一行一行をみていって、不明な点を質問したらどうですか?
(γ) 2015/12/19(土) 12:35


 γさんからの指摘に加えて

 タイトル と 本文 とは、それぞれ何を指していますか?

(β) 2015/12/19(土) 13:01


 フィルターにより、選択されたものを本文とし、Sheet2のA1に貼り付けていますが、
 今回は本文をSheet2のA5に貼り付け、A1にタイトルを入れたいと思います。
 タイトルは、Range("A1").AutoFilter Field:=1, Criteria1:="abc"のabc、つまりkeyを
 タイトルにしたのですが・・・

(ジョン) 2015/12/19(土) 17:34


 γさんコメントにもあるように、抽出したデータ(本文)は

 Range("A1").CurrentRegion.Copy Sheets("Sheet2").Range("A1")

 このコードの、Sheets("Sheet2").Range("A1") が転記先です。
 これを A5 にしたいということなら、どう変更するかはおわかりですね。

 で、それとは別に、タイトル(key) を A1 に転記したいんですよね。
 通常の転記コードはわかりますよね?

 Sheets("Sheet2").Range("A1").Value = key

 これを追加すればいいのですが?

(β) 2015/12/19(土) 18:25


 βさん、Sheets("Sheet2").Range("A1").Value = key
 わかりました。
 ありがとうございました。

(ジョン) 2015/12/19(土) 18:49


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.