エクセルのマクロで日本語のオートフィルタ検索を作成する方法

このQ&Aのポイント
  • エクセルのマクロを使って日本語でオートフィルタの絞り込み検索をする方法を教えてください。
  • 英語ではうまく動作しているマクロですが、日本語ではうまくいかないようです。
  • 提供されたコードを確認しましたが、問題が見つかりませんでした。どのようなエラーメッセージが表示されますか?
回答を見る
  • ベストアンサー

エクセルのマクロのことについてです。

エクセルのマクロのことについてです。 セル内に入力した日本語でオートフィルタの絞り込み検索をかけるマクロを作りたいのですが、英語ではうまく行っているのですが、日本語ではなぜかうまくいきません。 下記のようにコードを書いているのですが、 どこが間違っているのかご教授いただけませんでしょうか? Dim nihongo As String nihongo = Worksheets("絞り込み").Cells(3.4).Value If nihongo = Empty Then nihongo = "*" End If ActiveSheet.Range("$A$7:$G$100").AutoFilter Field:=4, Criteria1:="=*" & nihongo & "*", Operator:=xlAnd

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.4

ご提示のコードが元コードをそのままコピー&ペーストしたものならタイプミスです。 nihongoに格納したいのはD3セルの値ではないのですか? >.Cells(3.4) これでは.Cells(3)、つまりC1セルの値が格納されています。 .Cells(3, 4)...です。 >If nihongo = Empty Then でも判定はしてくれます。(ただし長さ0文字列""もTrue判定します) 空白セルだったら If IsEmpty(nihongo) Then のほうがしっくりきますけどね。

abillionaire
質問者

お礼

こんな凡ミスしているとは全く気付きませんでした・・・。 本当にありがとうございました!感謝の気持ちでいっぱいです。 無事思い通りの挙動するようになりました!

その他の回答 (3)

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.3

追記。 Option Explicitは「変数の自動定義を不可能にする」宣言で、コードの先頭に一回書いてあればいいです。 これの効果は、Dimで宣言した変数でないものが出てくるとエラーにしてくれるというもので、「したほうがよい」じゃなくて「絶対にしなさい」という類のものです。 #なのにデフォルトでは付かないんですよねー 関数・サブルーチンの定義位置は、そのシートでしか使わないものなら標準モジュールに置く事もないでしょうね。

abillionaire
質問者

お礼

分かりやすい説明ありがとうございます。 次からは Option Explicitを使うようにします。 ありがとうございました。

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.2

IsEmptyをCellsにかけて if IsEmpty(Worksheets("絞り込み").Cells(3.4)) = True then nihongo = "*" else nihongo = Worksheets("絞り込み").Cells(3.4).Value end if とするか、あるいは文字列長で判断して if Len(nihongo) = 0 then nihongo = "*" end if とするか。 たぶんどっちでも行けると思いますがお好きな方で。

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

> If nihongo = Empty Then If IsNull(nihongo) Then か If IsEmpty(nihongo) Then にしてみてください。 あと、Option Explicit宣言してますかね?

abillionaire
質問者

お礼

分かりづらい質問で回答してくれるか不安だったのですが、 真っ先に回答してくださり、大変ありがとうございました。 Option Explicitも次回から使うようにします。

abillionaire
質問者

補足

回答いただき、大変ありがとうございます。 If IsNull(nihongo) Thenと If IsEmpty(nihongo) Thenの いずれも試してみましたが、うまくいきませんでした。 Option Explicit宣言はしていませんが、した方がよいのでしょうか? 少し調べてみましたが、使い方がよく分らず、 sub関数の直前にOption Explicit を置いてみましたが、 結果変わらずでした。 本当に初心者なので、今の状況を上手く説明できずに申し訳ございません・・・。 ちなみに関数は標準モジュールフォルダに入れて使ってもいんでしょうか? 該当のシートで記入した方がいいのでしょうか?

