![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
No.6ベストアンサー
- 回答日時:
こんにちは!
No.2さんの補足を読ませていただいて・・・
元データはSheet1にあり、Sheet2に表示するとします。
標準モジュールです。
Sub Sample1()
Dim myStr As String, wS As Worksheet
Dim lastRow As Long
Set wS = Worksheets("Sheet2")
myStr = Application.InputBox("検索文字を入力")
wS.Range("A:M").ClearContents
With Worksheets("Sheet1")
lastRow = .Cells(Rows.Count, "J").End(xlUp).Row
.Range("J:J").AutoFilter field:=1, Criteria1:="*" & myStr & "*"
If .Cells(Rows.Count, "A").End(xlUp).Row > 1 Then
Range(.Cells(1, "A"), .Cells(lastRow, "M")).SpecialCells(xlCellTypeVisible).Copy wS.Range("A1")
Else
MsgBox "該当データなし"
End If
.AutoFilterMode = False
End With
wS.Activate
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?m(_ _)m
ご教示ありがとうございます。
前回、一年半ほど前に質問した時にもご回答いただいた方ですよね。
何度もご回答いただきありがとうございます。
シート名を変更して私のやりたいことができました。
ご回答ありがとうございました。
No.8
- 回答日時:
#7の回答者です。
>なんだか難しい言葉ばかりでよくわかりません。
>私なりにもう少しExcelを勉強しようと思います。
Excelが登場して、かれこれ40年になります。事実上、Microsoft がIBMと契約が切れる少し前頃から、Lotus123が絶好調の時、1980年後半から、その存在は知られていますが、実は、1980年の始め頃、Mac用のExcelがあったし、すでに、Multiplan というDOSの表計算にExcelのDNAが埋め込まれています。その時に、データベース機能は取り入れられていたわけです。
それぞれの訳のわからない単語が、その時々を彩るExcelの歴史の一片なのです。全部のデータベース機能は学ぶ必要もないけれども、Excelの標準的な機能は、メジャーであろうが、なかろうが、学ぶことが可能な限りは、身につけておいたほうが良いとは思います。
その中でも、#4さんの示されたAdvancedFilter(フィルターオプション) はその初期から存在していた機能のひとつです。マクロよりも、まず、手作業でできるようにしてから、マクロを当てはめてみたらいかがでしょうか。
No.7
- 回答日時:
ちょっと割り込ませていただきます。
>InputBoxで思いつく言葉を入力し、
>その言葉と部分一致しているものを抽出し
>その行を別のシートに貼り付けられたら便利だなと思っています。
それでしたら、もうすでに#4さんの回答が出ていますが、私も、AdvancedFilter で十分だと思います。表計算上の名称は「フィルターオプション」で、マクロで行うというのが、ミソなのです。
私は、Worksheet_Change イベントを使うことが多いのですが。
ただ、別途、Excelはデータベースもかねています。おそらく、初期の製作者の悲願だったのだろうと思います。Excelの表計算上の構造に、そのデータベースの要素が残っているのです。VBAマクロを学習する中で、ADODBなど、避けては通れないので、自然に覚えてしまうというものなのです。
Access は、後発ですし、かなり仕様が違うので、別会社で作ったということは想像つきます。それと、私には、Accessには、経験的にしか分からない、予約語を始め、不可解なエラーをいちいち探さなくてはならない面倒さがあります。
Excelには、単品で購入しても、OLAPやら、データベースJet などがついています。単に、ほとんどの人がマニュアルもなくて使いこなせないだけではないでしょうか。それに、インターフェィスのODBC がついています。かつては、Excelを購入すると「Microsoft Query」というマニュアルがついてきました。
それで、ADODBやDAOというならいざ知らず、このODBC のQueryを簡単に使いこなせる人間が、掲示板の回答者に今もいるということも、驚きでしたね。
書籍では、安価で、エクスメディアさんが、唯一、Excelのデータベースの使い方の書籍を出していましたが、出版社が倒産してしまいました。民間で多く出ているのは、Excelをフロントエンドにするということで、MYSQLなどが知られています。
それよりも小規模というよりも、まったく別の仕組みで、かつてのVLOOK等の関数の不便さからAdvancedFilter というデータベース機能を、かなり初期の頃から搭載されました。また、別の方にも紹介しましたが、ODBCによる、パラメータクエリは、なかなか便利なものです。ただ、今は、PCの仕様も格段と上がり、VLOOKUPでも何の問題もない段階に入っても、AdvancedFilter は健在だとは言えます。
私自身、表計算とカード型データベースというのは、かつての初期のMultiplan と DataBox (タイトルの漢字がつかない頃)の組み合わせで何年も使ってきましたから、その便利度は測り知れません。だから、FileMaker は何度も食指が動きましたが、ついにそれだけの出費には相成りませんでした。
ご教示ありがとうございます。
なんだか難しい言葉ばかりでよくわかりません。
私なりにもう少しExcelを勉強しようと思います。
ありがとうございました。
No.5
- 回答日時:
>>Excelが表計算ソフトだということは十分理解しております。
おっしゃるようにデータベースみたいな使い方ができればと思い、挑戦中です。
パソコンがこんなに広まる以前のWindowsじゃあない真っ黒画面のDOS時代、「カード型データベース」という素人でも、お手軽に使えるソフトが市場に広まったことがありました。
桐、The Card、漢字データボックス 、パーソナルパール・・・。
これらのソフトは、その後のリレーショナル・データベース全盛時代に、機能競争に敗れたりで市場から消えてしまいました。
でも、リレーショナル機能とか、開発機能を加えることでいまでも使われ続けているのが、FileMakerというソフトです。
現在は、初心者向けのカード型データベース機能だけじゃあなく、Web対応、スマートフォン、タブレット向けアプリケーションの開発機能までも可能になっているようです。
フリーソフトじゃあなく3万6千円くらいしますが、たぶんやりたいことは、Excelよりも手軽に実現できると思いますよ。
「苦労してなにかをやりとげる」という目的であれば、Excelでもいいのですけど、「できるだけ楽して目的を果たしたい。あわよくば、Webサイトのソフトも作れるかも?」なんてのもありうるFileMakerを選ぶってのもありかな?なんておもいます。
ご教示ありがとうございます。
FileMakerはパソコンを始めた当初(30年程前)から数年Macで使用しておりました。
今でもWindows版を時々使用しておりますが、今回はボケ防止に役立つならとExcelを勉強しようと思った次第です。
ご回答ありがとうございました。
No.4
- 回答日時:
この要件の場合、AdvancedFilterメソッドの使用が最適と考えます。
添付画像を見て頂けると3つのシートがあることが分かって頂けると思います。
まず、「データベース」シートですが、1行目が見出し行になっていて、J1セルの見出しは「メモ」となっている前提です。このシートは既に作成済みですよね?
次に、添付画像の通りに「条件指定」シートを作成してください。さらに「抽出結果」シートも必要になりますが、これは空のシートでOKです。
シートの準備が出来たら次のVBAを実行してみて下さい。
Sub Macro1()
Sheets("データベース").Columns("A:M").AdvancedFilter Action:=xlFilterCopy, _
CriteriaRange:=Sheets("条件指定").Range("A1:A2"), _
CopyToRange:=Sheets("抽出結果").Range("A1:M1"), _
Unique:=False
End Sub
AdvancedFilterメソッド一発で事が完了してしまうため、コードの説明は省略させていただきます。
AdvancedFilterはVBAだけではなく、通常のExcelのマニュアル操作でも使用可能です(「データ」タブ-「並べ替えとフィルター」の「詳細設定」)。どんなことが出来るのかをマニュアル操作で確認して頂ければ、いろいろ応用が利くことが分かって頂けると思います。
![「Excel VBA」の回答画像4](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/3/542293914_5b36d4e43435d/M.png)
ご教示ありがとうございます。
AdvancedFilterメソッドは初めて目にする言葉で
Excelをまだまだ勉強しないとと思いました。
ボケ防止のために頑張ります。
ありがとうございました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_14.png?5a7ff87)
No.3
- 回答日時:
補足要求です。
1)データの入っているシートのシート名は何でしょうか。(全角/半角、大文字/小文字についても正確に提示ください)
2)上記シートの1行目は見出し行で2行目以降からがデータ行の前提で良いですか?
2)新しく作ったシートのシート名は何でしょうか。(検索結果表示用のシート)(全角/半角、大文字/小文字についても正確に提示ください)
3)InputBoxに検索文字列を指定するのではなく、新しく作ったシートのO2(添付図の黄色の部分)に検索文字列を指定し、
マッチした行を緑の部分に表示するのはいかがでしょうか。(InputBoxよりは使い勝手がよいかと思います)
![「Excel VBA」の回答画像3](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/9/106271_5b36cfce6a25e/M.png)
No.2
- 回答日時:
> 部分一致で同じ言葉が複数行あったら
そのJ列に入力されているメモと「何が」一致するかどうかを調べるの?
J列の内容が、
「なごや」は部分一致は無い。
「とうきょう」は「う」の言葉が部分一致してる。
とかって話?
例えば、I列に入ってる言葉が、J列のメモの中に含まれる、部分一致するか?って話なら、新規のN列に、
N1:=NOT(ISERR(FIND(I1, J1)))
とかで、含まれるならTRUE、含まれないならFALSEって結果を表示できます。
その上で、新しいシートに全体をコピー、値として貼り付け。
N列で並べ替えして、N列がFALSEの行を削除、N列を削除。
とか、手動で処理しちゃダメなんでしょうか?
No.1
- 回答日時:
>>一念発起してExcelでデータベースを作っています。
Excelでは、データベースは作れません。Excelは表計算ソフトです。
データベースっぽいものは作れますけど、本来のデータベースが持っている機能は全然使えません。
>>Webで検索したりしていますが、思い通りの結果になるコードが見つかりません。
Web検索でも使えそうなものは見つかると思いますが、なかなかピッタリくるものは無いかもしれません。
この場合、Wxcel VBA逆引き大全なんてタイトルの書籍を購入しましょう。
サンプル例文が沢山掲載されています。
>>J列のメモのデータを検索して、部分一致で同じ言葉が複数行あったら・・・
まともなデータベースを使うと、複雑な検索条件で抽出したり、結果を並べ替えたりとか、かなり自由なデータ操作が可能です。
ただ、初心者には、まともなデータベースの勉強は、難しすぎるかもしれませんね・・・。
Excelが表計算ソフトだということは十分理解しております。
おっしゃるようにデータベースみたいな使い方ができればと思い、挑戦中です。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Visual Basic(VBA) 集計シートA列のコードと一致する右に並んだシート名(コード)の3行目から10行目をコピーして貼り付け 4 2022/08/18 15:24
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) 複数のExcelブックのシート1の内容を1つのExcelブックにコピー貼り付けたいのでvbaコードを 7 2023/02/10 23:20
- Excel(エクセル) VLOOKUP が機能しない、その原因は何 ? 8 2022/10/19 12:06
- Excel(エクセル) マクロVBAのフォルダ階層別で検索の方法 4 2022/04/03 23:23
- Visual Basic(VBA) 【VBA】複数行あるカンマ区切りのデータを全て縦に一列に並べたい 5 2022/04/13 17:03
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Excel(エクセル) Power Query でのデータの一括修正について 2 2022/05/10 02:00
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Count Ifのセルの範囲指定に変...
-
マクロ実行後に別シートの残像...
-
マクロの「SaveAs」でエラーが...
-
EXCELのSheet番号って変更でき...
-
【VBA】特定の条件でセルをコピー
-
【Excel VBA】自動メール送信の...
-
楽天RSSからエクセルVBAを使用...
-
VBA 空白行に転記する
-
VBA 実行時エラー1004 rangeメ...
-
VBAのグラフに違うシートの...
-
VBA別シートの最終行の次行へ転...
-
Unionでの他のシートの参照につ...
-
テキストボックスから、複数の...
-
Excelで横書き50行の漢字テス...
-
【VBA】データを各シートに自動...
-
VBA 別ブックからの転記の高速...
-
100万件越えCSVから条件を満た...
-
vba 別シートへの検索・出力2に...
-
excel vbaで教えてください。(...
-
エクセル マクロ VBA Range Val...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
マクロの「SaveAs」でエラーが...
-
VBA 空白行に転記する
-
EXCELのSheet番号って変更でき...
-
マクロ実行後に別シートの残像...
-
Count Ifのセルの範囲指定に変...
-
VBA 別ブックからの転記の高速...
-
VBA別シートの最終行の次行へ転...
-
Changeイベントで複数セルへの...
-
複数シートの複数列に入力され...
-
ExcelのVBマクロを、バックグラ...
-
VBA 実行時エラー1004 rangeメ...
-
楽天RSSからエクセルVBAを使用...
-
【VBA】特定の条件でセルをコピー
-
100万件越えCSVから条件を満た...
-
Excel2013で切り取り禁止
-
VBAで変数の数/変数名を動的に...
-
アクセスからエクセルへ出力時...
-
Unionでの他のシートの参照につ...
-
グラフマクロで系列を変数にす...
-
Excel VBA オートフィルターで...
おすすめ情報
失礼しました。
本当に何と一致すればが抜けておりました。
InputBoxで思いつく言葉を入力し、
その言葉と部分一致しているものを抽出し
その行を別のシートに貼り付けられたら便利だなと思っています。
ありがとうございます。
1)入力用です。
2)1行目は見出し行で2行目以降がデータ行になります。
3)入力用コピーです。
4)ご指摘の方法でもいいのですが、できればInputBoxできればと思っています。
補足が遅くなり申し訳ありませんでした。
よろしくお願いします。