- ベストアンサー
備考欄の数字の効率的な削除方法
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.3の追加です。 マクロを実行する前にブックのコピーはとっておいてください。 また、データが しょうゆ ラーメン 100杯 → 200杯 のように商品名の間にスペースや→の前後にスペースがあった場合、No.3だと誤動作しますので以下のコードで実行してください。 一度で削除できなかった場合は、再度実行すると右から順に削除されていきます。 ただし、左側の「100杯」で「100 杯」のように数値と杯の間にスペースがあると100は残ります。 Sub Test() Dim bool As Boolean Dim mRng As Range, num As Long, i As Long Dim tmp As Variant, buf As Variant With Sheets("Sheet1") 'F8からF列のデータのある一番下の行までが対象 For Each mRng In .Range(.Cells(8, "F"), .Cells(Rows.Count, "F").End(xlUp)) buf = "" tmp = Split(mRng, vbLf) For i = 0 To UBound(tmp) num = InStrRev(StrConv(tmp(i), vbNarrow), " ") If InStr(tmp(i), "杯") > 0 Then 'セル内の各行に杯が含まれていれば右端の半角(全角)スペースから最後までを削除 buf = buf & Trim(WorksheetFunction.Replace(tmp(i), num + 1, Len(tmp(i)) - num, "")) & vbLf Else buf = buf & tmp(i) & vbLf End If Next If buf <> "" Then mRng.Value = Left(buf, Len(buf) - 1) End If Next End With End Sub
その他の回答 (3)
- kkkkkm
- ベストアンサー率66% (1721/2591)
F列8行目以降のそれぞれのセルで 100杯→200杯 などとなっている部分を削除すればいいのだとしたら マクロ(VBA)でよろしければ 実行の方法は以下のサイト Excel VBA 入門講座 Visual Basic Editorの起動Visual Basic Editorの起動 https://excelvba.pc-users.net/fol1/1_1.html と次ページの コードの入力と実行コードの入力と実行 https://excelvba.pc-users.net/fol1/1_2.html を参考にして、以下のマクロ(VBA)を実行してください。 Sub Test() Dim bool As Boolean Dim mRng As Range With Sheets("Sheet1") 'Sheet1は実際のシート名に変更してください 'F8からF列のデータのある一番下の行までが対象 質問の画像の場合だと10行まで For Each mRng In .Range(.Cells(8, "F"), .Cells(Rows.Count, "F").End(xlUp)) '→と杯に挟まれた部分を削除 bool = mRng.Replace("→*杯", "", LookAt:=xlPart, MatchByte:=False) '半角(全角)スペースと杯に挟まれた部分を削除 bool = mRng.Replace(" *杯", "", LookAt:=xlPart, MatchByte:=False) '半角(全角)スペースを削除 bool = mRng.Replace(" ", "", LookAt:=xlPart, MatchByte:=False) Next End With End Sub
- imogasi
- ベストアンサー率27% (4737/17069)
こういうデータの持ち方は、モダンExcelでは禁じ手のようです。 また手操作の置換でやろうとしても、「何杯→何杯」の部分を掴むのは難しい。 正規表現の達者なら、あるいは可能かと想像するが。 元データのF列の改行は、セル内改行CHR(10)を使っているとした。 ーー 質問者は、VBAもできないのかも、しれないので無駄かもしれないが、個人的な興味でやってみた。 余りこういう文字単位の加工は、プロなどは、やらないでしょう。 ーー 質問例と違うが、質問のデータ列をB列にし、変換後データをC列に出す。 例データ B1:B3 3セル (注) 下記は 1セルデータが、”と"でくくられているが、セルをコピー貼り付けしたもので、”と”は、シート上で見えるものではない "しょうゆラーメン 100杯→200杯 しおラーメン 50杯→50杯 味噌ラーメン 100杯→100杯" "しょうゆラーメン 200杯→100杯 しおラーメン 50杯→50杯" "しょうゆラーメン 100杯→200杯 しおラーメン 100杯→50杯 味噌ラーメン 100杯→50杯" ーーーー 標準モジュールに Sub test01() Dim y, z As Variant For i = 1 To 3 x = Cells(i, "B") y = Split(x, Chr(10)) ss = "" For k = 0 To UBound(y) MsgBox y(k) '---- s = y(k) z = Split(s, " ") For l = 0 To UBound(z) MsgBox z(l) p = InStr(z(l), "杯") If z(l) <> "" And p = 0 Then ss = ss & z(l) & Chr(10) End If Next l Next k Cells(i, "c") = ss Next i End Sub ーーーーー 結果 C1:C3 "しょうゆラーメン しおラーメン 味噌ラーメン " "しょうゆラーメン しおラーメン " "しょうゆラーメン しおラーメン 味噌ラーメン " セルの空白部分が何文字の半角空白か、全角の空白か、小生には、見た目では、判らない。その点の認識相違で上記はうまく行かない恐れはある。
- msMike
- ベストアンサー率20% (364/1804)