|
▼ペコ さん:
>大変申し訳御座いませんが、
>コード貼り付けまでの流れをもうちょっと詳しく
>お教え頂けないでしょうか。
>宜しくお願い致します。
USerForm1に
TextBoxを5ヶ
各TextBoxの名前 TextBox1, No, 依頼日, 対応日, アフター内容
ComboBoxを1ヶ
ComboBoxの名前 ComboBox1
CommandButtonを1ヶ
CommandButtonの名前 CommandButton1
を貼り付けます。
提示のデータを Sheet1 と Sheet2 に張り付けて
Userform1を実行してみて下さい。
CommandButtonを使用していませんが TextBox1_Exit の内容を
CommandButton1_Click へ張り付ければ宜しいですよ。
その時はTextBox1_Exit の内容を削除
下記をUserformのモジュールへ貼り付け
Option Explicit
Dim RR As Long
' コンボボックスのテキストに変更があった時
Private Sub ComboBox1_Change()
Dim R As Range
If RR = 0 Then Exit Sub
With Worksheets("Sheet2")
.AutoFilterMode = False
With .Range("A1").CurrentRegion
' Sheet2に RR でAutoFilter
.AutoFilter Field:=1, Criteria1:=RR
' Sheet2に コンボボックスの値(月日) でAutoFilter
.AutoFilter Field:=2, Criteria1:=Format(Me.ComboBox1.Value, "m/d")
With .SpecialCells(xlCellTypeVisible)
' データがタイトル行と分かれているか
If .Areas.Count = 1 Then
Set R = .Offset(1).Resize(.Rows.Count - 1)
Else
Set R = .Areas(.Areas.Count)
End If
End With
' 各データのセット
With Me
.No = R.Cells(1, 1).Value
.依頼日 = Format(R.Cells(1, 2).Value, "m/d")
.対応日 = Format(R.Cells(1, 3).Value, "m/d")
.アフター内容 = R.Cells(1, 4).Value
End With
End With
End With
End Sub
' TextBox1からフォーカスを失うとき
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim R As Range
RR = 0
If TextBox1.Text = "" Then Exit Sub
' Sheet1の縦横の空白で囲まれた領域
With Worksheets("Sheet1").Range("A1").CurrentRegion
On Error Resume Next 'エラーでも次へ
' マッチ関数で検索値, 検索領域, 照合の型 0=完全一致
Debug.Print .Offset(0, 1).Resize(, 1).Address '範囲のアドレス
RR = WorksheetFunction.Match(TextBox1.Value, .Offset(0, 1).Resize(, 1), 0)
On Error GoTo 0
' エラーの時は抜ける
If RR = 0 Then Exit Sub
' RRの値が行番だから値をセット
RR = .Cells(RR, 1).Value
End With
' Sheet2の
With Worksheets("Sheet2")
' AutoFilter の解除
.AutoFilterMode = False
' 縦横の空白で囲まれた領域
With .Range("A1").CurrentRegion
' A列で AutoFilterをかける 検索値 = RR
.AutoFilter Field:=1, Criteria1:=RR
' 表示行の値Set
With .SpecialCells(xlCellTypeVisible)
' 抽出データが最初からの場合サンプルでは RRが1のとき
If .Areas.Count = 1 Then
Set R = .Offset(1, 1).Resize(.Rows.Count - 1)
Else
' 抽出データがタイトル行と分かれている時 RR>1のとき
Set R = .Areas(.Areas.Count).Offset(, 1).Resize(, 1)
End If
End With
' コンボボックスに値セット
Me.ComboBox1.List = R.Value
End With
End With
End Sub
Sheet1
No. 氏名 年齢 住所 ・・・・
1 あああ 5 ○○○ ・・・・
2 いいい 10 ■■■ ・・・・
3 ううう 15 △△△ ・・・・
Sheet2
No. 依頼日 対応日 アフター内容 ・・・・
1 1/1 01/02 ○○○ ・・・・
1 2/1 02/02 ○○○ ・・・・
1 3/1 03/02 ○○○ ・・・・
2 4/1 04/02 ■■■ ・・・・
2 5/1 05/02 ■■■ ・・・・
2 6/1 06/02 ■■■ ・・・・
3 7/1 07/02 △△△ ・・・・
3 8/1 08/02 △△△ ・・・・
3 9/1 09/02 △△△ ・・・・
|
|