Excel VBA質問箱 IV

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

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


989 / 13644 ツリー ←次へ | 前へ→

【77024】条件を満たす値の検索 さくら 15/5/7(木) 21:52 質問[未読]
【77025】Re:条件を満たす値の検索 kanabun 15/5/7(木) 22:14 発言[未読]
【77026】Re:条件を満たす値の検索 kanabun 15/5/7(木) 22:24 発言[未読]
【77027】Re:条件を満たす値の検索 β 15/5/8(金) 8:00 発言[未読]
【77028】Re:条件を満たす値の検索 kanabun 15/5/8(金) 8:19 発言[未読]
【77029】Re:条件を満たす値の検索 β 15/5/8(金) 8:25 発言[未読]
【77030】Re:条件を満たす値の検索 kanabun 15/5/8(金) 9:08 発言[未読]
【77038】Re:条件を満たす値の検索 さくら 15/5/9(土) 18:31 質問[未読]
【77039】Re:条件を満たす値の検索 β 15/5/9(土) 19:39 発言[未読]
【77041】Re:条件を満たす値の検索 kanabun 15/5/9(土) 21:06 発言[未読]
【77042】Re:条件を満たす値の検索 kanabun 15/5/9(土) 21:19 発言[未読]
【77058】Re:条件を満たす値の検索 さくら 15/5/10(日) 23:58 お礼[未読]

【77024】条件を満たす値の検索
質問  さくら  - 15/5/7(木) 21:52 -

引用なし
パスワード
   お世話になります。
以下のような動作をさせたいのですが、なかなかうまくいきません。
A列に様々な数値が入力されています。
その数値の中から、10.01以上10.05以下の数値のみを、A1セルから列方向に順に検索→データ取得し、同一ファイルのsheet2のA1セルから列方向に出力させたいのですが。Findメソッドと比較演算子を組み合わせていろいろ試しましたがうまくいきません。
ご教授頂けると幸いです。

【77025】Re:条件を満たす値の検索
発言  kanabun  - 15/5/7(木) 22:14 -

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

>A列に様々な数値が入力されています。
>その数値の中から、10.01以上10.05以下の数値のみを、

>sheet2のA1セルから列方向に出力させたいのですが。
> Findメソッドと比較演算子を組み合わせていろいろ試しましたがうまくいきません。

ある範囲の数値の抽出転記ですから、これは、 Findメソッドより フィルター の
処理かと思います。

Sheet2 シートの空いているところに(たとえば それが Z列だとすると)

 Z1とAA1 に A列の見出し、
 Z2に >=10.01
 AA2 に <=10.05

と書き込んで、フィルタオプション(2007以降だと フィルター - 詳細設定)を
実行してみてください。
マクロにするにはそれをマクロ記録します。

【77026】Re:条件を満たす値の検索
発言  kanabun  - 15/5/7(木) 22:24 -

引用なし
パスワード
   ことばで説明すると難しいので、
マクロ記録してみました(以下はそれをまとめたものです)

Sub Macro1()
' Macro recorded 2015/5/7 by kanabun
'
  Sheets("Sheet2").Select
  Range("Z1:AA1").FormulaR1C1 = "=Sheet1!R1C1" '条件書き込み
  Range("Z2").FormulaR1C1 = ">=10.01"
  Range("AA2").FormulaR1C1 = "<=10.05"
  
  '詳細設定(AdvancedFilter) 実行
  Sheets("Sheet1").Range("A1:A100").AdvancedFilter Action:=xlFilterCopy, _
    CriteriaRange:=Range("Z1:AA2"), CopyToRange:=Range("A1")
End Sub

【77027】Re:条件を満たす値の検索
発言  β  - 15/5/8(金) 8:00 -

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

kanabunさんからフィルターオプション案がでていますので、もう1つのオートフィルターで。
(1行目にタイトルがあるという前提ですが)

フィルターを掛け、抽出したものをコピペする操作をマクロ記録しますと

Sub Macro1()
'
' Macro1 Macro
'

