• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:2003でオートフィルタ(3条件以上)マクロ)

EXCEL2003で困っている!オートフィルタ(3条件以上)マクロの組み方

このQ&Aのポイント
  • EXCEL2007ではオートフィルタに3つ以上の条件を設定できますが、EXCEL2003では3条件までしかできません。EXCEL2003でオートフィルタに3条件以上を設定する方法について教えてください。
  • 現在EXCEL2007で作成したマクロをEXCEL2003で実行すると、マクロが止まってしまいます。どのように修正すればEXCEL2003でも正常に動作するようになるでしょうか。
  • 私はEXCEL2007でオートフィルタのマクロを組んでおり、EXCEL2003で使用する必要があります。EXCEL2003では3条件までしか設定できないため、3条件以上のオートフィルタを実現する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 コードの間違いがあるようですね。2007でも、2003でも、そのコードは通りません。説明なしでは意味が不明な部分が何点もあります。 こういう場合、だいたい、逆に質問して教えてもらっても、余計に分からなくなるので、こちらの想像で詰めるしかないようです。 たぶん、UserForm から行うように思えるのです。そうしないと、親オブジェクトのない部分で不整合があるから、UserForm が立ち上がっていないと無理があります。ただ、それぐらいは説明していただかないと、突然出てきたオブジェクトで混乱してしまいます。 それと、仕入先名はUserFormのListBox かComboBox 辺りでしょうか? 説明がないと分かりにくいです。 With 仕入先名     .ColumnCount = 2     .ColumnWidths = "100;20"     .RowSource = myDRange End With 一度、こちらの書いたコードを見てみてください。参考になるべき部分があれば、写してください。ご質問者さんの意図するものと同じかは分かりませんが、読み取れるコードから直してみました。 '------------------------------------------- Sub Kensaku_Click()   Dim S_Name As String   Dim a_arr As Variant, k_arr As Variant, s_arr As Variant, t_arr As Variant   Dim n_arr As Variant, h_arr As Variant, m_arr As Variant, y_arr As Variant   Dim r_arr As Variant, w_arr As Variant   Dim 仕入先名検索 As Variant   a_arr = Array("ア", "イ", "ウ", "エ", "オ")   k_arr = Array("カ", "キ", "ク", "ケ", "コ")   s_arr = Array("サ", "シ", "ス", "セ", "ソ")   t_arr = Array("タ", "チ", "ツ", "テ", "ト")   n_arr = Array("ナ", "ニ", "ヌ", "ネ", "ノ")   h_arr = Array("ハ", "ヒ", "フ", "ヘ", "ホ")   m_arr = Array("マ", "ミ", "ム", "メ", "モ")   y_arr = Array("ヤ", "ユ", "ヨ")   r_arr = Array("ラ", "リ", "ル", "レ", "ロ")   w_arr = Array("ワ", "ヲ", "ン")    '仕入先名検索 ''TextBox か?   'シートCOPYのデータを消去   ThisWorkbook.Worksheets("Copy").Visible = True   Worksheets("copy").Cells.Clear   '仕入先名検索の値をコピー   With Worksheets("仕入先マスタ")     .Activate     .AutoFilterMode = False   End With   Select Case 仕入先名検索.Value     Case "ア": AutoFilterPro (a_arr)     Case "カ": AutoFilterPro (k_arr)     Case "サ": AutoFilterPro (s_arr)     Case "タ": AutoFilterPro (t_arr)     Case "ナ": AutoFilterPro (n_arr)     Case "ハ": AutoFilterPro (h_arr)     Case "マ": AutoFilterPro (m_arr)     Case "ヤ": AutoFilterPro (y_arr)     Case "ラ": AutoFilterPro (r_arr)     Case "ワ": AutoFilterPro (w_arr)     Case Else : Exit Sub   End Select   Call ArrangeListBox End Sub Sub AutoFilterPro(arg As Variant)   Dim c As Variant   Dim k As Variant   Dim v As Long   Application.ScreenUpdating = False   With Worksheets("仕入先マスタ")     v = Val(Application.Version)     'バージョンの違いは、ディレクティブ分岐にする     #If v <= 11 Then     For Each c In .Range("I1", .Range("I65536").End(xlUp))       k = Application.Match(c.Value, arg, 0)       c.Offset(, 1).Value = IsNumeric(k) * -1     Next     .Range("A1", .Range("J65536").End(xlUp)).AutoFilter _     Field:=10, Criteria1:=1     #Else     .Range(.Cells(1, 1), Cells(Rows.Count, 9).End(xlUp)).AutoFilter _     Field:=9, Criteria1:=arg, Operator:=xlFilterValues     #End If     With .AutoFilter.Range       .Resize(, .Columns.Count - 1).Copy Worksheets("Copy").Range("A1")     End With     .AutoFilterMode = False     #If v <= 11 Then     .Range("J1", Range("J65536").End(xlUp)).ClearContents     #End If   End With   Application.ScreenUpdating = True End Sub Sub ArrangeListBox() Dim myDCount As Long Dim sRange As String '変数名を変えた   myDCount = Worksheets("copy").Range("B1").CurrentRegion.Rows.Count 'データの最終行を取得   sRange = "copy!B2:C" & myDCount      With 仕入先名 'UserForm のListBox ?     .ColumnCount = 2     .ColumnWidths = "100;20"     .RowSource = sRange   End With    ThisWorkbook.Sheets("copy").Visible = False   Worksheets("商品マスタ").Activate End Sub

