[[20220114202007]] 『別シートへ転記した列の値を削除したい』(VBA勉強中) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『別シートへ転記した列の値を削除したい』(VBA勉強中)

 以下のような表があるとします。

 A行のセルをダブルクリックするとユーザーフォームが開き、
 各テキストボックスにダブルクリックした列のB〜Dの値が入るように
 しています。

 2列目のB〜Dまでの値をsheet2に転記した後、sheet1のB〜Dの値を削除したい 
 のですが、うまくいきません。

 どのようにしたらよろしいでしょうか。

    A     B        C       D

 1  1    1/14   \1,000     ○

 2  2   2/1    \2,000     ×

 3  3

 自分で作成してみたコード

 Private Sub CommandButton1_Click()
  Sheet2.Select

   Dim lastrow As Long
    lastrow = Range("B" & Rows.Count).End(xlUp).Offset(1).row

     Range("B" & lastrow).Value = TextBox1.Value
     Range("C" & lastrow).Value = TextBox2.Value
     Range("D" & lastrow).Value = TextBox3.Value

  with sheet1
   range("B" & activecellrow).Clear   'Empty値になってしまいます。
   range("C" & activecellrow).Clear
   range("D" & activecellroe).Clear
  End With

 End sub

 分かりづらいかと思いますが、よろしくお願いいたします。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


>range("B" & activecellrow).Clear 'Empty値になってしまいます。

内容を消しているからそうなりますね。

>値を削除したい

値の削除って?

(不負) 2022/01/14(金) 20:59


 回答者のγことガンマです。

    With Sheet1
         .Select
         .Range("B" & ActiveCell.Row).Clear  
         .Range("C" & ActiveCell.Row).Clear
         .Range("D" & ActiveCell.Row).Clear
     End With
 というようなことではないですか?

 老婆心ながら、ご忠告です。
 (1)行と列の使い方が普通の使い方と逆です。 
    皆さんに合わせたほうがハッピイかと思います。
 (2)投稿にあたっては、VBEからそのままコピーペイストすることを推奨します。
    投稿上のタイプミスと、本来のミスの見分けがつきません。
    あ、その件は実はきちんとやっています、
    などというやり取りは双方にとって無駄になります。
 (3)ClearよりもClearContentsのほうがよいかもしれません。差異を調べてみてください。

(γ) 2022/01/14(金) 21:00


スマホでポチポチ打っていたら、みなさんと被ってしまいましたが、投稿しておきます。

◼️1
VBAの世界では基本的にシートやセルなど(オブジェクトといいます)を明示すれば、いちいちアクティブにしたり選択したりする必要はありません。
また、標準モジュールやユーザーフォームモジュールで、シートの指定を省力するとActivesheetを指定したとみなされるルールです。

従って、意図しないシートの処理とならないように、対象シートはきちんと明示するようにしたほうがよいです。

 ついでに言うと、withステートメントを使っても「.」を忘れたら意味がありませんよ。

◼️2
提示のコードについて、「activecellrow」はどこで定義して、どこで取得しているのでしょうか?
いくつか小文字になっている部分があるので手打ちしたのだとおもいますが、つまらないタイプミスで時間をかけてもしょうがないので、極力VBEからそのままコピペされたほうがよいとおもいます。

◼️3
>Empty値になってしまいます
↑の意味がよくわからないです。
本当はどのようになって欲しかったのですか?

(もこな2 ) 2022/01/14(金) 21:05


 回答者のγことガンマです。

 考えてみたら、SelectしてActiveCellに依存するようなことはせずに、
 データを取得して、Textboxに取り込んだ段階で、
 なんらかの変数にそのデータのある行番号を保持しておくほうがよいでしょう。

 標準モジュールに 
 Public myRow as Long
 などと宣言しておいて、それに取得したデータのある行番号を保持したらどうですか?

(γ) 2022/01/14(金) 21:18


ご回答いただきありがとうございます。

まだまだ勉強不足で、申し訳ございません。
いただいた内容で試したところ、うまくいきました。

ありがとうございます。
(VBA勉強中) 2022/01/14(金) 22:09


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.