'
  ActiveSheet.Range("$A$1:$A$13").AutoFilter Field:=1, Criteria1:=">=10.1", _
    Operator:=xlAnd, Criteria2:="<=10.5"
  Columns("A:A").Select
  Selection.Copy
  Sheets("Sheet2").Select
  ActiveSheet.Paste

End Sub

これを整理すると

Sub Test()
  ActiveSheet.AutoFilterMode = False
  Columns("A").AutoFilter Field:=1, Criteria1:=">=10.1", _
              Operator:=xlAnd, Criteria2:="<=10.5"
  With ActiveSheet.AutoFilter.Range
    If .SpecialCells(xlCellTypeVisible).Count > 0 Then
      .Copy Sheets("Sheet2").Range("A1")
    End If
  End With
  ActiveSheet.AutoFilterMode = False
End Sub

【77028】Re:条件を満たす値の検索
発言  kanabun  - 15/5/8(金) 8:19 -

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

> フィルターオプション案

フィルタオプションというと、いつも思うんですけど...
いまでもこの訳語は有効なんだろうか、と。
Excel2007からはじめた人でも、どこかに フィルタオプション って用語が
出てくるんでしょうか?

# ひとりごとです、ごめんなさい。

【77029】Re:条件を満たす値の検索
発言  β  - 15/5/8(金) 8:25 -

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

>フィルタオプションというと、いつも思うんですけど...
>いまでもこの訳語は有効なんだろうか、と。
>Excel2007からはじめた人でも、どこかに フィルタオプション って用語が
>出てくるんでしょうか?
>

そうですねぇ。
個人的には、フィルターオプションという響きがすきで、愛着もあるんですが
新しい人からみれば、なんのこっちゃ? でしょうね。

フィルター詳細設定 という表記を使うように気を付けます。
(アドバンストフィルター という言葉もだめでしょうねぇ。ちょっと寂しい?)

【77030】Re:条件を満たす値の検索
発言  kanabun  - 15/5/8(金) 9:08 -

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

>A列に様々な数値が入力されています。
>その数値の中から、10.01以上10.05以下の数値のみを、
> A1セルから列方向に順に検索→データ取得し、同一ファイルのsheet2の
> A1セルから列方向に出力させたいのですが。

「列方向」というのは 「行方向」(たて方向)のまちがいだとして、
思うんですけど、A列の数値だけ書き出しても、意味ないのでは?
B列、C列...つまり、表の他の項目もいっしょに書き出さないと
実用的な結果にならない気がします。

ということで、
Sheet1 の表を A列の数値がある条件の行だけ すべての列を転記する
マクロは さきほどのを少し修正して、以下のようになります。

Sub tryA()
  With Sheets("Sheet2")
    .UsedRange.ClearContents

    '条件をシートに書き出す
    .Range("Z1:AA1").Formula = "=Sheet1!$A$1"
    .Range("Z2").Formula = ">=10.01"
    .Range("AA2").Formula = "<=10.05"
    
    'フィルターAdvancedFilter 実行
    Sheets("Sheet1").Range("A1").CurrentRegion.AdvancedFilter _
      Action:=xlFilterCopy, _
      CriteriaRange:=.Range("Z1:AA2"), _
      CopyToRange:=.Range("A1")
    .Activate
  End With
End Sub

【77038】Re:条件を満たす値の検索
質問  さくら  - 15/5/9(土) 18:31 -

引用なし
パスワード
   kanabunさん βさん

ありがとうございました。お礼が遅くなりましてたいへん失礼いたしました。
当初の説明が言葉足らずで申し訳なかったのですが、正確には以下のような動作を望んでいます。下表の例で言いますと、A列の中から10.1以上10.5以下の値を検索→その右横セルの値B1〜B3をsheet2 A1から下方向へ順に貼り付けるイメージです。下表の例ではsheet2 A1〜A6にB1,B2,B3,B5,B6,B7が張り付くことになります。
ご提案頂いたフィルタ案でトライしてみたのですが私にはむりでした。
ご教授頂けますと幸いです。

