エクセルvbaで特定の文字から次の空白行まで貼り付けるという指定方法をご教示ください。
VBA
1Sub Macro1() 2Dim myStr As String 3 Dim findStr As String 4 Dim findNo As Integer 5 myStr = Range("F3") 6 findStr = "1. File List:" 7 findNo = InStr(myStr, findStr) 8 Range("G3") = Right(myStr, Len(myStr) - findNo) 9End Sub
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/07 13:48
回答2件
0
ベストアンサー
以下のようにしてください。
標準モジュールに登録してください。
VBA
1'F列の文章から目的の文字列を取り出し、G列へ設定 2Public Sub 抽出() 3 Dim maxrow As Long 4 Dim wrow As Long 5 maxrow = Cells(Rows.Count, "F").End(xlUp).Row '最終行を求める 6 7 For wrow = 3 To maxrow 8 Cells(wrow, "G").Value = MyGetText(Cells(wrow, "F").Value) 9 Next 10 11End Sub 12'文章から検索ワード1,2の文字列を含む行を取得する 13Public Function MyGetText(ByVal str As String) As String 14 Const kw1 As String = "1.File List:" '検索ワード1 15 Const kw2 As String = "Product No. :" '検索ワード2 16 Dim arr As Variant 17 Dim wstr As String 18 Dim find As Boolean 19 Dim RegExp As Object 20 Dim i As Long 21 Set RegExp = CreateObject("VBScript.RegExp") 22 RegExp.Pattern = "^[\s ]*$" '半角空白及び全角空白だけからなる行 23 MyGetText = "" 24 wstr = Replace(str, vbCrLf, vbLf) '改行がvbCrLfの場合の保険 25 arr = Split(wstr, vbLf, -1, 0) 26 If UBound(arr) < 1 Then Exit Function 27 find = False 28 For i = 0 To UBound(arr) 29 If find = False Then 30 If Left(arr(i), Len(kw1)) = kw1 Or Left(arr(i), Len(kw2)) = kw2 Then 31 find = True 32 MyGetText = arr(i) & vbLf 33 End If 34 Else 35 If RegExp.test(arr(i)) = True Then 36 Exit For 37 End If 38 MyGetText = MyGetText & arr(i) & vbLf 39 End If 40 Next 41End Function 42
投稿2020/12/07 23:53
総合スコア5493
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/08 12:22
2020/12/08 12:24
2020/12/09 13:02
2020/12/09 13:27 編集
2020/12/09 15:02
0
とりあえず、
text
11.File List: 2BBBBBBBBBBB V1.0 3CCCCCCCCCCCCCCCCCCCCCCCCCC
の部分を取り出すコード例
vba
1 Dim myStr As String, FindStr As String 2 myStr = Range("F3").Text 3 FindStr = "1. File List:" 4 5 Range("G3").Value = FindStr & Split(Split(myStr, FindStr)(1), vbLf & vbLf)(0)
エクセルのセル内の改行は vbLf
追記
上記のコードを踏まえて、汎用関数にすると、
コード1
vba
1Public Function ExtractText(myStr As String, FindStr As String) As String 2 Dim ary 3 ary = Split(myStr, FindStr) 4 If UBound(ary) > 0 Then 5 ExtractText = FindStr & Split(Split(myStr, FindStr)(1), vbLf & vbLf)(0) 6 End If 7End Function
これを使って、F列を最後まで、処理するには、ループを使うことになります。
いろいろありますが、For Each を使うと簡潔に記述できます。
コード2
vba
1Public Sub Proc1() 2 Dim Rng As Range, res As String 3 For Each Rng In Range("F3", Range("F2").End(xlDown)) 4 res = ExtractText(Rng.Text, "1.File List:") 5 If res = "" Then 6 res = ExtractText(Rng.Text, "Product No. :") 7 End If 8 Rng.Offset(, 1).Value = res 9 Next 10End Sub
説明補足
上記のコード1、コード2をコピーして標準モジュールに貼り付けて、Proc1
を実行してください。
投稿2020/12/07 10:22
編集2020/12/08 00:42総合スコア34073
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/07 12:47
2020/12/07 12:52
2020/12/07 13:47
2020/12/08 00:37
2020/12/08 12:30
2020/12/08 12:39
2020/12/09 13:03
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。