Excel VBA質問箱 IV

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

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


23239 / 76738 ←次へ | 前へ→

【58868】Re:ListBox戻り値-1の時の条件設定
回答  Hirofumi  - 08/11/14(金) 20:39 -

引用なし
パスワード
   ListIndexが-1の時、変数に"*"が入るようにして
比較をLike演算子で行ったらいいかも

UserFormにListBox1〜3が有るとします
データはSheet1に有り、C2:E2は列見出しとします
転記先はSheet2とします

Option Explicit

Private rngList As Range
Private lngRows As Long
Private vntA As Variant
Private vntB As Variant
Private vntC As Variant
Private rngResult As Range
Private lngWrite As Long

Private Sub CommandButton1_Click()

  Dim i As Long
  
  With rngList
    For i = 1 To lngRows
      If .Offset(i, 0).Value Like vntA Then
        If .Offset(i, 1).Value Like vntB Then
          If .Offset(i, 2).Value Like vntC Then
            lngWrite = lngWrite + 1
            rngResult.Offset(lngWrite).Resize(, 3).Value _
                = .Offset(i).Resize(, 3).Value
          End If
        End If
      End If
    Next i
  End With
  
End Sub

Private Sub CommandButton2_Click()

  Unload Me
  
End Sub

Private Sub ListBox1_Click()

  With ListBox1
    If .ListIndex > -1 Then
      vntA = .List(.ListIndex)
    End If
  End With
  
End Sub

Private Sub ListBox2_Click()

  With ListBox2
    If .ListIndex > -1 Then
      vntB = .List(.ListIndex)
    End If
  End With
  
End Sub

Private Sub ListBox3_Click()

  With ListBox3
    If .ListIndex > -1 Then
      vntC = .List(.ListIndex)
    End If
  End With
  
End Sub

Private Sub UserForm_Initialize()

  Dim i As Long
  Dim vntData As Variant
  
  Set rngList = Worksheets("Sheet1").Cells(2, "C")
  
  Set rngResult = Worksheets("Sheet2").Cells(2, "C")
  
  vntA = "*"
  vntB = "*"
  vntC = "*"

  With rngList
    lngRows = .Offset(Rows.Count - .Row).End(xlUp).Row - .Row
    For i = 0 To 2
      vntData = .Offset(1, i).Resize(lngRows).Value
      Unique Me.Controls("ListBox" & (i + 1)), vntData
    Next i
  End With
  
End Sub

Private Sub UserForm_Terminate()

  Set rngList = Nothing
  Set rngResult = Nothing
  
End Sub

Private Sub Unique(lstBox As MSForms.ListBox, vntData As Variant)

  Dim i As Long
  Dim j As Long
  Dim k As Long
  Dim vntList As Variant
  
  ReDim vntList(0)
  k = -1
  For i = 1 To UBound(vntData, 1)
    For j = 0 To k
      If vntData(i, 1) = vntList(j) Then
        Exit For
      End If
    Next j
    If j > k Then
      k = k + 1
      ReDim Preserve vntList(k)
      vntList(k) = vntData(i, 1)
    End If
  Next i
  
  lstBox.List = vntList

End Sub

0 hits

【58855】ListBox戻り値-1の時の条件設定 ねろろ 08/11/14(金) 13:30 質問
【58857】Re:ListBox戻り値-1の時の条件設定 Jaka 08/11/14(金) 13:57 発言
【58867】Re:ListBox戻り値-1の時の条件設定 ねろろ 08/11/14(金) 20:05 お礼
【58858】Re:ListBox戻り値-1の時の条件設定 kanabun 08/11/14(金) 14:00 発言
【58865】Re:ListBox戻り値-1の時の条件設定 ねろろ 08/11/14(金) 19:43 お礼
【58862】Re:ListBox戻り値-1の時の条件設定 SS 08/11/14(金) 17:19 発言
【58866】Re:ListBox戻り値-1の時の条件設定 ねろろ 08/11/14(金) 20:00 お礼
【58868】Re:ListBox戻り値-1の時の条件設定 Hirofumi 08/11/14(金) 20:39 回答
【58869】Re:ListBox戻り値-1の時の条件設定 ねろろ 08/11/14(金) 22:28 お礼
【58877】Re:ListBox戻り値-1の時の条件設定 Hirofumi 08/11/15(土) 18:59 発言
【58891】Re:ListBox戻り値-1の時の条件設定 ねろろ 08/11/16(日) 15:22 お礼

23239 / 76738 ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free