いまいち様式がはっきりしません。
この手の質問ではデータの入力様式が明確にわかるように参照画像があればよいのですが。
行いたいことと異なっていればすいません。
ご提示のコードを一部読んで(全部読んでません)適当に解釈しました。
結果をどうするのかわからなかったのでとりあえず別セルに書き出しています。
(画像でいうところのC列となります)
A列に複数行「番号:○○名前:○○趣味:○○」という様式で入っているデータがあり
指定した箇所を削除したいと解釈しています。
削除する方法ではなく、指定した部分を取り出す方法に勝手に変えてますが。
「action」マクロ実行後、入力ボックスが表示され範囲指定を促されます。
取り出したい範囲を「1~3」の数値で指定してください。
「1-2」、「1-3」や「-3」、「1-」のような範囲指定も可能です。
注)
エラー処理は入れていません。
対象シートは現在アクティブになっているシートを対象にしています。
■VBAコード
Sub action()
Dim word As String
Dim inp As String
Dim chk_inp As Variant
Dim i As Long, j As Integer
Dim key As Variant
Dim ans(2) As String
Dim a As Integer, b As Integer
Dim ans_word(2) As Variant
'分割キーの設定
key = Array("番号", "名前", "趣味")
'範囲入力
inp = InputBox( _
prompt:=key(0) & "=1 / " & key(1) & "=2 / " & key(2) & "=3" & vbCrLf & _
"として範囲を以下の様式で指定してください。" & vbCrLf & vbCrLf & _
" n:n番の項目のみ取り出す場合" & vbCrLf & _
"n-m:nからm番の項目を取り出す場合" & vbCrLf & _
" -n:n番までの項目を取り出す場合" & vbCrLf & _
" n-:n番からの項目を取り出す場合" & vbCrLf _
, Title:="範囲指定")
If inp = "" Then Exit Sub
chk_inp = Split(inp, "-")
'行数繰り返し処理
For i = 1 To Range("A" & Rows.Count).End(xlUp).Row
'値を格納
word = Range("A" & i).Value
'値を配列に分割
'キーで検索
a = InStr(1, word, key(1))
b = InStr(1, word, key(2))
'分割値を格納
ans_word(0) = Left(word, a - 1) '番号を格納
ans_word(1) = Mid(word, a, b - a) '名前を格納
ans_word(2) = Right(word, Len(word) - b + 1) '趣味を格納
word = ""
'単発かどうかの判定
If UBound(chk_inp) = 0 Then
'単発抜出の場合
word = ans_word(Int(chk_inp(0)) - 1)
Else
'範囲抜出の場合
If chk_inp(0) <> "" And chk_inp(1) <> "" Then
'「n-m」を指定した場合
For j = Int(chk_inp(0)) To Int(chk_inp(1))
word = word & ans_word(j - 1)
Next j
Else
'「-n」を指定した場合
If chk_inp(0) = "" Then
For j = 1 To Int(chk_inp(1))
word = word & ans_word(j - 1)
Next j
End If
'「n-」を指定した場合
If chk_inp(1) = "" Then
For j = Int(chk_inp(0)) To 3
word = word & ans_word(j - 1)
Next j
End If
End If
End If
'結果出力
Range("C" & i).Value = word
Next i
End Sub
お礼
回答頂きありがとうございます。 >この手の質問ではデータの入力様式が明確にわかるように参照画像があればよいのですが。 以後、気をつけていきます!ご指摘ありがとうございます! また、教えて頂いたプログラム、 やりたいことが思ったとおりに出来ました! ありがとうございます^^