• ベストアンサー

エクセル2003ですが、A列(500行に氏名が500人分記述)、、、

エクセル2003ですが、A列(500行に氏名が500人分記述されています)、この状態で、この500人の中から該当者のみ、黄色でセルを色塗り(バケツのツール)ました。 で、該当者を見るとき、A列をずーと下までみるのが面倒なので、B列にこのA列で黄色にいろ塗りした氏名のメンバーのみを集めたいのですが、、、 可能でしょうか? (A列で黄色くいろ塗りしたら、リアルで即、B列に反映した表示されるというものをイメージしているのですが、、、 宜しくご教示ください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 >(A列で黄色くいろ塗りしたら、リアルで即、B列に反映した表示されるというものをイメージしているのですが、、、 確かに、それは可能なのですが、その設定は、もう少し複雑になります。それでも良ければ、ご提示いたします。つまり、以下のマクロコードを働かせるための、書式設定ボタンにイベントをつけることです。以下は、一応、対話モードになっています。 '標準モジュールに設定してください。 Sub ColorCollection()   Dim Data() As Variant   Dim c As Variant   Dim r As Range   Dim i As Long   Dim j As Long 'データ取得 SetStart:   On Error Resume Next   Set r = Nothing   Set r = Application.InputBox("色のついたセルを指定してください。", Type:=8)   If r Is Nothing Then Exit Sub   On Error GoTo 0   i = r.Interior.ColorIndex   If i = xlColorIndexNone Then    MsgBox "そこは、色つきできありません。", vbInformation: GoTo SetStart   End If   For Each c In Range(Cells(1, r.Column), Cells(65536, r.Column).End(xlUp))    If c.Interior.ColorIndex = i Then      ReDim Preserve Data(j)      Data(j) = c.Value      j = j + 1    End If   Next   PasteData r, Data()   Set r = Nothing End Sub Private Sub PasteData(rng As Range, Data() As Variant) 'データ貼り付け用のルーチン   Dim PasteRange As Range   Dim r As Range     Set PasteRange = Cells(1, rng.Column).Resize(UBound(Data()) + 1, 1)   If WorksheetFunction.CountA(rng.Offset(, 1).EntireColumn) = 0 Then    PasteRange.Offset(, 1).Value = WorksheetFunction.Transpose(Data())   ElseIf MsgBox("隣の列に上書きしてよろしいですか?", vbInformation + vbYesNo) = vbYes Then    rng.Offset(, 1).EntireColumn.ClearContents    PasteRange.Offset(, 1).Value = WorksheetFunction.Transpose(Data())    Else    On Error Resume Next     Set r = Application.InputBox("適当な列を指定してください。", Type:=8)     If r Is Nothing Then Exit Sub    On Error GoTo 0     Set PasteRange = Cells(1, r.Column).Resize(UBound(Data()) + 1, 1)     PasteRange.Value = WorksheetFunction.Transpose(Data())   End If   Set PasteRange = Nothing End Sub

hikarika1
質問者

お礼

回答ありがとうございます。 理解できるように努力をする、勉強をする、これのみです。 ありがとうございました。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

#2のimogasiさんへ Wendy02です。 >セルに色づけされたという「イベント」を捉えるものはVBAレベルでないと思うので、不可能でしょう(#1のご回答がそれだったらすみません)。 #1の回答はそれではありません。クラスによるコマンド・ボタンへのイベントというテクニックになります。しかし、クラスによるイベントは、書式の設定のボタンが複数なので、設定が複雑で、作るほうはもちろんのこと、貼り付ける側も間違えて動かない、ということになりかねないので、紹介するのはやめました。

hikarika1
質問者

お礼

自分が考えていたほど、単純ではなく、複雑で驚いております。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

たった今、セルに色づけされたという「イベント」を捉えるものはVBAレベルでないと思うので、不可能でしょう(#1のご回答がそれだったらすみません)。抜き出したい都度、ボタンやメニューを押すや約束したセルを選択する、そのセルの値を変えるなど、きっかけ(イベント)を人間が与えてくれるなら、VBAでその都度再処理して抜きだせるでしょう。

hikarika1
質問者

お礼

回答ありがとうございます。 いやー、難しいんですね。 勉強しないと、、

関連するQ&A