A2セルの値が「100021_りんご01青森県」からInStrで「りんご」を抽出したい。
セルの値が「100021_りんご01青森県」のような並びで「_」より右「01」より左の「りんご」を切り出したい。
下記コードで「_」より右は切り出せますがこのコードを代えて切り出すことは可能でしょうか?ご指南のほどよろしくお願いいたします。
・・・・・・・・・・・・・・
Dim N As Long
Set cel = wbk.Worksheets("Sheet3").Cells(2, 1)
N = InStr(cel, "_")
cel.Offset(-1, 1) = Mid(cel, N + 1)
No.5
- 回答日時:
InStr を使った方法だと。
1.InStr はパターンマッチができない
2.01の部分が可変(数字ではある?)
の条件下だとアンダーバー以降を1文字毎にチェックすることになります。
速攻で書いたので冗長かもしれませんが、こんな感じ。
Sub sampleProc1()
Dim word As String
Dim pos_start As Long
Dim pos_end As Long
word = "100021_りんご01青森県"
'アンダーバーの位置検索
pos_start = InStr(1, word, "_")
'見つからない--> アンマッチ
If pos_start > 0 Then
'アンダーバーの1文字後が抜き出し位置
pos_start = pos_start + 1
'上記位置から1文字ずつ数字かチェックする
'LIKE演算子が使える
Dim i As Long
For i = pos_start To Len(word)
If Mid$(word, i, 1) Like "[0-9]" Then
'数字が見つかったらループを抜ける
pos_end = i
Exit For
End If
Next
End If
If pos_start > 0 And pos_end > 0 Then
'抜き出し
MsgBox Mid$(word, pos_start, pos_end - pos_start)
Else
MsgBox "一致しません"
End If
End Sub
No.4
- 回答日時:
ちょっと遅かったですかね。
質問文の内容しか記載してませんけど。
Sub test()
Dim MyReg As Object
Dim cel As Range
Set cel = Worksheets("Sheet3").Cells(2, 1) 'テスト用にBookは切り離し
Set MyReg = CreateObject("VBScript.RegExp")
MyReg.Pattern = "_(\D+?)\d"
If MyReg.test(cel.Value) Then MsgBox MyReg.Execute(cel.Value)(0).SubMatches(0)
Set MyReg = Nothing
Set cel = Nothing
End Sub
No.3
- 回答日時:
こんにちは。
本末転倒かもしれませんが、正規表現使った方が早いし柔軟かなぁ。
RegExp VBA で検索してみて。
Sub sampleProc()
Dim reg As Object 'RegExp
Set reg = CreateObject("VBScript.RegExp")
With reg
.Global = False
.IgnoreCase = False
.Pattern = "(^\d+_)(\D+)(\d+)(.+$)" '<--正規表現パターン
End With
Dim mc As Object 'MatchCollection
Set mc = reg.Execute("100021_りんご01青森県")
If mc.Count > 0 Then
MsgBox mc(0).SubMatches(0) '1番目()にマッチ 100021_
MsgBox mc(0).SubMatches(1) '2番目()にマッチ りんご
MsgBox mc(0).SubMatches(2) '3番目()にマッチ 01
MsgBox mc(0).SubMatches(3) '4番目()にマッチ 青森県
Else
MsgBox "一致しません"
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) サブフォルダ(データ)にある複数の.xlsxファイルのSheet3のA2セルの値で01から左側をB2 2 2022/08/14 15:46
- Visual Basic(VBA) Sheet1をフィルターで「りんご」を抽出し、Sheet2へ地域を貼り付ける下記マクロを変更して S 2 2022/12/11 03:01
- Excel(エクセル) excel2013 色付きセルの値合計 3 2023/02/28 11:48
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- Visual Basic(VBA) Excel VBA マクロ ある列の最終行迄を参照し、別の列の空白セルに値を入力したいです 2 2023/03/05 02:44
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 09:25
- Visual Basic(VBA) ExcelのVBAコードについて教えてください。 1 2023/02/02 13:13
- Visual Basic(VBA) エクセル VBA メール本文に指定セルに記載されているURLをリンクとして記載する方法 8 2022/08/08 07:50
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/15 15:12
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
VBAでユーザーフォームにセル値...
-
EXCEL VBA 文中の書式ごと複写...
-
エクセルVBA 配列からセルに「...
-
C# DataGridViewで複数選択した...
-
【VBA】【ユーザーフォーム_Lis...
-
Excel 範囲指定スクショについ...
-
Excel VBAでCheckboxの名前を変...
-
DataGridViewでグリッド内に線...
-
VBAコードについて教えてくださ...
-
Excelで空白セル直前のセルデー...
-
【VBA】写真の貼り付けコードが...
-
【Excel VBA】一番右端セルまで...
-
Excel UserForm の表示位置
-
グラフの参照元を相対参照で記...
-
Excel VBA 同じ処理を複数回行...
-
【Excel VBA】マクロで書き込ん...
-
DataGridViewで指定したセルの...
-
[Excel VBA] このコードでは行...
-
「Spread」のセルを移動させる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAマクロ実行時エラーの修正に...
-
エクセルVBA 配列からセルに「...
-
Excel UserForm の表示位置
-
Excelで空白セル直前のセルデー...
-
【Excel VBA】一番右端セルまで...
-
EXCEL VBA 文中の書式ごと複写...
-
VBA にて、条件付き書式で背景...
-
特定の色のついたセルを削除
-
【VBA】【ユーザーフォーム_Lis...
-
VBA 複数条件の分岐処理の上手...
-
入力規則のリスト選択
-
【VBA】写真の貼り付けコードが...
-
Excel VBA IF文がうまく動作し...
-
VBAでユーザーフォームにセル値...
-
VBA:日付を配列に入れ別セルに...
-
Excel VBAでCheckboxの名前を変...
-
エクセルの合計を自動で表示さ...
-
関数の引数でrangeを指定したとき
-
複数指定セルの可視セルのみを...
-
DataGridViewでグリッド内に線...
おすすめ情報
Dim cel as Range が抜けてました