Excel VBA質問箱 IV

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

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


1413 / 13646 ツリー ←次へ | 前へ→

【74630】コンボボックスの値をテキストボックスに表示 ペコ 13/8/17(土) 9:56 質問[未読]
【74632】Re:コンボボックスの値をテキストボックスに表示 Yuki 13/8/17(土) 11:26 発言[未読]
【74633】Re:コンボボックスの値をテキストボックスに表示 Yuki 13/8/17(土) 11:33 発言[未読]
【74634】Re:コンボボックスの値をテキストボックスに表示 ペコ 13/8/17(土) 13:26 発言[未読]
【74635】Re:コンボボックスの値をテキストボックスに表示 Yuki 13/8/17(土) 16:09 発言[未読]
【74636】Re:コンボボックスの値をテキストボックスに表示 ペコ 13/8/17(土) 18:16 発言[未読]
【74637】Re:コンボボックスの値をテキストボックスに表示 Yuki 13/8/17(土) 22:31 発言[未読]

【74630】コンボボックスの値をテキストボックスに表示
質問  ペコ  - 13/8/17(土) 9:56 -

引用なし
パスワード
   検索用フォームにテキストボックスとコマンドボタンを設置しており、
テキストボックスにシート1のNoを入力し、コマンドボタンを押すと、
検索結果表示用フォームを表示し、表示用フォームのコンボボタンに
シート2の検索結果を表示するマクロを組んでいます。
(Noの1で検索すると、1の依頼日1/1,2/1,3/1がコンボボタンに表示)

検索結果表示用フォームには、コンボボタンとは別に、
テキストボックス(依頼日/対応日/アフター内容)を設置しており、
コンボボタンに表示されている検索結果(依頼日)のどれかを選択すると、
テキストボックスに付随する内容を表示させたいと考えております。

しかし、いろいろ試してみたのですが、
初心者の為、上手くいきませんので、
ご教授頂ければ幸いで御座います。
宜しくお願いします。

シート1
No. 氏名  年齢  住所  ・・・・
 1 あああ  5   ○○○ ・・・・
 2 いいい  10  ■■■ ・・・・
 3 ううう  15  △△△ ・・・・

シート2
No. 依頼日  対応日  アフター内容  ・・・・
 1  1/1    1/2    ○○○  ・・・・
 1  2/1    2/2    ○○○  ・・・・
 1  3/1    3/2    ○○○  ・・・・
 2  4/1    4/2    ■■■  ・・・・
 2  5/1    5/2    ■■■  ・・・・
 2  6/1    6/2    ■■■  ・・・・
 3  7/1    7/2    △△△  ・・・・
 3  8/1    8/2    △△△  ・・・・
 3  9/1    9/2    △△△  ・・・・

宜しくお願い致します。

【74632】Re:コンボボックスの値をテキストボックスに表示
発言  Yuki  - 13/8/17(土) 11:26 -

引用なし
パスワード
   ▼ペコ さん:
こんにちは。

USerForm1に
TextBoxを5ヶ
Object Name     TextBox1, No, 依頼日, 対応日, アフター内容
ComboBoxを1ヶ
Object Name     ComboBox1
CommandButtonを1ヶ
Object Name    CommandButton1
を貼り付け提示のデータを Sheet1 と Sheet2 に張り付けて
Userform1を実行してみて下さい。
CommandButtonを使用していませんが TextBox1_Exit の内容を
CommandButton1_Click へ張り付ければ宜しいですよ。
その時はTextBox1_Exit の内容を削除

下記をUserformのモジュールへ貼り付け
尚、Sheet2のB列の書式は ユーザー設定で mm/dd にして下さい。

Option Explicit
Dim RR As Long
Private Sub ComboBox1_Change()
  Dim R  As Range
  With Worksheets("Sheet2")
    .AutoFilterMode = False
    With .Range("A1").CurrentRegion
      .AutoFilter Field:=1, Criteria1:=RR
      .AutoFilter Field:=2, Criteria1:=Format(Me.ComboBox1.Value, "mm/dd")
      With .SpecialCells(xlCellTypeVisible)
      Debug.Print .Areas.Count
        If .Areas.Count = 1 Then
          Set R = .Offset(1).Resize(.Rows.Count - 1)
        Else
          Set R = .Areas(.Areas.Count)
        End If
      End With
      Debug.Print R.Address
      With Me
        .No = R.Cells(1, 1).Value
        .依頼日 = Format(R.Cells(1, 2).Value, "mm/dd")
        .対応日 = Format(R.Cells(1, 3).Value, "mm/dd")
        .アフター内容 = R.Cells(1, 4).Value
      End With
    End With
  End With
