文字列操作エクセルマクロの作成をお願いします。



D列(D2~)に住所の末尾の方が入っております。
マンション名などを半角に変えてほしいのです。
【壊れ物注意】という文字列のみ削除してください。


2,ファミールマンション310
3,
4,丁目15-6パワーマンション302号山田様方【壊れ物注意】

↓(変換後)
2,ファミールマンション310
3,
4,丁目15-6パワーマンション302号山田様方


★D列に何もないことがあります。(例3行目)
その場合は飛ばして次の4行目を処理してください。D列は色続きになっています。この場合、D2:D4までは色が塗られています。
色がはじめてなくなったとき、つまり白になったときに動作をとめてほしいのです。この場合、D5は色が塗られていませんので、処理はD4までということになります。

よろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/04/05 12:26:44
  • 終了:2011/04/05 17:14:37

ベストアンサー

id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692011/04/05 14:16:13

ポイント100pt

マクロでやるなら

Sub Macro()
    Dim i As Long
    Dim str As String
    
    i = 2
    While Cells(i, "D").Interior.ColorIndex = Range("D2").Interior.ColorIndex
        str = Cells(i, "D").Value
        str = StrConv(str, vbNarrow)
        If Len(str) >= 7 Then
            If Right(str, 7) = "【壊れ物注意】" Then
                str = Left(str, Len(str) - 7)
            End If
        End If
        Cells(i, "D").Value = str
        i = i + 1
    Wend
End Sub

でも、これって数式でもほとんど同じことができるので、例えばE2に次ぎのような数式を入れて

同じ色が続くところまでコピーすればいいです。

それをD列に上書きするには形式を選択して貼付→値のみ。

=ASC(IF(LEN(D2)>=7,IF(RIGHT(D2,7)="【壊れ物注意】",LEFT(D2,LEN(D2)-7),D2),D2))
id:naranara19

いつも感謝しております。詳しいご回答ありがとうございます。式も嬉しいです。これからもどうぞよろしくお願いいたします。

2011/04/05 16:58:12

その他の回答(1件)

id:taknt No.1

きゃづみぃ回答回数13538ベストアンサー獲得回数11982011/04/05 13:10:08

ポイント30pt

全角は半角に無条件で変換しています。

Sub 変換()
Dim a As Long
    For a = 2 To Range("D2").End(xlDown).Row
       If Cells(a, "D").Font.ColorIndex = -4105 Then Exit For
       Cells(a, "D") = Replace(Cells(a, "D"), "【壊れ物注意】", "")
       Cells(a, "D") = StrConv(Cells(a, "D"), vbNarrow)
    Next a
 
End Sub
id:naranara19

ありがとうございます!完璧に動きました。短いのもいいですね。

2011/04/05 16:57:06
id:SALINGER No.2

SALINGER回答回数3454ベストアンサー獲得回数9692011/04/05 14:16:13ここでベストアンサー

ポイント100pt

マクロでやるなら

Sub Macro()
    Dim i As Long
    Dim str As String
    
    i = 2
    While Cells(i, "D").Interior.ColorIndex = Range("D2").Interior.ColorIndex
        str = Cells(i, "D").Value
        str = StrConv(str, vbNarrow)
        If Len(str) >= 7 Then
            If Right(str, 7) = "【壊れ物注意】" Then
                str = Left(str, Len(str) - 7)
            End If
        End If
        Cells(i, "D").Value = str
        i = i + 1
    Wend
End Sub

でも、これって数式でもほとんど同じことができるので、例えばE2に次ぎのような数式を入れて

同じ色が続くところまでコピーすればいいです。

それをD列に上書きするには形式を選択して貼付→値のみ。

=ASC(IF(LEN(D2)>=7,IF(RIGHT(D2,7)="【壊れ物注意】",LEFT(D2,LEN(D2)-7),D2),D2))
id:naranara19

いつも感謝しております。詳しいご回答ありがとうございます。式も嬉しいです。これからもどうぞよろしくお願いいたします。

2011/04/05 16:58:12
  • id:naranara19
    よくよく検証してみると、takntさんのご回答は短くてよいのですが、うまく変換されない行が出現することがありました。ちょっと理由は不明なのですが。

    お二人ともご回答まことにありがとうございました。
  • id:SALINGER
    Fontになってるんでセルの色じゃなくて文字色になってるせいです。
  • id:naranara19
    なるほど。私の指示がまずかったですね。SALINGERさん、いつもありがとうございます。毎度尊敬いたします。
  • id:SALINGER
    私の場合は文末に来た「【壊れ物注意】」を削除すると解釈してしまったので、
    もし途中にもある場合はtakntさんのようにReplaceにしたほうがいいですね。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません