- 締切済み
VBA 特定文字入力による 行のカット 挿入
はじめまして、VBA初心者です。よろしくお願いします。 下記のようなデータがあります。 A B C D E F 1 発注日 納入日 名称 数量 単価 請求書C 2 1月15日 1月20日 バルブ 1 1500 C(セル色がオレンジ) 3 1月19日 1月22日 リレー 2 5200 C(セル色がオレンジ) 4 1月21日 ねじ 2 100 5 1月31日 ワッシャ 5 200 6 2月13日 砥石 1 14800 請求書CのF列セルにC文字を入力すると、 以下のイベントが起きるようにしたいです。 1.C入力セルの色がピンク色に変わる 2.C入力セルの行をカットする 3.対象行以上の上段行でC文字が入力されている行の下に挿入する 例えば、F5にC入力すると下記になるようにしたいです。 A B C D E F 1 発注日 納入日 名称 数量 単価 請求書C 2 1月15日 1月20日 バルブ 1 1500 C(セル色がオレンジ) 3 1月19日 1月22日 リレー 2 5200 C(セル色がオレンジ) 4 1月31日 2月10日 ワッシャ 5 200 C(セル色がオレンジ) 5 1月21日 ねじ 2 100 6 2月13日 砥石 1 14800 当方でも、下記までコード作成し、エラー無く動くのですが、 Cが既に入ってる上段行の下の行に入力すると (上記F5セルにCを入力すると)1行目にカット行が挿入されてしまいます。 Private Sub Worksheet_Change(ByVal Target As Range) With Target If .Row < 4 Then Exit Sub If .Column <> 10 Then Exit Sub If .Value <> "" Then .EntireRow.Cut .Offset(0, 0).Activate .End(xlUp).Offset(1).Activate .EntireRow.Insert Shift:=xlDown End If End With End Sub また、F列セルのC文字をDELETEするとエラーがでます(例えば、F2:F4セル選択で削除)。 他に上記コードでエラーになりうる可能性がありますでしょうか? 大変申し訳ありませんが、 みなさんのご教授を頂きたく、よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- xls88
- ベストアンサー率56% (669/1189)
紛らわしい書き方でした。 End With を省略して書いただけです。 With Target If .Row < 4 Then Exit Sub If .Column <> 6 Then Exit Sub If .Count <> 1 Then Exit Sub If .Offset(-1).Value <> "" Then Exit Sub If .Value <> "" Then Call 行CutInマクロ End If End With Target.Count <> 1 Then Exit Sub の、意味ということでしたら ブレークポイントを設けて、 複数セルを選択削除 と単独セルの削除 といった操作を確認してください。 ブレークポイントとローカルウィンドウ http://www.kkkxcec.com/supportwlog/archives/2005/07/post_7.html >なお、このコードを複数の同じ条件のシートに使用しようと思っています。 未検証ですが、ThisWorkbook の、SheetChangeイベントを使えばよいかもしれません。 Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
- xls88
- ベストアンサー率56% (669/1189)
試した結果ですが、 EntireRow.Insert Shift:=xlDown の行でエラーが発生 If .Value <> "" Then .EntireRow.Cut .End(xlUp).Offset(1).EntireRow.Insert Shift:=xlDown End If と、いうようにすると通りました。 >Cが既に入ってる上段行の下の行に入力すると >(上記F5セルにCを入力すると)1行目にカット行が挿入されてしまいます。 一例 With Target If .Offset(-1).Value <> "" Then Exit Sub >また、F列セルのC文字をDELETEするとエラーがでます >(例えば、F2:F4セル選択で削除)。 一例 With Target If .Count <> 1 Then Exit Sub
補足
早速のご回答ありがとうございます。 上記でうまく動きました。 下記質問あります。すいません初歩的ですが。。 >また、F列セルのC文字をDELETEするとエラーがでます >(例えば、F2:F4セル選択で削除)。 一例 With Target If .Count <> 1 Then Exit Sub ですが、 このコードの意味することはどういうことですか? なお、このコードを複数の同じ条件のシートに使用しようと思っています。 ですが、対象のワークシートがたくさんあります。 各シートに同じコードを貼り付けていくのは面倒ですし、 サイズも大きくなります。 一つのコードで、複数のワークシートを制御するやり方は無いでしょうか? よろしくお願いします。