Excel VBA質問箱 IV

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

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


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

【69146】オートフィルタで抽出した値をテキストボックスに ダイジ 11/5/20(金) 17:03 質問[未読]
【69153】Re:オートフィルタで抽出した値をテキスト... UO3 11/5/20(金) 20:44 発言[未読]
【69154】Re:オートフィルタで抽出した値をテキスト... kanabun 11/5/20(金) 20:49 発言[未読]
【69155】Re:オートフィルタで抽出した値をテキスト... 123 11/5/20(金) 21:10 回答[未読]
【69156】Re:オートフィルタで抽出した値をテキスト... kanabun 11/5/20(金) 23:24 発言[未読]
【69158】Re:オートフィルタで抽出した値をテキスト... 123 11/5/21(土) 4:48 発言[未読]
【69159】Re:オートフィルタで抽出した値をテキスト... kanabun 11/5/21(土) 9:46 発言[未読]

【69146】オートフィルタで抽出した値をテキストボ...
質問  ダイジ  - 11/5/20(金) 17:03 -

引用なし
パスワード
   始めまして。
オートフィルタで抽出した状態で、一番右側にある「伝票番号」を取得し
ユーザーフォームのテキストボックスに表示するにはどのような記述がよろしいのでしょうか?よろしくお願い致します。
オートフィルタで見えなくなったセルの値を取得してしまいます。

イメージだと
  A    B     C  D
1伝票番号 商品名  数量 金額
2  1   パン
3  2   バナナ
4  3   ジュース
5  5   チョコ
6  7   ジュース
7  8   ジュース

でフィルタを掛けて
  A    B     C  D
1伝票番号 商品名  数量 金額
4  3   ジュース
6  7   ジュース
7  8   ジュース

値を取得しようとすると「1」が表示されます
ここで「3」を取得したいのです。

現在使っているコードは下記になります
Private Sub UserForm_Initialize()
Sheets("原簿").Select
TextBox1.Value = Range("A1").End(xlUp).Offset(1, 0).Value
Sheets("帳票").Select
End Sub

みなさまのお力を貸してください。よろしくお願い致します。

【69153】Re:オートフィルタで抽出した値をテキス...
発言  UO3  - 11/5/20(金) 20:44 -

引用なし
パスワード
   ▼ダイジ さん:

もっと、スマートな方法があったように記憶していますが思い出せないので
ちょっとダサいコードです。


Sub Test()
  Dim c As Range
  Dim i As Long
  With Range("A1").CurrentRegion.Columns(1).SpecialCells(xlCellTypeVisible)
    If .Cells.Count = 1 Then
      MsgBox "抽出データがありません"
      Exit Sub
    End If
    For Each c In .Cells
      i = i + 1
      If i = 2 Then
        MsgBox "目的の値は " & c.Value & " です"
        Exit For
      End If
    Next
  End With
End Sub

【69154】Re:オートフィルタで抽出した値をテキス...
発言  kanabun  - 11/5/20(金) 20:49 -

引用なし
パスワード
   ▼ダイジ さん:
>始めまして。
>オートフィルタで抽出した状態で、一番右側にある「伝票番号」を取得し
>ユーザーフォームのテキストボックスに表示するには

フィルタかけて「見えるセル」(可視セル)だけで操作する、
ということですね


Private Sub UserForm_Initialize()
 Dim What As String: What = "ジュース"
 
 With Worksheets("原簿")
  .AutoFilterMode = False
  With .Cells(1).CurrentRegion
    .AutoFilter 2, What
    If .Columns(2).SpecialCells(xlVisible).Count > 1 Then
      TextBox1.Text = _
       Intersect(.Cells, .Offset(1)). _
        SpecialCells(xlVisible).Item(1, 1).Value
    End If
  End With
  .AutoFilterMode = False
 End With

 Worksheets("帳票").Activate
End Sub

[原簿]シートの [A1]セルを含むCurrentRegion をフィルタ範囲を対象
として、その B列にフィルタをかけ、
可視行が2行以上あったら(1行目は必ずタイトル行で可視行です)、
タイトル行を除くオートフィルタ範囲のうちの 可視行だけをとりだしたら、
その.Item(1,1) すなわち(1行目、1列目) が取得しようとしているセルに
なります。

【69155】Re:オートフィルタで抽出した値をテキス...
回答  123  - 11/5/20(金) 21:10 -

引用なし
パスワード
   ▼ダイジ さん:
>▼ダイジ さん:
「3」を取得するだけなら


1行目に行挿入し
セルA1 に =subtotal(4,A3:A100) を入れる
2行目から「オートフィルタ」をかける

イメージだと
  A    B     C  D
1 =subtotal(4,A3:A100)
2伝票番号 商品名  数量 金額
3  1   パン
4  2   バナナ
5  3   ジュース
6  5   チョコ
7  7   ジュース
8  8   ジュース

2行目から「ジュース」でフィルタを掛けて
  A    B     C  D
1  3
2伝票番号 商品名  数量 金額
5  3   ジュース
7  7   ジュース
8  8   ジュース

セルA1に「3」を取得できます

msgbox Range("a1")

でメッセージBOXに出せます

【69156】Re:オートフィルタで抽出した値をテキス...
発言  kanabun  - 11/5/20(金) 23:24 -

引用なし
パスワード
   ▼123 さん:
すみません。

>イメージだと
>  A    B     C  D
>1 =subtotal(4,A3:A100)
>2伝票番号 商品名  数量 金額
>3  1   パン
>4  2   バナナ
>5  3   ジュース
>6  5   チョコ
>7  7   ジュース
>8  8   ジュース

>セルA1に「3」を取得できます

Subtotal(4, ) というのは 可視セルのMAXの取得ですよね?
したがって、その式だと、「8」になりませんか?

【69158】Re:オートフィルタで抽出した値をテキス...
発言  123  - 11/5/21(土) 4:48 -

引用なし
パスワード
   ▼kanabun さん:
>▼123 さん:
>すみません。
>
>>イメージだと
>>  A    B     C  D
>>1 =subtotal(4,A3:A100)
>>2伝票番号 商品名  数量 金額
>>3  1   パン
>>4  2   バナナ
>>5  3   ジュース
>>6  5   チョコ
>>7  7   ジュース
>>8  8   ジュース
>
>>セルA1に「3」を取得できます
>
>Subtotal(4, ) というのは 可視セルのMAXの取得ですよね?
>したがって、その式だと、「8」になりませんか?
すみません
countかcountAの
Subtotal(2, )かSubtotal(3, )
にしてください
excel2003 ならできてます
Subtotalは、可視セルを集計する関数です

【69159】Re:オートフィルタで抽出した値をテキス...
発言  kanabun  - 11/5/21(土) 9:46 -

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

>countかcountAの
>Subtotal(2, )かSubtotal(3, )
>にしてください
>Subtotalは、可視セルを集計する関数です

くどくてすみません m(_ _)m

質問者さんのおっしゃる
> フィルタを掛けて
>   A    B     C  D
> 1伝票番号 商品名  数量 金額
> 4  3   ジュース
> 6  7   ジュース
> 7  8   ジュース
>
> ここで「3」を取得したいのです。

「3」とは フィルタかけて抽出された行数(レコード数)のことでしたか?
それなら SubTotal(3, ) で OKですね。

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