|    | 
     ▼ウッシ さん: 
返事ありがとうございます。 
もう少しお付き合いお願いします。 
>>>> If Target.Cells.Count > 1 Then 
     ↑これがまずいですか 
>>>複数セル選択時ですか? 
はい複数セルの選択で"D4:F4"です。 
 
>なぜ、複数セルにしてるのでしょうか? 
セル幅の関係からなのですが 
> 
>複数セル「A1:D4」を選択すると処理が続行されて、 
      ↑"A1:D4"ではなく→"D4:F4"です 
      この意味がよくわからないのですが 
      "A1:D4"の結合セルだと問題があるということでしょうか? 
>>Intersect(Target, Range("D4:F4")) 
>を通過して、「ActiveCell」=「A1」に「ListBox1.Value」がセットされちゃいます。下記コードで良くないですか。 
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
 If Target.Cells.Count > 1 Then 
 On Error Resume Next 
 If Not Intersect(Target, Range("D4:F4")) Is Nothing Then 
  UserForm1.Show vbModeless 
 Else 
  UserForm1.Hide 
 End If 
 End If 
End Sub 
理解してないようですみません 
>それでいいのでしょうか? 
> 
>選択した複数セルそれぞれに別処理するなら勿論コード変更は必要ですし、 
>>Intersect(Target, Range("D4:F4")) 
>で取得出来る、「D4:F4」に属するセルだけを処理対象にするコードも必要です。 
> 
>>★.Parentとはヘルプ見ましたがよくわかりません 
>親オブジェクトで、「ActiveCell」のあるシートの事です。 
>もし、別シートのセルに値をセットするなら、 
> 
>>Set s = .Parent 
>を 
>>Set s = WorkSheets("Sheet1") 
>のようにします。 
↑これはよく解りましたありがとうございました。 
> 
>>>    Set r = s.Range(s.Range("AG2"), s.Range("AG2").End(xlDown)) 
>>                     ↑AM最終列でなくていいのですか 
>リストにセットしたデータで行位置を取得するだけです。 
> 
>>>    i = ListBox1.ListIndex + 1 
>リストの一番目が選択されてると「ListIndex」は「0」なのでプラス1します。 
> 
>>>    s.Range("E6").Value = r(i, 2) 
>>>    s.Range("E7").Value = r(i, 3) 
>>>    s.Range("E8").Value = r(i, 4) 
>>>    s.Range("G6").Value = r(i, 5) 
>>>    s.Range("G7").Value = r(i, 6) 
>>>    s.Range("G8").Value = r(i, 7) 
>>      ↑★この意味は 
>rはリストにセットしたデータなので、それの「i」番目(行目)で、横に「2〜7」列目 
>のデータっていう意味です。 
↑ココもわかりました。 
 | 
     
    
   |