VBAで文字の置換についての相談です。(win10 Excel2010) 図のようにA列~E列までデータが入っています。 ただし、E列はデータが入っている場合と入っていない場合がある。
VBAで文字の置換についての相談です。(win10 Excel2010) 図のようにA列~E列までデータが入っています。 ただし、E列はデータが入っている場合と入っていない場合がある。 E列はマクロや手動で入れたりで最終的には全て埋まることが前提 データ数:2000~3000 Sub 棚卸単位() Dim i As Long LastRow = Cells(Rows.count, 1).End(xlUp).Row For i = 3 To LastRow If Cells(i, 5) <> "" Then Cells(i, 5) = Cells(i, 5) ……E列が空欄でない場合はそのまま Else Cells(i, 5) = Cells(i, 4)……E列空欄の場合はD列のの単位がはいるように With Cells(i, 5) .Replace what:="本", Replacement:="袋" .Replace what:="カプセル", Replacement:="C" 『ここでE列の単位が、D列から同じ値が入ったら上記のように 本 → 袋と置き換えます。置き換えたものがE列の第2単位となります。』 End With 『次にD列の単位が同じ"瓶”でも系統が違う場合はE列の第2単位が別の表示にするため下記のようにしました。』 If Cells(i, 1) = "調味料" And Cells(i, 4) = "瓶" Then Cells(i, 5) = Replace(Cells(i, 4), "瓶", "V") End If If Cells(i, 1) = "飲料" And Cells(i, 4) = "瓶" Then Cells(i, 5) = Replace(Cells(i, 4), "瓶", "本") End If End If Next i End Sub 一応上記で動くには動いたのですが、処理があまりにも時間がかかってしまうため、代替え案を考えたのですが、イマイチいい案がでなかったため、処理速度をあげるため代案を教えて頂きたいです。 よろしくお願いいたします。
Visual Basic | Excel・142閲覧・100
ベストアンサー
無駄な処理を行わない.... などの些細な改造してもたいして処理時間は変わりませんよ。 セルデータを配列に取り込んで処理するという 究極の(基本中の基本の)高速化対策を行えば劇的に速くなりますよ。 Sub 棚卸単位() --- ★ 修正内容1 Start★ --- For i = 3 To LastRow を Dim Buf As Variant Buf = range("A1:E" & LasrRow) For i = 3 To LastRow に変更 --- ★ 修正内容1 End★ --- --- ★ 修正内容2 Start★ --- Cells(i, を Buf(i, に全置換 --- ★ 修正内容2 End★ --- --- ★ 修正内容3 Start★ --- Next i の次に Range("A1:E" & LasrRow) = Buf を追加 --- ★ 修正内容3 End★ --- End Sub
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") になるのかな?
質問者からのお礼コメント
BUfという構文自分のレベルでは認知していないものでした。 結果は以前は5分以上かかっていたものが本当にあっという間でした。 こうも変わるものなんですね。 本当にありがとうございました。 回答して頂いた2名の方法ともに早い処理速度でした。どちらも甲乙つけがたしでしたが、こういう構文もあると知ることもできたので、ベストアンサーにさせて頂きました。
お礼日時:1/17 1:35