関連するQ&A

  • Excelでマクロを繰り返したい。

    Excelでマクロを記録したら以下のようになりました このマクロを以下の条件で繰り返したいのですが。 Sub Macro1() '------------- '----------------------- ' Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=5*", Operator:=xlAnd, _ Criteria2:="<>5@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=6*", Operator:=xlAnd, _ Criteria2:="<>6@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B3").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Selection.AutoFilter Field:=4, Criteria1:="=7*", Operator:=xlAnd, _ Criteria2:="<>7@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("A103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Sheets("Sheet1").Select Range("A1").Select Selection.AutoFilter Field:=4, Criteria1:="=8*", Operator:=xlAnd, _ Criteria2:="<>8@*" Range("A3:A302").Select Selection.Copy Sheets("Sheet2").Select Range("B103").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub 条件= Field:は4~35位まで変動します 一連の動作をコピーして手作業で数字を変えてみたのですが プロージャが大きすぎてエラーになってしまいます。 何か良い方法は無いでしょうか?。

  • エクセルVBA データ比較抽出について・・・

    いつも皆様には大変お世話になってます Worksheets("Sheet1").Select q = ListBox1 z = TextBox1 x = TextBox2 With Range("A1") .AutoFilter .AutoFilter Field:=2, Criteria1:=q .AutoFilter Field:=3, Criteria1:=">=150", _ Operator:=xlAnd, Field:=3, Criteria2:="<=160" というようなマクロ組んだのですが・・・実は、Criteria1:=">=150のところの150をTexitbox1をその下の160のところをTextbox2を入れたいのですが・・・ 色々やったのですが、うまく動かないのです;; 分かる方いらっしゃいましたら宜しくお願い致します。

  • オートフィルタ マクロについて

    質問です。 オートフィルタで複数列を1つの条件で抽出したいのですが、教えてください。 たとえばA列が納品書No.・B列が受注No.・C列が商品No.なのですがすべて数字の為、出来ればInBox一回でA-C列を検索してほしいです。 指定納品書NO 受注NO 元品番 21812 3252608 77 21880 3307989 32B 22053 3389769 95414A 22050 3389770 67312H 22052 3389771 67312H 22050 3389773 67118H 以下の様なマクロを作ってみましたが、 A-C列全てに一致しないと抽出しないようです。 どなたかご教授いただけないでしょうか? マクロ '条件1 の設定 Dim 検索NO As Variant '抽出キーの入力指示 検索NO = InputBox("検索NOを入力てください。") 'キャンセルした場合の処理 If 検索NO = Empty Then Exit Sub End If 'オートフィルタがかかっていなかったらかける 'かかっていたら念の為一度解除し再設定 If ActiveSheet.AutoFilterMode = False Then Range("A2:O2").Select Selection.AutoFilter Else Selection.AutoFilter Range("A2:O2").Select Selection.AutoFilter End If Selection.AutoFilter Field:=1, _ Criteria1:=">=" & 検索NO, Operator:=xlAnd, Criteria2:=" " & 検索NO Selection.AutoFilter Field:=2, _ Criteria1:=">=" & 検索NO2, Operator:=xlAnd, Criteria2:=" " & 検索NO2 Selection.AutoFilter Field:=3, _ Criteria1:=">=" & 検索NO3, Operator:=xlAnd, Criteria2:=" " & 検索NO3 AutoFilterMode = False Application.ScreenUpdating = True End Sub よろしくお願いいたします。

  • Excelマクロでオートフィルターからコピペ

    ファイルのB列の値から0以外の値をオートフィルターで抽出し、値を、別のファイルのD列の一番下に貼りつけるマクロを作っていますがうまくいきません。 今作ったのは Sub macro1() If ActiveSheet.AutoFilterMode = False Then Range("A:G").Select Selection.AutoFilter Else Selection.AutoFilter Range("A:G").Select Selection.AutoFilter End If Selection.AutoFilter Field:=2, Criteria1:="<>0", Operator:=xlAnd Range("A1").Select Range("B2", Range("B2").End(xlDown)).Select Selection.Copy Windows("貼りつけるファイル名").Activate Cells(Rows.Count, 4).End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub です。 フィルターで0以外の値を抽出しコピーまではできていますが、貼りつけるところでエラーがでます。 Microsoft Visual Basic 400 というエラーです。 何が悪いのか分かりません・・・。 分かる方いましたらご教授ください。よろしくお願いします。

  • 下記マクロの意味を教えてください。

    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 よろしくお願い致します。

  • Excel VBAについて教えて下さい。

    00というブックとテストというブックがあります。 00のデータを並び替え、一部変更し、テストのシート3へ貼付けを行いたいのですが、 うまく作動してくれません。以下に現在のコードを記載しましたので、ご指摘いただければと思います。 やりたいことは 1.ブック”00”のシート00にて条件がF列が0、E列がHでソートをかけます。 2.E列のHをすべて数字の1に変更します。 3.今度は別の条件、F列が1、E列がH、D列が1でソートをかけます。 4.E列のHをすべて消去します。 5.すべて表示させA列からE列までのデータを、テストのシート3へ貼付けをします。 コピー&ペーストは上手くいくのですが、肝心のソート+文字の変更+消去が出来ていません。 ネットを見ながら書いたコードで、VBAを勉強中です。 よろしくお願いします。 あと、この作業の前にブック00のB列にて昇順のソートをかけるというコードを追加したいのですが、 それについても教えていただけるとうれしいです。 よろしくお願い致します。 Private Sub Worksheet_Activate() Dim wb1 As Workbook Dim wb2 As Workbook Dim i As Long Application.ScreenUpdating = False Set wb1 = ActiveWorkbook Set wb2 = Workbooks.Open("C:\Documents and Settings\デスクトップ\メモ\00.xls", ReadOnly:=True) With wb2.Worksheets("00").Range("A1").CurrentRegion .AutoFilter .AutoFilter Field:=6, Criteria1:="=" & "0", Operator:=xlAnd .AutoFilter Field:=5, Criteria1:="=" & "H", Operator:=xlAnd .AutoFilter x = .Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To x If Cells(i, 5) = "H" Then Cells(i, 5) = Replace(Cells(i, 5), "H", "1") End If Next i With wb2.Worksheets("00").Range("A1").CurrentRegion .AutoFilter .AutoFilter Field:=6, Criteria1:="=" & "0", Operator:=xlAnd .AutoFilter Field:=5, Criteria1:="=" & "H", Operator:=xlAnd .AutoFilter Field:=4, Criteria1:="=" & "1", Operator:=xlAnd .AutoFilter x = .Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To x If Cells(i, 5) = "H" Then Cells(i, 5) = Replace(Cells(i, 5), "H", " ") End If Next i wb2.Sheets("00").Range("B1", .Cells(Rows.Count, 5).End(xlUp)).Copy wb1.Sheets("Sheet3").Range("K3").PasteSpecial wb2.Close False Range("A1").Select Application.ScreenUpdating = True End With End With End Sub

  • Excel VBA 任意の日付から1週間分抽出

    VBA素人です。 シート1  A   B   C   D   E 1任意の日付 2日付 曜日 内容 氏名 備考 3 4 5 6 このようなデータ入力です マクロ記録でオートフィルタを用い日付抽出をするマクロを吸出し、ネットで知った今日から前後4日間のマクロを入力し,改変し応用しようと考えたのですが、やはり素人には壁が高くうまいこと行きません。 皆さんに教えていただきたいのは以下の式 Range("A2:E2").Select Selection.AutoFilter ActiveSheet.Range("$A$2:$E$5").AutoFilter Field:=1, Operator:= _ xlFilterValues, Criteria1:=">=" & Date - 4, Operator:=xlAnd, Criteria2:="<=" & Date + 4 の↓この部分 xlFilterValues, Criteria1:=">=" & Date - 4, Operator:=xlAnd, Criteria2:="<=" & Date + 4 の & Date - 4 を、どう変更すれば A1に入力した任意の日付に出来るのか?です。 きっと基本的な事だとは思うのですが、教えてくださいお願いします。

  • エクセルのオートシェイプでセルに入力した日付以上を検索をするマクロをつくりたい

    エクセル2003を使用しています。 Bの列に2008/1/1,2008/2/2,2008/3/3というように日付が入力されているのですが、A1に2008/1/10などで入力された日付以上を検索するオートシェイプのマクロがうまく動きません。 Selection.AutoFilter Field:=1, Criteria1:=>Cells(1,1), Operator:=xlAnd と、いうように記述してもエラーとなります。 どのように記述すればよろしいでしょうか。

  • マクロについて

    マクロ初心者です。 下記の操作をマクロで行いたいのですがうまくいかないのでどうすればうまくマクロが作動するのか教えて頂ければと思います。4の操作までは正しく作動しましたが5以降に困っています。。。 どなたかお願いしますmm (1) A列にフィルターをかけて[??????}を含むものを選択 (2). 1に.該当するもB列のDataを値のみ数値と値のClear (3) 2の後に再びA列で[??????]を含まないものを選択 (4)  3に該当するA列のDataを数値と値のClear (5)  4の操作で空白となったセルに=上のセルという計算式の指示を出す (6) すべて値貼り付けをし、空白のセルを削除する ※Dataの行数は毎回作業時に変更があります。 ※Dataは数値だけではなく文字列も含んでいます 失敗したマクロ--------------------------------------------- Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=*[??????]*", Operator:=xlAnd Columns("B:B").Select Selection.ClearContents Selection.AutoFilter Field:=1, Criteria1:="<>*[??????]*", Operator:=xlAnd Columns("A:A").Select Selection.ClearContents For i = 3 To [A65536].End(xlUp).Row If Cells(i, "A") = "" Then Cells(i - 1, "A").Copy Cells(i, "A") Next i End Sub -----------------------------------------------------------

  • マクロについて

    マクロ初心者です。 下記の操作をマクロで行いたいのですがうまくいかないのでどうすればうまくマクロが作動するのか教えて頂ければと思います。4の操作までは正しく作動しましたが5以降に困っています。。。 どなたかお願いしますmm (1) A列にフィルターをかけて[??????}を含むものを選択 (2). 1に.該当するもB列のDataを値のみ数値と値のClear (3) 2の後に再びA列で[??????]を含まないものを選択 (4)  3に該当するA列のDataを数値と値のClear (5)  4の操作で空白となったセルに=上のセルという計算式の指示を出す (6) すべて値貼り付けをし、空白のセルを削除する ※Dataの行数は毎回作業時に変更があります。 ※Dataは数値だけではなく文字列も含んでいます 失敗したマクロ--------------------------------------------- Range("A2").Select Selection.AutoFilter Field:=1, Criteria1:="=*[??????]*", Operator:=xlAnd Columns("B:B").Select Selection.ClearContents Selection.AutoFilter Field:=1, Criteria1:="<>*[??????]*", Operator:=xlAnd Columns("A:A").Select Selection.ClearContents For i = 3 To [A65536].End(xlUp).Row If Cells(i, "A") = "" Then Cells(i - 1, "A").Copy Cells(i, "A") Next i End Sub -----------------------------------------------------------

専門家に質問してみよう