Excel VBA質問箱 IV

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

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


1935 / 13645 ツリー ←次へ | 前へ→

【70942】検索にて、入力した値の上下数%のデータのみを表示 kkk 12/1/19(木) 15:27 質問[未読]
【70945】Re:検索にて、入力した値の上下数%のデータ... 通り過ごせない 12/1/19(木) 21:26 発言[未読]
【70959】Re:検索にて、入力した値の上下数%のデータ... kkk 12/1/21(土) 3:57 お礼[未読]
【70964】Re:検索にて、入力した値の上下数%のデータ... 通り過ごせない 12/1/21(土) 13:22 発言[未読]
【70965】Re:検索にて、入力した値の上下数%のデータ... 通り過ごせない 12/1/21(土) 13:36 発言[未読]

【70942】検索にて、入力した値の上下数%のデータ...
質問  kkk  - 12/1/19(木) 15:27 -

引用なし
パスワード
   初めて質問させていただきます。よろしくお願いいたします。

Excel2003VBAにて、
ユーザーフォームにて値を打ち込み、ある範囲を指定して検索するシステムを作っていますが、範囲の指定方法がわかりません。

例.
1,2,3,4,5,6,7,8,9,10 とデータがあるとき
入力値:5
検索範囲:20% (0.8〜1.2)
検索結果:4,5,6

と出るようにしたいです。
以下は、検索フォームの検索ボタンのプログラムです。

----------------------------------------------------------------
シート:Sheet1
データ範囲:1行A列〜RowNum行A列 (RowNumは行数をカウント後、下端の行番号が入ります。)
検索範囲:入力した値の上下20%

Private Sub CommandButtonSEARCH_Click() '検索ボタンクリック
 Call myFilter(1, textbox1.Value)
End Sub

myFilterの内容

Private Sub myFilter(tmpF As Integer, tmp1 As Variant) 'オートフィルタを設定
  
  Dim RowNum As Long
  Dim myfomula As String
  RowNum = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.Count, "E").End(xlUp).Row

  With Sheets("Sheet1")
    If Trim(tmp1) <> "" Then '数値が入っている
        .Range(.Cells(1, "A"), .Cells(RowNum, "A")).AutoFilter Field:=tmpF, Criteria1:="   " & tmp1
      
    End If
  End With
End Sub


そこでCriteriaの指定方法を教えていただきたいと思います。
TRIMMEAN関数ですと意味が異なりますしわかりません。
宜しくお願いいたします。

【70945】Re:検索にて、入力した値の上下数%のデー...
発言  通り過ごせない  - 12/1/19(木) 21:26 -

引用なし
パスワード
   マクロ記録はできますか?
オートフィルタ の オプションで
4以上 かつ 6以下
という条件を記録させてみては?

【70959】Re:検索にて、入力した値の上下数%のデー...
お礼  kkk  - 12/1/21(土) 3:57 -

引用なし
パスワード
   ご回答いただき大変ありがとうございます。
恐縮ながら自己解決してしまいました。。。

そしてご回答内容について、
もし宜しければ操作手順を教えていただけないでしょうか?
逆に初心者の私にはこちらがわかりませんでした。お手数をおかけしましてすみません。

▼通り過ごせない さん:
>マクロ記録はできますか?
>オートフィルタ の オプションで
>4以上 かつ 6以下
>という条件を記録させてみては?

ちなみに下記のようにプログラムを修正しましたところ、質問内容に合致しました。

シート:Sheet1
データ範囲:1行A列〜RowNum行A列 (RowNumは行数をカウント後、下端の行番号が入ります。)
検索範囲:入力した値の上下20%

Private Sub CommandButtonSEARCH_Click() '検索ボタンクリック
 Call myFilter(1, textbox1.Value)
End Sub

myFilterの内容

Private Sub myFilter(tmpF As Integer, tmp1 As Variant) 'オートフィルタを設定 tmpFはフィルタかける列番号
  
  Dim width1 As Variant  '下限値
  Dim width2 As Variant  '上限値
  Dim RowNum As Integer 'RowNum宣言
  RowNum = Sheets("Sheet1").Cells(Sheets("Sheet1").Rows.Count, "E").End(xlUp).Row 'RowNum定義
  
  
  With Sheets("Sheet1")
    If Trim(tmp1) <> "" Then
    width1 = tmp1 * 0.8 '下端の数値を設定、入力値の80%
    width2 = tmp1 * 1.2 '上端の数値を設定、入力値の120%
        .Range(.Cells(1, "A"), .Cells(RowNum,"A")).AutoFilter Field:=tmpF, Criteria1:=">=" & width1, Operator:=xlAnd, Criteria2:="<=" & width2
    End If
  End With
End Sub

【70964】Re:検索にて、入力した値の上下数%のデー...
発言  通り過ごせない  - 12/1/21(土) 13:22 -

引用なし
パスワード
   ▼kkk さん:
>ご回答いただき大変ありがとうございます。
>恐縮ながら自己解決してしまいました。。。
それはよかったですね。 

恐縮でもなんでもないです。
自己解決してもらうのが、回答者にとっての目標です。
解決するのは自分なのはあたりまえ。

ポイントは、
.Range(.Cells(1, "A"), .Cells(RowNum,"A")).AutoFilter _
  Field:=tmpF, Criteria1:=">=" & width1, _
  Operator:=xlAnd, Criteria2:="<=" & width2
の部分だと思います。
あなたが詰まっていたこの部分の原型が、
マクロ記録で簡単に得られるということを、私は申し上げた。

マクロ記録で得られる、4とか6のところをwidth1,width2で置き換えることは
常識的に思いつきますが、
Autofilterの文法に沿ったコードの原型を得るのは思いつけるものではありません。

もちろん、ヘルプをみて一から書き下す方法もありますが、
マクロ記録の利用は簡便です。
マクロ記録の利用は、中上級者でも使う手法だと思います。
よく研究されることを推奨します。

マクロ記録の使い方は、どんなExcelVBA関係の本にも必ず書いてあります。
よく確認してください。

【70965】Re:検索にて、入力した値の上下数%のデー...
発言  通り過ごせない  - 12/1/21(土) 13:36 -

引用なし
パスワード
   つまり、マクロ記録すれば、
ActiveSheet.Range("$A$1:$A$10").AutoFilter Field:=1, Criteria1:=">=4", _
  Operator:=xlAnd, Criteria2:="<=6"
のようなコードが得られるのだから、
4
6
のところを、与えられた上下限の値に置き換えるだけの話です。

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