[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『条件を変えながらオートフィルタで抽出し、指定セルに転記する』(みちる)
A地区 B地区 品種 種類 収穫量 収穫量 紅玉 リンゴ A C 王林 リンゴ B A つがる リンゴ A A ふじ リンゴ C C 北斗 リンゴ C A ・・・・ 巨峰 ブドウ A A ピオーネブドウ D B 幸水 ナシ A C あきづきナシ C D
上記のようなデータベースからオートフィルタを使い、地区ごとの収穫量のランクに応じた各種類の品種名を抽出し、別シートのセルに転記するマクロを考えていますが、上手くいきません。
ネットやこちらの掲示板で質問しながら自分で組んでみましたが、以下のようになりました。※途中段階ですが、これをアレンジして完成させたいです。
良い方法があればご教授願いたいと存じます。
(やりたいこと)
例:A地区の収穫量Aのうち、リンゴを絞り込み、品種名をSheet2のB4セルに改行とカンマを加えて転記する。B5に移動し、リンゴの収穫量Bを転記する。
Dまで転記が済んだら、C4に移動し、収穫量Aのうちのブドウと・・・なるようにしたいと考えています。
(悩んでいること)
転記するセルの移動の方法と複数条件での絞り込みが終わったあとに種類の条件を変えてもう一度同じ処理をループさせる方法が分からない状態です。
Option Explicit
Option Base 1
Sub Test2()
Dim rank As Variant
Dim bunrui As Variant
Dim i As Long
Dim MaxRow As Long
Dim j As Long
Dim buf As Range
rank = Array("A", "B", "C", "D")
bunrui = Array("リンゴ", "ブドウ", "ナシ")
MaxRow = Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To 5
Do
For i = 1 To 4
With Range(Cells(3, 2), Cells(MaxRow, 5))
.AutoFilter Field:=4, Criteria1:=rank(i) .AutoFilter Field:=2, Criteria1:=bunrui(j) End With
With Worksheets("Sheet2").Range("B" & i + 3)
For Each buf In Worksheets("Sheet1").Range("B4", Worksheets("Sheet1").Cells(Rows.Count, "B").End(xlUp)).SpecialCells(xlCellTypeVisible).Areas If IsArray(buf.Value) Then .Value = .Value & IIf(.Value = "", "", vbLf) & Join(WorksheetFunction.Transpose(buf.Value), "," & vbLf) Else .Value = .Value & IIf(.Value = "", "", vbLf) & buf.Value & "," End If Next End With
Next i
i = i + 1
Loop
Next j
End Sub
< 使用 Excel:Excel2019、使用 OS:Windows10 >
ちょい乱暴(いやかなり^^;)ですけど、考え方のひとつとしての例示なのでご勘弁。 たとえば
Function 条件2つで抽出(抽出範囲 As Range, デリミタ As String, _ 検索範囲1 As Range, 検索条件1 As String, _ 検索範囲2 As Range, 検索条件2 As String) As String Dim i As Long, ary() As Variant, c As Long ReDim ary(1 To 抽出範囲.Cells.Count) For i = 1 To 抽出範囲.Cells.Count If 検索範囲1.Cells(i).Value = 検索条件1 And 検索範囲2.Cells(i).Value = 検索条件2 Then c = c + 1 ary(c) = 抽出範囲.Cells(i).Value End If Next If c = 0 Then Exit Function ReDim Preserve ary(1 To c) 条件2つで抽出 = Join(ary, デリミタ) End Function
などという関数を作っちゃえば、 極端な話、ワークシート上でだって使えちゃいます。
__|___A____|___B____|___C____|___D____|___E____|___F____|___G____|___H____|_____I_____|___J____|___K____ 1| | | | | | | | | | | 2| | |A地区 |B地区 | | | | | | | 3|品種 |種類 |収穫量 |収穫量 | | | |A地区 |リンゴ |ブドウ |ナシ 4|紅玉 |リンゴ |A |C | | | |A |紅玉|つがる|巨峰 |幸水 5|王林 |リンゴ |B |A | | | |B |王林 | | 6|つがる |リンゴ |A |A | | | |C |ふじ|北斗 | |あきづき 7|ふじ |リンゴ |C |C | | | |D | |ピオーネ| 8|北斗 |リンゴ |C |A | | | | | | | 9|巨峰 |ブドウ |A |A | | | | | | | 10|ピオーネ|ブドウ |D |B | | | | | | | 11|幸水 |ナシ |A |C | | | | | | | 12|あきづき|ナシ |C |D | | | | | | |
I4 =条件2つで抽出($A$4:$A$12,"|",$B$4:$B$12,I$3,$C$4:$C$12,$H4)
そんな風に、 「この条件で抽出する」って作業と 「条件を巡回する」という部分を切り離して組み立ててみては如何でしょう?
(白茶) 2021/06/15(火) 20:42
=条件2つで抽出($A$4:$A$12,","&CHAR(10),$B$4:$B$12,I$3,$C$4:$C$12,$H4)
(みちる) 2021/06/15(火) 23:07
お? 結果にデリミタを付け加えるだけでしたら...
条件2つで抽出 = Join(ary, デリミタ) & デリミタ ~~~~~~~~~~~追記 でイケるかと思いますが...?
(白茶) 2021/06/16(水) 10:20
私の知識不足で()の中に記述していましたのでエラーが起こってしまいました。(^^;
白茶さんの言う通りにしましたらちゃんと成功しました。
最後までお付き合いくださいましてどうもありがとうございます!
(みちる) 2021/06/16(水) 10:38
本番用のデータベースを参照したところ、空白が表示されてしまいました。
(みちる) 2021/06/16(水) 11:17
ご迷惑をかけて申し訳ありません。
改めましてどうもありごとうございました。(^^;
(みちる) 2021/06/16(水) 11:28
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.