前提・実現したいこと
EXCELシートの右側に、ランダムに並んだ文字列があります。
文字列の構造は[文字(値)]という構造です。
上記の文字列から、各行ごとに指定の文字列が含まれるセルを検索し、そのセルの値部分のみをどんどん書き出していきたいです。
指定の文字列が含まれるセルが存在しない場合は、エラー値または空白などが入る想定ですが「ない」ことさえわかれば何でもOkです…!
発生している問題・エラーメッセージ
WorksheetFunction.MATCHのエラーをうまく回避できず、進めません。。。
エラーではない値は、7周目(i=8)で初めて発生します。そこまで全てエラー値です。
該当のソースコード
VBA
1Dim 検索値 As String, i As Long, c As Long, MatchC As Variant, MatchR As Range 2 3c = ActiveCell.Column 4検索値 = Cells(1, c).Value 5For i = 2 To 200000 6 7 On Error Resume Next 8 MatchC = WorksheetFunction.MATCH(検索値, Range(Cells(i, c), Cells(i, "LHL")), 0) + c 9 If MatchC = 0 Then 10 Set Cells(i, MatchC) = "" 11 GoTo nexti 12 13 ElseIf Cells(i, 1).Value = "" Then Exit Sub 14 15 Else: 16 Set MatchR = Cells(i, MatchC) 17 Cells(i, c) = Mid(MatchR, InStr(MatchR, "(") + 1, InStr(MatchR, ")") - InStr(MatchR, "(") - 1) 18End If 19nexti: MatchC = "" 20Next i 21End Sub 22
試したこと
[On error Goto nexti]だと、2周めで「worksheetfunctionのmatchファンクションを取得できません」と出てしまいます。
[IsError(MatchC) then Goto nexti]だと、1周もしません。。
[Application.MATCH]も同上です。
[On Error Resume Next]で回避して、[If MatchC = 0 Then]で判定する手段もためしましたが、
[On Error Resume Next]の前に[MatchC=0]をいれるとずっと0のままで、
入れないと7周目以降も、7周目時点で代入された値を引き継いでしまいます。
補足情報(FW/ツールのバージョンなど)
EXCEL2016です。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/24 09:44