[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定した文字列を含む行とその周辺の行を一括で抽出したい』(クロウ)
指定した複数の文字列のいずれかを含むセルがある行とその周辺の行を抽出したいです。
例えば
−−−−−−−−−−−−−−−−−−−−−−−−−−
りんご 1
2
3
−−−−−−−−−−−−−−−−−−−−−−−−−−
みかん 1
2
−−−−−−−−−−−−−−−−−−−−−−−−−−
ばなな 1
2
3
4
5
−−−−−−−−−−−−−−−−−−−−−−−−−−
なし 1
2
3
4
−−−−−−−−−−−−−−−−−−−−−−−−−−
もも 1
−−−−−−−−−−−−−−−−−−−−−−−−−−
みかん 1
2
3
4
−−−−−−−−−−−−−−−−−−−−−−−−−−
りんご 1
2
3
4
−−−−−−−−−−−−−−−−−−−−−−−−−−
このような表があった場合、りんごとみかんの文字列を指定して
−−−−−−−−−−−−−−−−−−−−−−−−−−
りんご 1
2
3
−−−−−−−−−−−−−−−−−−−−−−−−−−
みかん 1
2
−−−−−−−−−−−−−−−−−−−−−−−−−−
みかん 1
2
3
4
−−−−−−−−−−−−−−−−−−−−−−−−−−
りんご 1
2
3
4
−−−−−−−−−−−−−−−−−−−−−−−−−−
このような結果になるようにしたいです。
どのような機能を使えば良いでしょうか?宜しくおねがいします。
< 使用 Excel:Excel2016、使用 OS:Windows8 >
空白セルを全部埋めた方が早いと思いますけど、その方向は如何でしょうか? (コナミ) 2019/01/08(火) 14:10
Dim dic As Object, c As Range, r As Range, flg As Boolean Set dic = CreateObject("scripting.dictionary") With Sheets("Sheet2") .Cells.ClearContents Sheets("Sheet1").Cells.Copy .Range("A1") Do ip = InputBox("文字列を指定してください。" & vbLf & "指定終了した場合はそのままOKボタン") If ip = "" Then Exit Do dic(ip) = True Loop For Each c In .UsedRange.Resize(, 1) If Trim(c.Value) <> "" Then If dic(c.Value) Then flg = True Else flg = False End If End If If Not flg Then c.EntireRow.Hidden = True Next c Set r = .Cells.SpecialCells(12) .Cells.EntireRow.Hidden = False r.EntireRow.Hidden = True .Cells.SpecialCells(12).Delete .Cells.EntireRow.Hidden = False End With End Sub (mm) 2019/01/08(火) 14:21
mmさま
ありがとうございます!
かなり近いことが出来ました。
1つ質問なのですが、文字列指定のポップアップが出たときにこの画面で複数の文字列を指定する方法はありますでしょうか?
"りんご","みかん"のようにして1回で複数の文字列を指定する方法がありましたら教えていただきたいです。
わがまま言ってすみません。
(クロウ) 2019/01/08(火) 17:21
Dim dic As Object, p As Variant, c As Range, r As Range, flg As Boolean Set dic = CreateObject("scripting.dictionary") With Sheets("Sheet2") .Cells.ClearContents Sheets("Sheet1").Cells.Copy .Range("A1") ip = InputBox("文字列を指定してください(カンマ区切りで複数指定可)。") For Each p In Split(Trim(Replace(ip, "、", ",")), ",") dic(p) = True Next p For Each c In .UsedRange.Resize(, 1) If Trim(c.Value) <> "" Then If dic(c.Value) Then flg = True Else flg = False End If End If If Not flg Then c.EntireRow.Hidden = True Next c Set r = .Cells.SpecialCells(12) .Cells.EntireRow.Hidden = False r.EntireRow.Hidden = True .Cells.SpecialCells(12).Delete .Cells.EntireRow.Hidden = False End With End Sub (mm) 2019/01/09(水) 11:00
コナミさんの言う空白セルを埋めるというのは
A B 1 項目1 項目2 2 りんご 1 3 2 4 3 5 みかん 1 6 2 7 ばなな 1 8 2 9 3 10 4 11 5 12 なし 1 13 2 14 3 15 4 16 もも 1 17 みかん 1 18 2 19 3 20 4 21 りんご 1 22 2 23 3 24 4
1.A3セルからA24セルを選択 → F5キーを押す → セル選択で「空白セル」を選択 2.その状態で数式バーに =A2 3.Ctrlキーを押しながらEnterキーを押す
ということです。3の後にホームタブにあるフォントの色から白を選択すれば 空白セルのように見せかけることもできます。 (bi) 2019/01/09(水) 14:25
mmさん
先日はありがとうございました。
ただ、また問題が起きてしまいました。
今回の質問で作成したりんご、みかん…のデータではうまくいったのですが、実際のデータでやると途中で途切れたりかなり飛び飛びで抽出されたりしてしまいました。
3000件ほどある中から1000件ほど抽出する必要があるのですが、抽出できる数に限りがあるのでしょうか?どうやら10〜20項目ぐらいまでしか抽出できていないようでした。
度々質問して申し訳ありません。
(クロウ) 2019/01/10(木) 11:01
例えばこれは書籍の高価買取リストなのですが
−−−−−−−−−−−−−−−−−−−−−−−−−−
戦略的ブランド・マネジメント
伝説のコピーライティング実践バイブル
マーケティング入門
ゲーム理論 新版
ザ・マーケティング 実践篇
グラッサー博士の選択理論
アントレプレナーの戦略思考技術
ハーバード流「21世紀経営」4つのコントロール・レバー
ピーター・ドラッカー マーケターの罪と罰
経営戦略全史
レビットのマーケティング思考法
訴訟リスクを劇的にダウンさせる就業規則の考え方、作り方。
ビジネスモデル全史 (ディスカヴァー・レボリューションズ)
リーダーの言葉が届かない10の理由 単行本
ひと目でわかる! 図解 日本アムウェイ(改訂第2版)
大手企業から引っ張りだこの超人気講師が教える 研修講師養成講座
メンバーの才能を開花させる技法 (単行本(ソフトカバー))
ビジョナリー・カンパニー 2 - 飛躍の法則
稼ぐ会社の「課長心得12カ条
−−−−−−−−−−−−−−−−−−−−−−−−−−
このようなリストがあった場合、このリストをSheet1にコピペし、メモ帳などで横並びに直してカンマで区切ったものを入力ボックスにコピペしてOKすると、なぜか
ハーバード流「21世紀経営」4つのコントロール・レバー
のところまでしか抽出されません。
区切って入力できる件数に限りがあるのかと思ったのですが、りんご・みかん・ばなな・のような簡単なものだと20件ほど抽出できたのでそこもよくわかりません。
うまく抽出できない原因、また他に抽出方法がありましたらご教示願います。よろしくおねがいします。
(クロウ) 2019/01/10(木) 17:04
Sub MAIN()
IP = InputBox("", , WorksheetFunction.Rept("A", 1000))
MsgBox "文字数制限 max:" & Len(IP)
End Sub
(mm) 2019/01/11(金) 09:51
ありがとうございます。
ということはやはり大量の文字列で抽出することは出来ないのでしょうか?
mmさんのコードでは文字数制限 max:254とでたので、それ以上の文字列は抽出出来ないということですかね。
(クロウ) 2019/01/11(金) 12:09
空白セルを埋めておけば、フィルタオプションでできますね。 (コナミ) 2019/01/11(金) 12:16
Dim dic As Object, dic2 As Object, k As Variant, p As Variant, c As Range, r As Range, flg As Boolean Set dic = CreateObject("scripting.dictionary") Set dic2 = CreateObject("scripting.dictionary") With Sheets("Sheet2") .Cells.ClearContents Sheets("Sheet1").Cells.Copy .Range("A1") For Each c In .UsedRange.Resize(, 1).SpecialCells(2) dic2(c.Value) = True Next c For Each k In dic2 If MsgBox(k & " を指定しますか", 36) = 6 Then dic(k) = True End If Next k For Each c In .UsedRange.Resize(, 1) If Trim(c.Value) <> "" Then If dic(c.Value) Then flg = True Else flg = False End If End If If Not flg Then c.EntireRow.Hidden = True Next c Set r = .Cells.SpecialCells(12) .Cells.EntireRow.Hidden = False r.EntireRow.Hidden = True .Cells.SpecialCells(12).Delete .Cells.EntireRow.Hidden = False End With End Sub
(mm) 2019/01/11(金) 15:37
mmさん
有難うございます。
試してみたのですが、項目を一つ一つポップアップさせてOKを押す形式は項目が1000以上あるので少し厳しいかもしれません。申し訳ないです。
やはりmmさんが前に書いてくれた
Sub main()
'Sheet1からSheet2に抽出
'指定文字列はA列
Dim dic As Object, p As Variant, c As Range, r As Range, flg As Boolean Set dic = CreateObject("scripting.dictionary") With Sheets("Sheet2") .Cells.ClearContents Sheets("Sheet1").Cells.Copy .Range("A1") ip = InputBox("文字列を指定してください(カンマ区切りで複数指定可)。") For Each p In Split(Trim(Replace(ip, "、", ",")), ",") dic(p) = True Next p For Each c In .UsedRange.Resize(, 1) If Trim(c.Value) <> "" Then If dic(c.Value) Then flg = True Else flg = False End If End If If Not flg Then c.EntireRow.Hidden = True Next c Set r = .Cells.SpecialCells(12) .Cells.EntireRow.Hidden = False r.EntireRow.Hidden = True .Cells.SpecialCells(12).Delete .Cells.EntireRow.Hidden = False End With End Sub
というInputBoxにカンマで区切って文字列を入力し、一括で抽出する方法が一番良かったのですが文字数制限があるとは。残念です。
(クロウ) 2019/01/11(金) 16:05
If MsgBox("指定した複数の文字列を、Sheet3 のA列1行目から下方向にセットしてください。" & vbLf & "準備はよろしいですか?", 36) = 7 Then Exit Sub Dim dic As Object, c As Range, r As Range, flg As Boolean Set dic = CreateObject("scripting.dictionary") With Sheets("Sheet2") .Cells.ClearContents Sheets("Sheet1").Cells.Copy .Range("A1") For Each c In Sheets("Sheet3").Range("A:A").SpecialCells(2) dic(c.Value) = True Next c For Each c In .UsedRange.Resize(, 1) If Trim(c.Value) <> "" Then If dic(c.Value) Then flg = True Else flg = False End If End If If Not flg Then c.EntireRow.Hidden = True Next c Set r = .Cells.SpecialCells(12) .Cells.EntireRow.Hidden = False r.EntireRow.Hidden = True .Cells.SpecialCells(12).Delete .Cells.EntireRow.Hidden = False End With End Sub (mm) 2019/01/11(金) 16:46
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.