Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


9978 / 13644 ツリー ←次へ | 前へ→

【24452】文字列置換について ひなこ 05/4/22(金) 14:07 質問[未読]
【24468】Re:文字列置換について ウッシ 05/4/22(金) 15:15 回答[未読]

【24452】文字列置換について
質問  ひなこ  - 05/4/22(金) 14:07 -

引用なし
パスワード
   いつもお世話になってます。
早速質問ですが、
C列(C1〜C58000)にデータ(半角)が入っています。
入力されているデータは2種類あって、
1つ目は先頭2文字で判断して対応した文字に置換、
もう一方は、記号の後の2文字で対応した文字に置換
したいのですが、うまくできません。

具体的に説明しますと、
1種類目
 ・a_〜(〜以降はムシしていい。)
 ・b_〜
 ・1000
 ・2000
  …etc
2種類目
 ・xxx[a_〜]
 ・xxx[b_〜]
 ・xxx[1000]
 ・xxx[2000]
  …etc

「a_」を 「優良」
「b_」を 「普通」
数字 を 「待機」

と置換したいのです。

普通に置換にかけると先頭2文字以降にも引っかかってしまいました。
例「o_plka_aa」 → 「優良」となってしまった。

説明が下手ですみません…。

【24468】Re:文字列置換について
回答  ウッシ  - 05/4/22(金) 15:15 -

引用なし
パスワード
   こんにちは

何をどう置換するのか良く分からないので数例でも実際の元文字列と処理後の文字列
の対比表みたいなものを記載してもらえるといいのですが。

Sub test()
  Dim v As Variant
  Dim i As Long
  With Range("C1", Range("C65536").End(xlUp))
    v = .Value
    With WorksheetFunction
      For i = 1 To UBound(v, 1)
        Select Case True
          Case Left(v(i, 1), 2) = "a_"
            v(i, 1) = "優良" & Mid(v(i, 1), 3)
          Case Left(v(i, 1), 2) = "b_"
            v(i, 1) = "普通" & Mid(v(i, 1), 3)
          Case InStr(2, v(i, 1), "[a_") > 1
            v(i, 1) = .Substitute(v(i, 1), "a_", "優良")
          Case InStr(2, v(i, 1), "[b_") > 1
            v(i, 1) = .Substitute(v(i, 1), "b_", "普通")
          Case .IsNumber(v(i, 1))
            v(i, 1) = "待機"
          Case Else
            If InStr(1, v(i, 1), "[") > 1 Then
              v(i, 1) = _
                Left(v(i, 1), _
                  InStr(1, v(i, 1), "[")) & "待機]"
            End If
        End Select
      Next
    End With
    .Value = v
  End With
End Sub

置換処理パターンが合っていれば、正規表現を使ったコードに変更した方がいいかも
知れませんけど。

9978 / 13644 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free