mimomosan
質問者

補足

すみません!! まったく、おっしゃるとおりです。 せっかく組んだコードが2003で動かない!とパニックでした(汗) ユーザーフォームからcomboboxで選び検索をかけ comboboxに吐き出すといった具合です。 教えて頂いたコード、参考にがんばってみます。 なるほどなるほど。わかり易く書いていただいて有難うございます。 (質問はわかりづらいのに・・・)

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • オートフィルタ抽出データをコピーするマクロについて

    マクロについて勉強中の者です。 "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

  • オートフィルタで未入力(空白)を無視した抽出法

    いつもお世話になっております。 現在第一条件から第三条件までの入力フォームを作成し、その条件に基づいたオートフィルタを作成中なのですが、 第二条件以下に未入力の場合のオートフィルタができなくて困っています。 これら未入力(空白)でもきちんと抽出できるオートフィルタを作るにはどうしたら良いですか? 以下に私が作成したものを転記いたしますので、どなたかご教示くださいますよう、お願いいたします。 With Worksheets("業種別検索") myCriteria1 = .Range("a2").Value myCriteria2 = .Range("b2").Value      myCriteria3 = .Range("c2").Value End With With Worksheets("元データ") If Worksheets("元データ").AutoFilterMode = False Then Range("A6:z6").Select Selection.AutoFilter Else Sheets("元データ").Select Selection.AutoFilter Range("A6:z6").Select Selection.AutoFilter End If .Range("A1").CurrentRegion.AutoFilter 17, myCriteria1, xlAnd .Range("A1").CurrentRegion.AutoFilter 18, myCriteria2, xlAnd .Range("A1").CurrentRegion.AutoFilter 19, myCriteria3, xlAnd End With

  • VBA 変数について

    VBA初心者でございます。 VBAでgrpという変数を設定し、それをキーにしてオートフィルタをしたいです。 以下のコードではエラーがでてしまうのは、なぜでしょうか? どうぞ宜しくお願いいたします。 Sub 絞り込み2() Dim grp Set grp = Worksheets("リスト").Cells(3, 2) Worksheets("マスタ0701").AutoFilterMode = False With Worksheets("マスタ0701").Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)) .AutoFilter Field:=13, Criteria1:=grp '.CurrentRegion.Select Range(Cells(3, "B"), Cells(Rows.Count, "CK").End(xlUp)).SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") '.AutoFilter End With End Sub

  • Excelマクロ オートフィルター条件設定で不等号を使いたい

    Excelマクロ オートフィルター条件設定で不等号を使いたい 請求シートより抽出条件シートに条件を設定し、抽出シートにコピーするマクロ を作成しています。 抽出条件に比較演算子の不等号<>を使った場合、条件が無視されてしまいます。 どのようにしたら良いでしょうか? 請求シートのA列には会社番号が数字4桁で入力されています。 抽出条件シートA5セルに下記の条件を設定した場合、 1と2の場合は上手くフィルターが機能しますが、3の不等号を 使った場合は機能しません。どなたか宜しくお願いします。 1:1000 2:>1000 3:<>1000 Sub テスト() Dim LastRow As Long, LastColumn As Long Dim myData As Range Dim myCriteria As Range With Worksheets("請求") LastColumn = .Cells(5, Application.Columns.Count).End(xlToLeft).Column LastRow = .Cells(Application.Rows.Count, "A").End(xlUp).Row Set myData = .Range("A5", .Cells(LastRow, LastColumn)) End With Set myCriteria = Worksheets("抽出条件").Range("A5").CurrentRegion Worksheets("抽出").Range("A6:R1000").ClearContents myData.AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=myCriteria, _ CopyToRange:=Worksheets("抽出").Range("A5:R5"), Unique:=False Set myData = Nothing Set myCriteria = Nothing End Sub

  • オートフィルター後の見出し以外をコピー

    お世話になっております。Excel2003を使ってます。 オートフィルター後の、見出し以外をコピーしようと考えています。 現在は With ThisWorkbook.Worksheets("テスト") .Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row).SpecialCells(xlCellTypeVisible).Select '可視セルの選択 Selection.Copy '可視セルコピー ThisWorkbook.Worksheets("フィルタ用").Range("A" & m).PasteSpecial 'A列に貼り付け! Excel.Application.CutCopyMode = False 'クリップボードの内容クリア End with この内容で上手くいっていましたが、 見出し+1行しかない場合、 全範囲選択になってしまい、上手くいかない状況です。 どうやったら、見出し以外のB列をコピーできるのでしょうか? Offset とか、 Resize を使えばいけるのでしょうか…? 見出し以外の行、 B列、C列、D列 F列 を 「TEST」シートにコピーしたいです。 With ThisWorkbook.Worksheets("テスト").Range("A1").CurrentRegion .Offset(1, 1).Resize(.Rows.Count - 1, 3).Copy _ Destination:=Thisworkbook.worksheets("TEST").Range("A" & m) .Offset(1, 4).Resize(.Rows.Count - 1, 1).Copy _ Destination:=Thisworkbook.worksheets("TEST").Range("D" & m) End With 考えたのですが、良く分からなくなってしまいました。 回答をお願い致します!

  • VBA のオートフィルタについて

    ExcelVBA初心者でございます。 2点質問がございます。 (1)エクセルVBAのオートフィルタの機能を使い、"マスタ0701"シートの13行目が”ABC”の行を、"検索結果"というシートにコピーしたいです。 以下のマクロを実行しますと、まず"マスタ0701"のB1のセル(13行目はブランク)がコピーされ、その下に13行目が”ABC”に該当する行がコピーされます。 なぜ、B1セルまでコピーされるのかご教示頂けますと幸いです。 (2)また検索結果だけでなく、オートフィルタのタイトル行もコピーするようにするにはどうしたら良いでしょうか? よろしくお願いいたします。 Sub 絞り込み() With Worksheets("マスタ0701").Range("A1") .AutoFilter Field:=13, Criteria1:="ABC" .CurrentRegion.SpecialCells(xlVisible).Copy Worksheets("検索結果").Range("A1") .AutoFilter End With End Sub

  • Excel2003 Range("XXX").Copyについて

    下記のようにコピペをしたいのですが ActiveSheet.Paste Sheets("sheets1").Range("V3").Copy Worksheets("sheets2").Activate Sheets("sheets2").Range "A1").Select 上の方法だと良く行くのですが下記だとSheets("sheets1").Cells(9,16).Copyエラーになってしまします。どうしてもCells(9,16) を使いたいのですが方法を教えてください。 ActiveSheet.Paste Sheets("sheets1").cells(9,16).Copy Worksheets("sheets2").Activate Sheets("sheets2").Range "A1").Select よろしくお願いします。

  • 簡単マクロ編集

    Sheets("Sheet1").Select  ←Range("A3:H8") Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet4").Select Application.CutCopyMode = False ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True 下方にこの操作を繰り返ししたいのですが Dim i As Long Worksheets("Sheet1").Select For i = 3 To 100 Step 6 If Cells(i, "A") = "" Then Exit Sub End If Cells(i, "A").Resize(6, 8).Copy Destination:=Worksheets("Sheet2").Range("A3:H8") Next i 貼付けは値で貼り付けたいと思います。 どう組み合わせればよいですか?

  • EXCEL2000で作成したマクロが2007で動作しない

    EXCEL2000で作成したマクロがEXCEL2007上で動作しません。 2つのシートに入ったデータを,「抽出」シートにコピー後, 抽出条件に合わせて抽出するというものなのですが, 「Sheet1」で最終行を取得するところで,正しい範囲を 選択しません。どこが間違えているのか,ご指南頂けないでしょうか? お願いいたします。 下には,正しい結果が出ない所までを貼りつけました。 Sub フィルタオプション() Dim LastRow As Long, LastColumn As Long Dim myData As Range Dim myCriteria As Range Sheets("Sheet1").Select Rows("1:1").Select Selection.Copy Sheets("抽出").Select Rows("3:3").Select ActiveSheet.Paste If Worksheets("Sheet1").FilterMode = True Then   Worksheets("Sheet1").ShowAllData End If With Worksheets("Sheet1") LastRow = .Cells(Application.Rows.Count, "A").End(xlUp).Row End With Sheets("Sheet1").Select Range(Rows(2), Rows(LastRow)).Select Selection.Copy Range("A1").Select Sheets("抽出").Select Range(Rows(4), Rows(4)).Select Selection.Insert Shift:=xlDown

  • Excel VBA 指定シートの取込

    こんにちは。 ExcelのVBAを使用して、異なるBookのシートを取込みたいのですが、 シートが無かった場合の処理方法がわかりません。 現在のコードは下記の様になっております。 With Workbooks.Open"BOOK1.xls" .Worksheets("Sh1").Cells.Copy ThisWorkbook.Sheets("Sheet1").Range("A1") .Worksheets("Sh2").Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1") .Worksheets("Sh3").Cells.Copy ThisWorkbook.Sheets("Sheet3").Range("A1") .Close End With Book1に指定したシートが無い場合、何もしないようにしたいのですが、 どの様に書き換えれば宜しいでしょうか? よろしくお願いします。

専門家に質問してみよう