A   B
10.3  B1
・   B2
・   B3
・   ・
10.3  B5  
・   B6
・   B7
・   ・

【77039】Re:条件を満たす値の検索
発言  β  - 15/5/9(土) 19:39 -

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

アップしたものは、A列を絞り込み、それをSheet2に転記するものですが、
絞り込んだ結果のB列を転記ということなら以下。

ただし、フィルター詳細設定にしろ、オートフィルターにしろ
【1行目】がタイトル行でなければいけません。
いやいや、それはいやだということなら、マクロ内でダミータイトル行を挿入し
あとで削除する方法も愛rますが、とりあえずは1行目をタイトル行にした上で
以下を試してみてください。

Sub Test2()
  ActiveSheet.AutoFilterMode = False
  Range("A1").AutoFilter Field:=1, Criteria1:=">=10.1", _
              Operator:=xlAnd, Criteria2:="<=10.5"
  With ActiveSheet.AutoFilter.Range
    If .SpecialCells(xlCellTypeVisible).Count > 0 Then
      .Columns("B").Copy Sheets("Sheet2").Range("A1")
    End If
  End With
  ActiveSheet.AutoFilterMode = False
End Sub

【77041】Re:条件を満たす値の検索
発言  kanabun  - 15/5/9(土) 21:06 -

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

> 下表の例で言いますと、A列の中から10.1以上10.5以下の値を検索
> →その右横セルの値B1〜B3をsheet2 A1から下方向へ順に貼り付けるイメージです。
> 下表の例ではsheet2 A1〜A6にB1,B2,B3,B5,B6,B7が張り付くことになります。

>
>A   B
>10.3  B1
>・   B2
>・   B3
>・   ・
>10.3  B5  
>・   B6
>・   B7
>・   ・

● ↑の図で気になるのは、
>10.3  B1
>・   B2
>・   B3

>・ 
>・ 
の部分です。ここには 10.3 と書いてあるんですか? 空白なんですか?
10.3 と書いてあれば、問題ないのですが。

●あと、βさんもコメントされていますが、一行目が列見出しになってないと
フィルタ(とくに、AdvancedFilter にとって)は 致命的です。
表なのだから、
 「実際には」一行目には 列見出しが書いてあるのですよね?!

書いてあれば、AdvancedFilterを使えば 表の1列目の数値を条件に抽出し、
表の「全列」でなく、必要な列だけ 抽出転記することは(AdvancedFilter は
それが目的の一般機能ですから)とても簡単なことです。

【77042】Re:条件を満たす値の検索
発言  kanabun  - 15/5/9(土) 21:19 -

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

>ご提案頂いたフィルタ案でトライしてみたのですが私にはむりでした。

ぼくの提示した Sub tryA() に 「B列だけ転記する」ための◆の一行を
付け加えれば、御所望のことはできます。
(フィルタは一般機能ですから、まず手動でやってフィルタ操作を理解
するのが 近道かもしれません)

Sub tryB()
  With Sheets("Sheet2")
    .UsedRange.ClearContents
    '条件をシートに書き出す
    .Range("Z1:AA1").Formula = "=Sheet1!$A$1"
    .Range("Z2").Formula = ">=10.01"
    .Range("AA2").Formula = "<=10.05"

    '◆ Sheet1の表よりB列だけ Sheet2のA列へ転記(見出しのコピー)
    .Range("A1").Value = Sheets("Sheet1").Range("B1").Value
    
    'フィルターAdvancedFilter 実行
    Sheets("Sheet1").Range("A1").CurrentRegion.AdvancedFilter _
      Action:=xlFilterCopy, _
      CriteriaRange:=.Range("Z1:AA2"), _
      CopyToRange:=.Range("A1")
    .Activate
  End With
End Sub

【77058】Re:条件を満たす値の検索
お礼  さくら  - 15/5/10(日) 23:58 -

引用なし
パスワード
   kanabunさん βさん

いろいろとアドバイス頂きありがとうございました。
おかげさまでうまくできました。
たいへん感謝しています。

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