Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1040 / 13645 ツリー ←次へ | 前へ→

【76652】アクティブセルで読み込んだ値であいまい検索する方法 さとちぃ 15/2/24(火) 10:02 質問[未読]
【76653】Re:アクティブセルで読み込んだ値であいま... kanabun 15/2/24(火) 10:20 発言[未読]
【76654】Re:アクティブセルで読み込んだ値であいま... kanabun 15/2/24(火) 10:25 発言[未読]
【76655】Re:アクティブセルで読み込んだ値であいま... さとちぃ 15/2/24(火) 10:47 質問[未読]
【76658】Re:アクティブセルで読み込んだ値であいま... kanabun 15/2/24(火) 12:50 発言[未読]
【76660】Re:アクティブセルで読み込んだ値であいま... さとちぃ 15/2/24(火) 16:17 お礼[未読]
【76661】Re:アクティブセルで読み込んだ値であいま... kanabun 15/2/24(火) 16:55 発言[未読]

【76652】アクティブセルで読み込んだ値であいまい...
質問  さとちぃ  - 15/2/24(火) 10:02 -

引用なし
パスワード
   VBAの初心者です。
以下の様な作業をさせたいのですが、わからないため
教えていただけませんでしょうか?

会社情報というシートと名刺情報というシートがあります。
会社情報のシートから名刺情報にリンクできるようにマクロで
実行出来るようにするため、以下の様な動作をさせることで
実現しようと考えてます。


シート名”会社情報”

A        B         C      D    E
会社名       リンクボタン     拠点名   都道府県  住所
ABC株式会社  マクロ実行ボタン  ZE工場   東京都   東京都港区・・・

シート名”名刺情報”

A        B         C     D      E
会社名       リンクボタン     拠点名   担当者   所属
ABC株式会社  マクロ実行ボタン  ZE工場   中川一郎  営業


(1)会社情報のシートを選択。アクティブセルを会社名に合わせ、その状態で
  マクロ実行ボタンを押下。

(2)アクティブセルの値を読み込み、名刺情報のシートのA列にてオートフィルタを
  実行。アクティブセルの値と等しい物を表示。

プログラムのコードは、以下のように考えております。

Sub 会社情報からの名刺情報検索()
  Dim kaisyamei As Range
  Dim N As Long
  Dim i As Worksheet
  Set kaisyamei = ActiveCell
  Worksheets("名刺情報").Select
  If N = InStr(ActiveCell, " ") Then
  Worksheets("名刺情報").Range("A2").AutoFilter Field:=1, Criteria1:=kaisyamei
  End If
  End Sub


(困っていること)
アクティブセルの値と名刺情報の会社名が全文一致で合う場合は問題ありませんが
”ABC”のみの表記のものがあった場合、つまり部分一致で検索しようとする場合
やり方が分からず困っています。

【76653】Re:アクティブセルで読み込んだ値であい...
発言  kanabun  - 15/2/24(火) 10:20 -

引用なし
パスワード
   ▼さとちぃ さん:

AutoFilterで検索ということは 「名刺情報」シートのリストには複数ヒットする
可能性があるということでしょうか?

>アクティブセルの値と名刺情報の会社名が全文一致で合う場合は問題ありませんが
>”ABC”のみの表記のものがあった場合、つまり部分一致で検索しようとする場合
>やり方が分からず困っています。

AutoFilterをかけるとき、オプションで 「〜を含む」 「ABC」 で抽出条件設定を
する操作のマクロ記録をしてみると分りますが、

  Range("A1:E26").AutoFilter Field:=1, Criteria1:="=*ABC*"

こんな感じで部分一致の抽出ができます。

【76654】Re:アクティブセルで読み込んだ値であい...
発言  kanabun  - 15/2/24(火) 10:25 -

引用なし
パスワード
   フィルター範囲は、
2行目データ範囲からでなく、列見出し行も含めて 最終行までを
指定してください。

Worksheets("名刺情報").Range("A1:E26").AutoFilter Field:=1, Criteria1:="*ABC*"

Worksheets("名刺情報").Range("A1:A26").AutoFilter 1, Criteria1:="*ABC*"

↑はOKですけど、

↓これはよくないです。
Worksheets("名刺情報").Range("A2").AutoFilter Field:=1, Criteria1:="*ABC"

