![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?c9bd177)
現在Excel2010で作成している表をマクロで検索・抽出したいのですが、
素人のため中々思うように出来なくて困っています。
Sheet2~Sheet4まで作成した表があります。
Sheet1には検索ボタンを作成し、検索ボタンを押すと検索フォーム(ユーザーフォーム)が出てきます。
検索フォームはTextBox1とCommandButton1があります。
------ここまでは作成済みです--------
・検索フォームのTextBox1に入力した文字(半角全角英数関係なく)をCommandButton1で検索を行う。
・そしてその検索結果をSheet1の検索ボタン(セル A~B・1~2)を避けて表からコピーして抽出(複数ある場合は複数抽出)。
・抽出内容は、検索でヒットしたセルの列全てを抽出(複数ある場合は複数の列が抽出される)。
・同列に検索した文字が2つある場合も、抽出する列は1つ。
少しややこしいかもしれませんが、上記のようなマクロを作成したいのですが私では力が足りませんでした。
わかりやすく教えていただけると嬉しいです。
No.2ベストアンサー
- 回答日時:
>検索でヒットしたセルの列全てを抽出(複数ある場合は複数の列が抽出される)。
言わずもがなですが、「列」と「行」を言い間違えてはいませんね?
各シートごとに、検索とヒットしたセルをまとめて確保、一気にコピーする事でダブりを防止します。
private sub CommandButton1_Click()
dim i as long
dim h as range
dim res as range
dim target as range
dim c0 as string
’1枚目シートの事前掃除
with worksheets(1)
.range(.range("C1"), .cells(1, .columns.count)).entirecolumn.delete shift:=xlshifttoleft
end with
activeworkbook.save
set target = worksheets(1).range("C1")
for i = 2 to 4 ’2枚目から4枚目のシートを対象に
set res = nothing
’検索開始
set h = worksheets(i).cells.find(what:=me.textbox1, lookin:=xlvalues, lookat:=xlwhole, matchcase:=false, matchbyte:=false)
if not h is nothing then ’もし有れば
c0 = h.address
set res = h.entirecolumn
do
set h = worksheets(i).cells.findnext(h)
set res = union(res, h.entirecolumn)
loop until h.address = c0 ’シート内の検索終了
’コピーと次の貼り付け先の調査
res.copy target
set target = worksheets(1).cells.specialcells(xlcelltypelastcell).offset(0, 1).end(xlup)
end if
next i
end sub
#補足
あなたの各シートの「貼り付け先はどうなっているのか」「どんな内容がコピーされるのか」といった具体的に目に見える様子の情報が何もないので、「貼り付け先を掃除する」とか「どこに貼り付けたらいいのか」とかの情報の採取のため、大変回りくどい手管を弄しています。
たとえば「全シートとも1行目がきっちり埋まっている」といった、少しでも手掛かりになりそうな目に見える情報があれば、もうちょっと簡単なマクロにする事もできました。
この回答への補足
説明不足で申し訳ありません。
・列と行は言い間違えてません、大丈夫です。
・貼り付け先のSheet1には検索ボタン以外の情報はありません。
Sheet1のC1から抽出内容が貼付される現在の形で問題ありま せん。
・貼り付け先の掃除はすっかり忘れていて全く頭にありませんでした。
マクロに含めていただいて、ありがたかったです。
・内容については具体的には言えませんが、文字・数字・画像が列に並んで表示されている形です。
(抽象的な言い方で大変申し訳ないです・・・)
・全シート、1行目はきっちりと埋まっています。
質問なのですが・・・
画像も使用しているため、掃除の際に画像だけ残ってしまいます。
画像までオールクリアする方法もあるのでしょうか?
また、現在はセル結合を使用していませんが、隣列と部分的にセルの結合を行った場合、両列同時に検索・抽出することは可能なのでしょうか?
説明不足な点は補足させていただきました(質問まで付属してしまっていますが;)
解説付のマクロだったので、とてもわかりやすかったです。
動作も全く問題ありませんでした。
本当にありがとうございました。
No.3
- 回答日時:
>画像
それは想定外でしたが、あなたの言ってる「画像」と、シートの左上に置いてある「ボタン」などの区別がちゃんと付いているか心配します。
きちんと文字通り使い分けが理解できているのでしたら、掃除ブロックに
activesheet.pictures.delete
と一行追記します。
言わずもがなですがボタンにも画像を使っていたら当然一緒に消しちゃいますし、そもそも「画像」じゃなく実は別のモノが置かれてたら、当然これではダメです。
>部分的にセルの結合
説明があいまいですが、「部分的に」とは「A列やC列には結合セルは無いけど、D列とE列は上から下まで隣同士セル結合している」という意味で、「ある列の途中で結合しているセルもある」という事じゃないとします。
変更前:
set res = union(res, h.entirecolumn)
変更後:
set res = union(res, h.mergearea.entirecolumn)
セル結合していないシートで変更後のマクロを使っても問題ありません。
No.1
- 回答日時:
こんばんは!
外しているかもしれませんが・・・
たたき台としてです。
Private Sub CommandButton1_Click()
Dim k As Long, j As Long, cnt As Long
Dim wS As Worksheet
Dim str
str = TextBox1.Value
j = Worksheets(1).Cells(1, Columns.Count).End(xlToLeft).Column
If j > 2 Then
Range(Worksheets(1).Columns(3), Worksheets(1).Columns(j)).ClearContents
End If
cnt = 2
For k = 2 To Worksheets.Count
Set wS = Worksheets(k)
For j = 1 To wS.Cells(1, Columns.Count).End(xlToLeft).Column
If TextBox1 = "" Then
MsgBox "検索データを入力してください。", vbExclamation
TextBox1.SetFocus
Exit Sub
Else
If WorksheetFunction.CountIf(wS.Columns(j), str) Then
cnt = cnt + 1
wS.Columns(j).Copy Worksheets(1).Columns(cnt)
End If
End If
Next j
Next k
End Sub
※ 条件としてSheet2以降の表は1行目に項目など何らかのデータが入っているという前提です。
(1行目で各Sheetの最終列を取得しているため)
こんな感じではどうでしょうか?m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBA初心者です 検索した数字の行に色をつける 5 2023/02/13 14:22
- Excel(エクセル) 【Excel】指定のセル内容を基に別シートのセルを検索して選択する【VBA】 1 2022/06/16 16:16
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- Excel(エクセル) Excel(エクセル)でフィルター抽出後、非表示の行を計算しないで、合計を算出する方法 【内容】 添 4 2023/01/30 17:17
- その他(Microsoft Office) Outlookメール 連絡先の検索について 〈 ご説明 〉 Windows PC の Outlook 1 2022/09/23 14:43
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) Excelについて質問です。 シート1の検索値例えば *ABC* をシート2.3.4から検索して、シ 5 2023/02/17 23:30
- Visual Basic(VBA) 検索のユーザーフォームの表示について 1 2023/03/27 23:31
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
結合のループ処理のマクロ
-
背景色の有無を判断をして別の...
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
A列とB列を参照してC列に連番を...
-
エクセル日付 文字列の関数がエ...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
2つのエクセルのデータを同じよ...
-
エクセルでオートフィルタのボ...
-
エクセルで時刻(8:00~20:00)...
-
エクセルで文字が混じった数字...
-
エクセル 文字数 多い順 並...
-
エクセルで、2種類のデータを...
-
VBA 連続行データを5行ずつ隣の...
-
エクセルで最初のスペースまで...
-
エクセル(勝手に太字になる)
-
エクセル 同じ値を探して隣の...
-
Excelで半角の文字を含むセルを...
-
エクセルで極大値を拾うには
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
背景色の有無を判断をして別の...
-
Excelで全シートから検索し列で...
-
任意のセルに小計、合計と入力...
-
VBA 動作の後、動作した行のA...
-
結合のループ処理のマクロ
-
エクセルでセル内の特定数値を...
-
エクセルで「セルを結合して中...
-
エクセルのユーザー定義で
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで時刻(8:00~20:00)...
-
エクセルでオートフィルタのボ...
-
エクセルで、2種類のデータを...
-
2つのエクセルのデータを同じよ...
-
エクセルで最初のスペースまで...
-
エクセルのオートフィルタで最...
-
SUMIFとCOUNTIFを合わせたよう...
-
エクセルVBA、別ブックへ転記す...
おすすめ情報