
エクセル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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
エクセルVBAで、ある文字を含んでいたら別シートに抽出したい
Excel(エクセル)
-
エクセルVBAで、条件に一致するセルへ移動
Excel(エクセル)
-
【VBA】特定の文字が入っている行の一部を抽出して別シートコピーするには
Visual Basic(VBA)
-
-
4
EXCEL VBA セルに既に入力されている文字に文字を追加する
Excel(エクセル)
-
5
【VBA】特定列に文字が入っていたらそのセル行をコピーしてマスターブックの同じ行に貼り付けたい
その他(Microsoft Office)
-
6
ExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。
Visual Basic(VBA)
-
7
エクセル マクロ 範囲指定で、データの最終行・最終列を取得したい
Excel(エクセル)
-
8
VBAで特定の文字が入力されたセルを選択
Excel(エクセル)
-
9
エクセルVBAで、ある指定した文字を含む行だけを選択したいのですが、、 例えば、1〜20行目までに"12447933"
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
シート削除して同名シート追加...
-
Excelでシートの違うデータでグ...
-
EXCELで2つのファイルから重複...
-
Googleスプレッドシートフィル...
-
エクセル 縦に長い表の印刷時...
-
Excel 売上管理シートに入力し...
-
Excelで日付変更ごとに、自動的...
-
【マクロ】同じフォルダ内にあ...
-
VBAで CTRL+HOMEの位置へ移動...
-
エクセルで入試スケジュールを...
-
EXCELスクロールバーのつまみの...
-
エクセルVBAで、特定文字から始...
-
エクセルデータを人別・かつ区...
-
Excelファイルの容量が異常に大...
-
EXCEL VBA 担当者毎にファイル作成
-
他のシートの一番下の行データ...
-
Excelのマクロが3巡目でコケます
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelの不要な行の削除ができな...
-
エクセルファイルのシート毎の容量
-
複数シートからデータを拾って...
-
Excelでシートの違うデータでグ...
-
シート削除して同名シート追加...
-
Excelで日付変更ごとに、自動的...
-
エクセル 縦に長い表の印刷時...
-
VBAで CTRL+HOMEの位置へ移動...
-
EXCELで2つのファイルから重複...
-
トランジスタの選び方
-
他のシートの一番下の行データ...
-
Googleスプレッドシートフィル...
-
Excel 売上管理シートに入力し...
-
EXCEL の表を一行ずつシートに...
-
エクセルで名簿を50音で切り分ける
-
excelマクロで複数シート間のデ...
-
エクセルVBAで、特定文字から始...
-
【エクセル」 特定のセルで条件...
-
時間帯の重複を除いた集計について
-
エクセルのカメラ機能について
おすすめ情報