【76655】Re:アクティブセルで読み込んだ値であい...
質問  さとちぃ  - 15/2/24(火) 10:47 -

引用なし
パスワード
   KANABUN様

さとちぃです。早速ご回答ありがとうございます。
すみません、私の説明が悪く、再度ご質問させていただきます。

(困っていること)
アクティブセルの値と名刺情報の会社名が全文一致で合う場合は問題ありませんが
”ABC”のみの表記のものがあった場合、つまり部分一致でヒットさせようとする場合
やり方が分からず困っています。

登録されている会社名は、ABCのみでなくいろいろあり、"*ABC*"のみの設定では難しいです。
それでは、一つ一つ設定すれば良いと考えましたが、1000社程度あり、とても無理だと
考えてます。


教えていただいた内容を元に、以下のように作成してみましたが、

Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:="*kaisyamei*"

の部分で、

実行時エラー1004 RangeクラスのAutofilterメソッドが失敗しました

との結果がきました。


Sub オールラウンド拠点情報からの名刺情報検索()
  Dim kaisyamei As Range
  Dim N As Long
  Dim i As Worksheet
  Set kaisyamei = ActiveCell
  Worksheets("名刺情報").Select
  If N = InStr(ActiveCell, " ") Then
  Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:="*kaisyamei*"
  End If
  End Sub

大変申し訳ありませんが、教えていただけませんでしょうか?

また、AutoFilterではなく配列等別の方法で同様の操作が可能であれば、おしえていただけませんでしょうか?

【76658】Re:アクティブセルで読み込んだ値であい...
発言  kanabun  - 15/2/24(火) 12:50 -

引用なし
パスワード
   ▼さとちぃ さん:

>教えていただいた内容を元に、以下のように作成してみましたが、
>
> Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:="*kaisyamei*"
>
>の部分で、
>
>実行時エラー1004 RangeクラスのAutofilterメソッドが失敗しました
>
>との結果がきました。

> Criteria1:="*kaisyamei*"

kaisyamei は変数なのだから、それに * を付けて " "で囲っても、だめです。

Sub オールラウンド拠点情報からの名刺情報検索()
  Dim kaisyamei As String' Range
  kaisyamei = "*" & ActiveCell.Value & "*"

  Worksheets("名刺情報").Range("A2:A1000").AutoFilter _
    Field:=1, Criteria1:=kaisyamei
End Sub

【76660】Re:アクティブセルで読み込んだ値であい...
お礼  さとちぃ  - 15/2/24(火) 16:17 -

引用なし
パスワード
   Kanabun様

さとちぃです。
ありがとうございました。一部変更して、無事動くことを確認しました。

ただ、一点理解できないところがありまして、

Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:=kaisyamei

の領域設定ですが、上記の方法ではAutoFilterメソッドが実行出来ないとエラーが出てしまいます。

A列のみの選択では無く、全領域を選択すればプログラムは動きます。
エラーが出るのは、私の環境がおかしいからでしょうか?

【76661】Re:アクティブセルで読み込んだ値であい...
発言  kanabun  - 15/2/24(火) 16:55 -

引用なし
パスワード
   ▼さとちぃ さん:

>Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:=kaisyamei
>
>の領域設定ですが、上記の方法ではAutoFilterメソッドが実行出来ないとエラーが出てしまいます。
>
>A列のみの選択では無く、全領域を選択すればプログラムは動きます。

ごめん。
>Worksheets("名刺情報").Range("A2:A1000").AutoFilter Field:=1, Criteria1:=kaisyamei


Worksheets("名刺情報").Range("A1:A1000").AutoFilter Field:=1, Criteria1:=kaisyamei

のまちがいです。 ("A2:A1000" A2 ではなく A1、":"(全角) ではなく ":"(半角) )
それで、どのようなエラーになるのですか?
というか、
> AutoFilterメソッドが実行出来ない
とはどのような状況でしょうか?

基本的に、A列データ範囲だけをAutoFilterするのと、表領域全体をAutoFilterするのと、
どちらも フィルタかける範囲は A列ですので (Field:=1, Criteria1:=kaisyamei )
ちがいはないと認識しています。
結果も、表範囲だけが非表示になるのでなく、行全体が非表示になるのですから、そこも
変わりは無いと思いますけど?

1040 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free