• ベストアンサー
※ 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