- ベストアンサー
エクセル2000のマクロについて教えて下さい。
いつも お世話になっております。 マクロにはこだわってはいませんが、 a1:a1000 まで名称があります。 セルb1に一部の名前を入力したら a1:a1000の間に同じ名称があった 場合c1に表示できないでしょうか? ただし 複数があった場合はc1:c・・・・で表示したいので マクロではないとできないかなと思っています。 すみませんがよろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2で回答したukoです。 No.2ではB1の文字列を含んでいるものを抽出する関数でしたが、 もうひとつ、B1の文字列で始まるものを抽出する処理する方法を 追加で回答します。 A1:A1000に入力されているデータのなかで、 B1に入力した文字列で始まるものだけ、 上から順にC1,C2,...に表示します。 C1に以下の数式を入力します。 =INDEX($A$1:$A$1000,SMALL(IF(LEFT($B$1,LEN($B$1))=LEFT($A$1:$A$1000,LEN($B$1)),ROW($A$1:$A$1000),""),ROW(D1))) 配列数式になりますので CTRL+SHIFT+ENTERで確定します。 あとは必要分下にコピーします。 (全部に含まれる可能性もあるでしょうからC1000まででしょうか?)
その他の回答 (3)
- uko
- ベストアンサー率57% (4/7)
No.3の補足に対する回答です。 式を以下のように変更するしてください。 =IF(COUNT(FIND($B$1,$A$1:$A$1000,1))<ROW(C1),"",INDEX($A$1:$A$1000,SMALL(IF(ISERROR(FIND($B$1,$A$1:$A$1000,1)),"",ROW($A$1:$A$1000)),ROW(C1)))) では。
お礼
ありがとう ございました 行ってみます。
- uko
- ベストアンサー率57% (4/7)
関数で処理する方法です。 A1:A1000に入力されているデータのなかで、 B1に入力した文字列を含むものだけ、 上から順にC1,C2,...に表示します。 C1に以下の数式を入力します。 =INDEX($A$1:$A$1000,SMALL(IF(ISERROR(FIND($B$1,$A$1:$A$1000,1)),"",ROW($A$1:$A$1000)),ROW(C1))) 配列数式になりますので CTRL+SHIFT+ENTERで確定します。 あとは必要分下にコピーします。 (全部に含まれる可能性もあるでしょうからC1000まででしょうか?)
- imogasi
- ベストアンサー率27% (4737/17069)
フィルタオプションで抽出を使う。 (1)例としてA1~A12(実際はA1000まで)に下記データを入れる 氏名 分類クラス 定価 氏名 三原 a 14 *小川* 大川 b 15 山田 c 20 志茂田 a 12 小川 c 30 尾原 a 14 小川原 b 15 青田 c 20 上田 a 12 神田 a 30 北小川 c 12 (2)データ-フィルタ-フィルタオプションの設定で リスト範囲は$A$1:$D$12($A$1:$C$12も同じ) 検索条件の範囲は$D$1:$D$2でOKをクリック。 氏名 分類クラス 定価 氏名 小川 c 50 小川原 b 15 北小川 c 15 となる (3)データ-フィルタ-すべて表示、で元に戻る。上例はC1からC3にはセットできていませんが、「抽出先」「指定した範囲」をONにして、「抽出範囲」を指定すると、そこに結果が出る。 (4)上記をマクロの記録でやれば簡単にVBA化できる。 名前はnam=InputBox("名前=")で聞いてD2セルにセット すれば良い。 Sub Macro1() Nam = InputBox("名前=") Range("d2") = Nam Range("A1:C12").Select Range("A1:C12").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ 'この行は前行の終わりに続く Range("D1:D2"), Unique:=False End Sub
補足
ありがとうございました。 できました。 ただ式を入れた時に#NUM!と表示されます。 対象データが存在しないときに、何も入れない方法はありません?