• ベストアンサー

EXCEL 選択文字を指定枠に記載後元の行削除

先日、EXCEL上でCX, CN, CAを含む品番があった場合、別列(隣の列)一つ上に、品番をコピー する関数式を教えて頂きました。(下記参照) =IF(OR(MID(A2,1,2)="CX",MID(A2,1,2)="CN",MID(A2,1,2)="CA"),A2,"") この式に追加で元のCX, CN, CAを含む行を削除することは出来るでしょうか? 詳しい方がおりましたら、教えて頂けないでしょうか? 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • eden3616
  • ベストアンサー率65% (267/405)
回答No.3

>A列にオーダー、コード、品番等が列挙されており、 >CX,CN,CAを含む品番(例:「CX750881」)のみを >空白になっているB列の一つ上の行にコピーし、 >元のCX,CN,CA品番を含む行全体を削除 A列をB列にもっていきます。 範囲はA1~A列の最終行までの範囲を対象とします。 値のコピーではなく、セルのコピーになります。 Sub 条件移動() Dim sw As Variant Dim word As Variant Dim i As Integer sw = Split("CX,CN,CA", ",") For i = Range("A" & Rows.Count).End(xlUp).Row To 1 Step -1 For Each word In sw If Left(Range("A" & i), 2) = word Then Range("A" & i).Copy Range("A" & i).Offset(-1, 1) Rows(i).Delete Exit For End If Next Next i End Sub

yasuhito_s1
質問者

お礼

お世話になります。 上記のマクロ(VBA)で完璧にクリア出来ました。 早速対応して頂き有難うございました。 これを機会ににマクロを勉強してみようと思います。

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率66% (1719/2589)
回答No.2

関数は値をコピーするのではなく元の値を参照するものですので、元の値を削除すると関数式のあるセルにはエラーが表示されます。 元の値が必要ではなく関数式で参照した結果だけが必要でしたら、関数式のあるセルをコピーして形式を選択して貼り付けの「値」で同じところに張り付けます。その後元の値のあるセル(行)を削除してください。

yasuhito_s1
質問者

お礼

お世話になります。 関数は削除できないことが分かり、とりあえず説明通りリストを作成することが出来ました。 有難うございました。

  • eden3616
  • ベストアンサー率65% (267/405)
回答No.1

関数により行を削除することはできません。 マクロ(VBA)で行ってください。 >別列(隣の列)一つ上に、品番をコピー 隣列の一つ上でしょうか、隣の行(一つ上の行)という意味でしょうか? 一つ上の行に切取コピーするという事で作成します。 (1)Alt+F11で「Microsoft Visual Basic」を開く (2)「挿入→標準モジュール」で標準モジュールを作成 (3)以下のVBAコードを貼付け (4)(1)で開いた「Microsoft Visual Basic」を閉じる (5)入力されているセル(質問内容の場合ですとA2セル)を選択  (A2:C2に入っていればA2:C2を範囲選択した状態にしてください) (6)「表示→マクロ」から「条件移動」のマクロを実行 '■VBAコード Sub 条件移動() Dim sw As Variant Dim word As Variant Dim i As Integer sw = Split("CX,CN,CA", ",") For i = 1 To Selection.Count If Selection(i) <> "" And Selection(1).Row > 1 Then Selection(i).Offset(-1, 0) = "" For Each word In sw If Left(Selection(i), 2) = word Then Selection(i).Cut Selection(i).Offset(-1, 0) Exit For End If Next End If Next i End Sub 関数では値だけ表示されていますので、セルの書式が変わりませんが、 このマクロでしたらセルの書式ごと切取後、貼付されます。 値のみ移動させる場合は上記コードを以下のように変更してください。 Selection(i).Cut Selection(i).Offset(-1, 0)       ↓ Selection(i).Offset(-1, 0) = Selection(i).Text Selection(i).ClearContents

yasuhito_s1
質問者

お礼

お世話になります。 早速回答有難うございます。 VBAコードも大凡見当が付けば分かるような気がしますが、私の説明が悪かったため、部分的に消えはしましたが、上手くいきませんでした。 お手数かけて申し訳ありませんが、再度教えて頂けないでしょうか? A列にオーダー、コード、品番等が列挙されており、CX,CN,CAを含む品番(例:「CX750881」)のみを空白になっているB列の一つ上の行にコピーし、元のCX,CN,CA品番を含む行全体を削除出来れば完璧です。 如何でしょうか? お手数かけて申し訳ありませんが、教えて頂けると助かります。