VBAで文字の置換についての相談です。(win10 Excel2010) 図のようにA列~E列までデータが入っています。 ただし、E列はデータが入っている場合と入っていない場合がある。

画像

Visual Basic | Excel142閲覧xmlns="http://www.w3.org/2000/svg">100

ベストアンサー

2

2人がナイス!しています

>With Cells(i, 5) > .Replace what:="本", Replacement:="袋" > .Replace what:="カプセル", Replacement:="C" は Buf(i,5) = Replace(Buf(i,5),"本", "袋") Buf(i,5) = Replace(Buf(i,5),"カプセル", "C") になるのかな?

ThanksImg質問者からのお礼コメント

BUfという構文自分のレベルでは認知していないものでした。 結果は以前は5分以上かかっていたものが本当にあっという間でした。 こうも変わるものなんですね。 本当にありがとうございました。 回答して頂いた2名の方法ともに早い処理速度でした。どちらも甲乙つけがたしでしたが、こういう構文もあると知ることもできたので、ベストアンサーにさせて頂きました。

お礼日時:1/17 1:35

その他の回答(2件)

0

先ずお示しのコードですが、E列が空白でない場合の処理は無駄です。 If Cells(i,5) <> "" then Else End If は If Cells(i,5)="" Then End If で良いかと。 また、1度セルに入力した物を再度書換えるのも無駄だと思います。 セルに書き込む回数が多くなればなるほど処理速度は遅くなります。 私なら以下の様に処理対象を空白セルのみにして、セルには1回の書き込みで済ませます。 Sub 棚卸単位() Dim rng As Range Dim lastRow As Long lastRow = Cells(Rows.Count, "A").End(xlUp).Row For Each rng In Range("E3:E" & lastRow).SpecialCells(xlCellTypeBlanks) With Range("D" & rng.Row) Select Case .Value Case "本" rng.Value = "袋" Case "カプセル" rng.Value = "C" Case "瓶" Select Case Range("A" & rng.Row).Value Case "調味料" rng.Value = "V" Case "飲料" rng.Value = "本" Case Else rng.Value = .Value End Select Case Else rng.Value = .Value End Select End With Next rng End Sub

回答ありがとうございます、処理速度かなり早くなりました。 考え方ひとつでこうも変わるのですね。 とても勉強になりました しかも、そこまで難しくない構文で解決できたので、自分にもできそうな内容でとても助かります。 ありがとうございます。