エクセルで○○以外を抽出する方法
- エクセルで特定の条件を満たさない行を抽出する方法について教えてください。
- 質問文章にあるコードでは特定の値を含む行を抽出していますが、特定の値を含まない行を抽出する方法が知りたいです。
- リンゴ・みかん・かきの行以外を別のシートに自動反映する方法について教えてください。
- ベストアンサー
エクセル ○○以外を抽出
(シート1) A B 1 リンゴ 沖縄 2 みかん 北海道 3 かき 滋賀 4 さんま 山口 5 かき 滋賀 6 いわし 東京 7 リンゴ 沖縄 で、リンゴ・みかん・かきの行以外を別シートに自動反映する方法ありませんか? リンゴだけを抽出といった方法は分かったのですが、、、 ↓(ちなみにそれは) Private Sub CommandButton3_Click() With Sheets("Sheet1") .AutoFilterMode = False .Range("A1:M1").AutoFilter .Range("A1:M1").AutoFilter Field:=1, Criteria1:="リンゴ" .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False End With End Sub のようにやりました。 すんません、教えてください!!!
- naototanigucchi
- お礼率22% (4/18)
- オフィス系ソフト
- 回答数5
- ありがとう数0
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
変更前: .range("N2:N" & r).formula = "=(A2<>""リンゴ"")*(A2<>""みかん"")*(A2<>""かき"")" 変更後: .range("N2:N" & r).formula = "=1*AND(ISERROR(FIND({""リンゴ"",""みかん"",""かき""},A2)))"
その他の回答 (4)
- keithin
- ベストアンサー率66% (5278/7940)
たとえばオートフィルタを使って。 private sub CommandButton3_Click() dim r as long with worksheets("Sheet1") r = .cells.specialcells(xlcelltypelastcell).row .range("N:N").insert .range("N2:N" & r).formula = "=(A2<>""リンゴ"")*(A2<>""みかん"")*(A2<>""かき"")" .range("N:N").autofilter field:=1, criteria1:=1 .range("A1:M" & r).copy destination:=range("A1") .range("N:N").delete shift:=xlshifttoleft end with end sub
- mu2011
- ベストアンサー率38% (1910/4994)
一例です。 リンゴ以外は普通に比較演算子(<>)を付加して次のようになります。又、コピーも何となく整理してみました。 .Range("A1:M1").AutoFilter Field:=1, Criteria1:="<>リンゴ" .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Range("A1")
- mshr1962
- ベストアンサー率39% (7418/18948)
一例ですが Sheet1 1 名産 産地 ←行(項目)の追加 2 リンゴ 沖縄 3 みかん 北海道 4 かき 滋賀 5 さんま 山口 6 かき 滋賀 7 いわし 東京 8 リンゴ 沖縄 Sheet2(抽出条件を作成) 名産 名産 名産 ="<>リンゴ" ="<>みかん" ="<>かき" マクロ(フィルタオプションの設定) Private Sub CommandButton3_Click() WorkSheets("Sheet3").Select Sheets("Sheet1").Range("A1:B8").AdvancedFilter Action:=xlFilterCopy, _ CriteriaRange:=Sheets("Sheet2").Range("A1:C2"), _ CopyToRange:=Range("A1"), Unique:=False End Sub
- 某HN クロメート(Chromate)(@CoalTar)
- ベストアンサー率40% (705/1742)
タイトル行を追加してフィルタオプションの設定を使う準備をします 条件表(検索条件範囲)は 横に並ぶようにすればAND条件です。 Sheet2においてフィルタオプションの設定を行います 添付図参照 リスト範囲 Sheet1!$D$6:$E$6 検索条件範囲 Sheet1!$D$1:$F$2 抽出範囲 Sheet2!$A$1 「青リンゴ」などはバージョンによって抽出の仕方が違うかも(未検討) XL2002ではSheet2に移りました マクロはほかの方にお任せですm(_ _)m
関連するQ&A
- Excelマクロで他シートへの抽出:エラー
こちらの質問 http://okwave.jp/qa/q4760155.html を参考に、エクセルマクロを作りました。 Sheet1の10列目(J)に@が入っている行をすべて、 Sheet2に抽出表示します。コードは次になります。 Private Sub Worksheet_Activate() With Sheets("Sheet1") .AutoFilterMode = False .Range("A1:N1").AutoFilter .Range("A1:N1").AutoFilter Field:=10, Criteria1:="@" .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False End With End Sub このマクロを実行すると、確かにSheet2では抽出が行われるのですが、 同時にSheet1の内容も抽出された内容に変わってしまいます。 どこに問題があるのでしょうか。 よろしくお願いします。
- ベストアンサー
- Visual Basic
- エクセルのVBAの変更点がわからないので教えてください
下のようなプロシージャをエクセルに組み込んでいますが、次のようなことができるように変更したいので教えてください。 なお、プロシージャは正常に作動しています。 Private Sub Worksheet_Activate() With Sheets("シート名") .AutoFilterMode = False .Range("A1:d1").AutoFilter .Range("A1:d1").AutoFilter field:=1, Criteria1:="<>" .Range(.Range("d1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A1") .AutoFilterMode = False .Range("A1:d1").AutoFilter End With End Sub 修正してできるようにしたいこと 1、with sheets("シート名")のシート名にシートがアクティブになったとき、そのシート名が自動で入るようにしたい。 ※シートの数は6シーとあります。 2、セルd1のデータからその行のデータ全体がコピーされるので、必要なセルのデータのみがコピーできるようにしたい。
- ベストアンサー
- Visual Basic
- VBA で抽出したデータが一定数まできたら、異なるセルに折り返して抽出するように設定したい。
VBA で抽出したデータが一定数まできたら、異なるセルに折り返して抽出するように設定したいです。 ◇シート1◇ ※元データ A B C D 1| 氏名 役職 部署 年齢 ―――――――――――――――― 2| 山田 社員 開発 45 3| 田中 社員 人事 42 4| 鈴木 派遣 企画 30 5| 高橋 役員 人事 50 6| 坂野 社員 企画 33 7| 井上 派遣 企画 29 ◇シート2◇ 条件1.役職は"役員"で、部署が"人事"の人の 氏名、役職、部署をA3から順に抽出する 条件2.A列のデータが9行目まできたら D3に抽出されるようにする A B C D E F 1 氏名 役職 部署 氏名 役職 部署 2 高橋 役員 人事 3 4 5 6 7 8 9 ―――――――――――――――――――― ちなみにこのサイトで以下のコードを作成してもらいましたが これだとデータ元の全ての行が抽出されてしまいます。 Private Sub Worksheet_Activate() With Sheets("Sheet1") .AutoFilterMode = False .Range("A1:E1").AutoFilter .Range("A1:E1").AutoFilter Field:=2, Criteria1:="役員" .Range("A1:E1").AutoFilter Field:=3, Criteria1:="人事" .Range(.Range("A1"), .Range("A1").SpecialCells(xlLastCell)).SpecialCells(xlCellTypeVisible).Copy Range("A3") .AutoFilterMode = False End With End Sub 条件2のデータを折り返す条件が難しいようであれば 条件1の3列のみ抽出する方法で結構ですので教えてください。 よろしくお願いします。
- ベストアンサー
- オフィス系ソフト
- エクセルVBAで住所録を作成
住所録シートに次のようにコードを作っています。 Option Explicit Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Target.Address = "$B$1" Then 顧客名検索 ElseIf Target.Address = "$C$1" Then フリガナ検索 ElseIf Target.Address = "$D$1" Then 住所検索 ElseIf Target.Address = "$E$1" Then 郵便番号検索 ElseIf Target.Address = "$A$1" Then オートフィルタ解除 カナ順に設定 Else Exit Sub End If End Sub そして標準モジュールには Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub Sub フリガナ検索() ans = InputBox("顧客カナを入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=3, Criteria1:="=*" & ans & "*" '3つ目のフィルターに検索文字 End With End Sub Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub Sub 郵便番号検索() ans = InputBox("郵便番号を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=5, Criteria1:="=*" & ans & "*" '5つ目のフィルターに検索文字 End With End Sub Sub オートフィルタ解除() Application.CutCopyMode = False Selection.AutoFilter Range("A1").Select End Sub Sub カナ順に設定() Range("C1").Select ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Clear ActiveWorkbook.Worksheets("住所録").Sort.SortFields.Add Key:=Range("C1"), _ SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("住所録").Sort .SetRange Range("A2:IV65536") .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With Range("A2").Select Selection.AutoFilter End Sub と入れています。 VISTAで作ったのですが、このファイルを共有にして使おうとすると、XPのパソコンでは、A1セルをダブルクリックすると、コードが黄色になり、マクロが中断されます。 B1~G1は問題なくマクロが実行されるのに・・・。 もう一台のVISTAでは同じ共有状態で使っても問題ありません。 どうすればXPでも問題なく使えるのでしょう?
- ベストアンサー
- オフィス系ソフト
- 下記マクロの意味を教えてください。
Sub 済() With Worksheets("管理表") If .AutoFilterMode Then .AutoFilterMode = False End If Range("O7:P7").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:="=*済*", Operator:=xlAnd ActiveWindow.SmallScroll Down:=-12 Range("A1").Select End With End Sub よろしくお願い致します。
- 締切済み
- その他(プログラミング・開発)
- エクセルVBA:コピーの貼り付け先
VBA初心者です。よろしくお願いします。 あるデータベースをセルB2に入力されている値で絞込み、 シート2に貼り付けるとき、下記の(1)がおそらく正解だと思いますが、 ★(質問1) (2)でも同じ結果が得られました。コピー先の目的地を示す「Destination:=」の部分は省略して全く問題なしと考えてよろしいのでしょうか? ★(質問2) (3)で試してみても同じ結果が得られました。range("sheet2!A1") なんて書き方は、たまたま、試してみたらできちゃった(同じ結果が得られた)のですが、使い方として問題ありませんか? ------------------------------------------------------------- (1) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Destination:=Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (2) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Sheets("Sheet2").Range("A1") .AutoFilter End With End Sub -------------------------------------------------------------- (3) Sub test01() With Range("A1") .AutoFilter field:=2, Criteria1:=Range("B2") .CurrentRegion.Copy Range("Sheet2!A1") .AutoFilter End With End Sub
- ベストアンサー
- オフィス系ソフト
- ダブルクリックでエクセル起動
セルをダブルクリックしてマクロを起動させたいのですが。 B1セルをダブルクリックすると、 Sub 顧客名検索() ans = InputBox("顧客名を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:G1").AutoFilter 'オートフィルタモードをセット .Range("A1:G1").AutoFilter Field:=2, Criteria1:="=*" & ans & "*" '2つ目のフィルターに検索文字 End With End Sub を実行させるようにしたいのです。 その方法で、C1、D1、E1、・・・も同様にしたいと思っています。 どなたか教えてください。
- ベストアンサー
- オフィス系ソフト
- エクセルVBA住所録で半角全角問わず検索する方法
エクセルVBAで住所録を作っています。 住所録で下記のようなコードを書いて、キーワード検索をさせるようにしているのですが、『*丁目』や番地に半角英数を使っています。 全角で数字を入力しても検索されるようなコードの書き方はあるのでしょうか? 宜しくお願いします。 Sub 住所検索() ans = InputBox("住所を入力してください") With ActiveSheet If .AutoFilterMode Then 'オートフィルタモードがオンなら .AutoFilterMode = False 'リセットする End If .Range("A1:IV1").AutoFilter 'オートフィルタモードをセット .Range("A1:IV1").AutoFilter Field:=4, Criteria1:="=*" & ans & "*" '4つ目のフィルターに検索文字 End With End Sub
- ベストアンサー
- オフィス系ソフト
- excelで複数条件で抽出する
excel VBAで質問です。(初心者レベルです) A列からZ列までデータがあり、オートフィルタでE列で条件に当てはまるものと、E列では条件外だが、Y列では条件に当てはまるものを別シートに抽出したいと思っています。 Sub Macro1() With Worksheets("Sheet1") .Range("A1").AutoFilter _ Field:=5, Criteria1:="*条件*" .Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy _ Worksheets("Sheet2").Range("A1") End With End Sub Fieldを変えて、E列、Y列それぞれはできるのですが、データが重複してしまいます。 重複分を削除するため、セル入力で連番を降って、重複するものを削除しようとしましたがうまくいかず。 なにかいい方法はないでしょうか。
- ベストアンサー
- オフィス系ソフト
- オートフィルタ抽出データをコピーするマクロについて
マクロについて勉強中の者です。 "Sheet1"にあるデータをオートフィルタで抽出し、 "Sheet2"に抽出データのみをコピーをしたいと思っています。 Range("A10:G59").Select Selection.ClearContents With Worksheets("Sheet1").Range("A1") .AutoFilter .AutoFilter Field:=1, Criteria1:="○" .CurrentRegion.SpecialCells(xlCellTypeVisible).Copy Worksheets("Sheet2").Range("A9") End With End Sub としてみたのですが、 これを実行すると、オートフィルタが1行目(A1)ではなく、 2行目で設定されてしまい、抽出データがずれてしまいます。 A B C 1 品 名 仕入先 発注数 ←タイトル行に設定したい 2 りんご ヤマト 10 ← この行に▼が設定される 色々調べた結果のマクロなので、どこが悪いのか見当がつきません。 解りやすく教えていただける方がおられましたら、よろしくお願い致します m(__)m
- ベストアンサー
- オフィス系ソフト
補足
すいません リンゴジュースやみかん、なども同時にはずしたいのですがどうすればいいですか? *リンゴ*、みたいにするとうまく稼働しません。 お願いします!!