エクセルVBAを使い、特定文字から始まっているデータを別シートに抽出がしたいです。
他の方が質問していた内容を参考に、特定文字が含まれていたら抽出することは以下で可能でした。
特定文字から始まっている場合にするには、どこを修正すればよいでしょうか。
ド素人の質問ですみませんが、ご回答お願いいたします!
Sub データ抽出()
'----- 設定事項 ------------
Const OrgSh = "Sheet1" ' <--- 基データのシート名
Const PicSh = "Sheet2" ' <--- 抽出先シート名
Const TopAdd = "B2" ' <--- 検索範囲の先頭(見出しを除く)
Const FindStr = "大阪府" ' < ---検索する文字列
'---------------------------
Dim Ws1 As Worksheet
Dim Ws2 As Worksheet
Dim Rng As Range
Dim First As String
Dim N As Long
Set Ws1 = Worksheets(OrgSh)
Set Ws2 = Worksheets(PicSh)
Ws2.Cells.ClearContents '抽出先シートをクリア
If Range(TopAdd).Row > 1 Then ' 見出し行があればコピー
Ws1.Range(TopAdd).Offset(-1).EntireRow.Copy Destination:=Ws2.Rows(1)
N = 1
End If
Set Rng = Ws1.Range(TopAdd).EntireColumn.Find(FindStr) '部分一致検索
If Not Rng Is Nothing Then
First = Rng.Address
Do
N = N + 1
Rng.EntireRow.Copy Destination:=Ws2.Rows(N)
Set Rng = Ws1.Range(TopAdd).EntireColumn.FindNext(Rng)
Loop Until Rng Is Nothing Or Rng.Address = First
End If
End Sub
No.2
- 回答日時:
とてもよくできたマクロだと思います。
[1]シート名OrgSh,PicShが無い場合にエラーが出てしまうと思いますので,シートの有無を検査するコードを追加してみました。
[2]コードを挿入した個所が分かるようにコメント文字の「追加」を入れました。
Sub データ抽出()
'----- 設定事項 ------------
Const OrgSh = "Sheet1" ' <--- 基データのシート名
Const PicSh = "Sheet2" ' <--- 抽出先シート名
Const TopAdd = "D2" ' <--- 検索範囲の先頭(見出しを除く)
Const FindStr = "内外" ' < ---検索する文字列
'---------------------------
Dim Ws1 As Worksheet
Dim Ws2 As Worksheet
Dim Rng As Range
Dim First As String
Dim N As Long
Dim FLAG As Boolean '追加
Call 追加(ThisWorkbook, OrgSh, FLAG) '追加
Select Case FLAG '追加
Case True '追加
Set Ws1 = Worksheets(OrgSh)
Call 追加(ThisWorkbook, PicSh, FLAG) '追加
Select Case FLAG '追加
Case True '追加
Set Ws2 = Worksheets(PicSh)
Ws2.Cells.ClearContents '抽出先シートをクリア
If Range(TopAdd).Row > 1 Then ' 見出し行があればコピー
Ws1.Range(TopAdd).Offset(-1).EntireRow.Copy Destination:=Ws2.Rows(1)
N = 1
End If
Set Rng = Ws1.Range(TopAdd).EntireColumn.Find(FindStr) '部分一致検索
If Not Rng Is Nothing Then
Select Case InStr(Rng, FindStr) '追加
Case 1 '追加
First = Rng.Address
Do
N = N + 1
Rng.EntireRow.Copy Destination:=Ws2.Rows(N)
Set Rng = Ws1.Range(TopAdd).EntireColumn.FindNext(Rng)
Loop Until Rng Is Nothing Or Rng.Address = First
Case Else '追加
End Select '追加
End If
Case False '追加
End Select '追加
Case False '追加
End Select '追加
End Sub
Sub 追加(W, SHEET_NAME, FLAG)
' シートの有無を検査します。
FLAG = False
For Each S In W.Sheets
Select Case S.Name
Case SHEET_NAME
FLAG = True
Exit For
Case Else
End Select
Next
End Sub
No.1
- 回答日時:
左端から指定した文字数を抜き出すLEFTと、文字の長さを返すLENを使えばよさそうです。
Left(対象語, Len(検索語)) を検索語と比較して一致したものを抽出すればよいとおもいます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルVBAで教えて頂きたいのですが? 2 2022/12/31 20:28
- Visual Basic(VBA) VBAで教えて頂きたいのですが? 1 2022/04/29 02:36
- Visual Basic(VBA) 【VBAエラー】Nextに対するForがありません 対策について 5 2022/11/21 21:26
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) ExcelVBAに関する質問 3 2023/02/17 10:47
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) 製品番号での整列と、検索に関して 3 2023/06/28 19:20
- Visual Basic(VBA) Excelで下記のようにマクロを作ったところ、一回目は実行できたのですが、二回目以降「実行時エラー1 1 2022/03/25 08:08
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Excel(エクセル) エクセルシート中の全角英数字を半角に変換したい 4 2022/07/07 13:14
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
Excelで、任意の言葉で始まる行のみを、行ごと一括で削除する方法を教
Excel(エクセル)
-
特定の文字を含むシートだけマクロ処理をしたい
Visual Basic(VBA)
-
【VBA】特定の値が入った行をコピーして別シートに貼り付ける方法をおしえていただきたいです。
Excel(エクセル)
-
-
4
エクセル:マクロ「Application.CutCopyMode = False」って?
Excel(エクセル)
-
5
Excel: ファイル名になぜ、[ ]が使えないのでしょうか
Windows Me・NT・2000
-
6
「選択範囲を解除してアクティブセルを選択」をマクロで行うにはどうすればよいでしょうか
Excel(エクセル)
-
7
EXCEL 年月表示をするVBAを教えてください。
Excel(エクセル)
-
8
エクセルVBAでセルに入力したパスでブックを開く
Excel(エクセル)
-
9
エクセルVBA C列に特定の文字列を含む行のみを抽出し、一つのExcelにまとめたい。
Excel(エクセル)
-
10
VBAで繰り返しコピーしながら下へ移動させる方法
Excel(エクセル)
-
11
【Excel VBA】複数ある特定の文字列を含む行を削除
Excel(エクセル)
-
12
【VBA】特定の文字が入っている行の一部を抽出して別シートコピーするには
Visual Basic(VBA)
-
13
文字列の結合を空白行まで実行
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
複数シートからデータを拾って...
-
excelの不要な行の削除ができな...
-
Excelでシートの違うデータでグ...
-
エクセルファイルのシート毎の容量
-
シート削除して同名シート追加...
-
Excelで日付変更ごとに、自動的...
-
エクセル VBA VLOOKUP
-
エクセルで名簿を50音で切り分ける
-
VBAで CTRL+HOMEの位置へ移動...
-
【マクロ】同じフォルダ内にあ...
-
EXCEL 複数行のデータを1行にま...
-
エクセルVBAで、特定文字から始...
-
EXCELで2つのファイルから重複...
-
Excelファイルの容量が異常に大...
-
excel2013で、マスターシートの...
-
エクセルのデータからフィルタ...
-
電子部品のデータシートの探し方
-
ユーザーフォームで別シートを...
-
EXCELのシートの保護機能につい...
-
エクセル マクロ "特定の日付...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
複数シートからデータを拾って...
-
excelの不要な行の削除ができな...
-
エクセルファイルのシート毎の容量
-
Excelでシートの違うデータでグ...
-
シート削除して同名シート追加...
-
Excelで日付変更ごとに、自動的...
-
VBAで CTRL+HOMEの位置へ移動...
-
【エクセルマクロ】複数シート...
-
トランジスタの選び方
-
EXCEL 複数行のデータを1行にま...
-
EXCELで2つのファイルから重複...
-
別々のシートの表をピボットテ...
-
エクセル VBA VLOOKUP
-
他のシートの一番下の行データ...
-
エクセルのカメラ機能について
-
時間帯の重複を除いた集計について
-
EXCEL の表を一行ずつシートに...
-
ファンモータが作動しない。
-
エクセルで名簿を50音で切り分ける
-
エクセル マクロ "特定の日付...
おすすめ情報