End Sub

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Dim R  As Range
  RR = 0
  If TextBox1.Text = "" Then Exit Sub        ' 入力が無い
  With Worksheets("Sheet1").Range("A1").CurrentRegion
    On Error Resume Next
    RR = WorksheetFunction.Match(TextBox1.Value, .Offset(0, 1).Resize(, 1), 0)
    On Error GoTo 0
    If RR = 0 Then Exit Sub  ' 対象が無い
    RR = .Cells(RR, 1).Value
  End With
  With Worksheets("Sheet2")
    .AutoFilterMode = False
    With .Range("A1").CurrentRegion
      .AutoFilter Field:=1, Criteria1:=RR
      With .SpecialCells(xlCellTypeVisible)
        Set R = .Offset(1, 1).Resize(.Rows.Count - 1)
      End With
      Me.ComboBox1.List = R.Value
    End With
  End With
End Sub


>シート1
>No. 氏名  年齢  住所  ・・・・
> 1 あああ  5   ○○○ ・・・・
> 2 いいい  10  ■■■ ・・・・
> 3 ううう  15  △△△ ・・・・
>
>シート2
>No. 依頼日  対応日  アフター内容  ・・・・
> 1  1/1    1/2    ○○○  ・・・・
> 1  2/1    2/2    ○○○  ・・・・
> 1  3/1    3/2    ○○○  ・・・・
> 2  4/1    4/2    ■■■  ・・・・
> 2  5/1    5/2    ■■■  ・・・・
> 2  6/1    6/2    ■■■  ・・・・
> 3  7/1    7/2    △△△  ・・・・
> 3  8/1    8/2    △△△  ・・・・
> 3  9/1    9/2    △△△  ・・・・
>

【74633】Re:コンボボックスの値をテキストボックスに表示
発言  Yuki  - 13/8/17(土) 11:33 -

引用なし
パスワード
   ▼ペコ さん:
こんにちは。
>尚、Sheet2のB列の書式は ユーザー設定で mm/dd にして下さい。
上記の件ですが
コード内の Formatの書式を mm/dd ー> m/d にすれば変更しなくても
OK ですね。

【74634】Re:コンボボックスの値をテキストボックスに表示
発言  ペコ  - 13/8/17(土) 13:26 -

引用なし
パスワード
   ▼Yuki さん:
こんにちは。
コードありがとうございます。
大変助かります。

早速試してみたのですが、
「実行エラー'1004':
 WorksheetFunctionクラスのMatchプロパティを取得できません。」
というエラーが生じます。
私の方でも入力等のミスが無いか、確認したのですが、
多分無いと思いますので、
大変申し訳御座いませんが、引き続きご教授頂けたらと存じます。
宜しくお願い致します。

【74635】Re:コンボボックスの値をテキストボックスに表示
発言  Yuki  - 13/8/17(土) 16:09 -

引用なし
パスワード
   ▼ペコ さん:
>「実行エラー'1004':
> WorksheetFunctionクラスのMatchプロパティを取得できません。」
>というエラーが生じます。
こんにちは。

On Error Resume Next が入れて有るから出る筈がないのですが。
↑         をコメントにするとデータが一致しないときに
上記エラーが出ます。
TextBox1の値がSheet1上にあるか確認してみましょう。
でも不思議

一部書き換えましたのでコピペし直してください。

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
      .AutoFilter Field:=1, Criteria1:=RR
      .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

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Dim R  As Range
  RR = 0
  If TextBox1.Text = "" Then Exit Sub
  With Worksheets("Sheet1").Range("A1").CurrentRegion
    On Error Resume Next
    RR = WorksheetFunction.Match(TextBox1.Value, .Offset(0, 1).Resize(, 1), 0)
    On Error GoTo 0
    If RR = 0 Then Exit Sub
    RR = .Cells(RR, 1).Value
  End With
  With Worksheets("Sheet2")
    .AutoFilterMode = False
    With .Range("A1").CurrentRegion
      .AutoFilter Field:=1, Criteria1:=RR
      With .SpecialCells(xlCellTypeVisible)
        If .Areas.Count = 1 Then
          Set R = .Offset(1, 1).Resize(.Rows.Count - 1)
        Else
          Set R = .Areas(.Areas.Count).Offset(, 1).Resize(, 1)
        End If
      End With
      Me.ComboBox1.List = R.Value
    End With
  End With
End Sub

【74636】Re:コンボボックスの値をテキストボックスに表示
発言  ペコ  - 13/8/17(土) 18:16 -

引用なし
パスワード
   ▼Yuki さん:
お返事ありがとうございます。
又、お手数お掛けしてすみません。

書き換えて頂いたコードで試してみたのですが、
やはり同様のエラーが生じております。。。

ここまでやって頂いてエラーが生じるということは、
多分、私の方に問題があると思います。

大変申し訳御座いませんが、
コード貼り付けまでの流れをもうちょっと詳しく
お教え頂けないでしょうか。

宜しくお願い致します。

【74637】Re:コンボボックスの値をテキストボックスに表示
発言  Yuki  - 13/8/17(土) 22:31 -

引用なし
パスワード
   ▼ペコ さん:

>大変申し訳御座いませんが、
>コード貼り付けまでの流れをもうちょっと詳しく
>お教え頂けないでしょうか。
>宜しくお願い致します。

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    △△△    ・・・・

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