[[20160330121416]] 『テーブルの内容をマクロで消去』(みつ) ページの最後に飛ぶ

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

 

『テーブルの内容をマクロで消去』(みつ)

以下のようなシートとバラの2つの項目があるテーブルをつくりました。ボタン一つでテーブルの金額部分をすべて消去するプログラムを教えてください。

シート   バラ
5,000   600
600 200
600 1000
500 200
400 600
200 1200

よろしくお願いします。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 レイアウトがさっぱり分かりません。
 金額はどこに入力されていますか?

 こちらのプログラムで、
[[20110209184943]] 『[談]シートレイアウトの投稿どうしてますか?』(momo)

 1)現状のシートレイアウトと
 2)求める形のシートレイアウト
 の2種類提示頂けますか?
(稲葉) 2016/03/30(水) 12:42

稲葉様、すいません。レイアウトが崩れてました。

[[20110209184943]] 『[談]シートレイアウトの投稿どうしてますか?』の使い方が分かりません。

切手の額面を計算するのに使うテーブルです。

1)金額はシート、バラの項目の下に金額を記載していっております。
2)求めて形のレイアウトはシート、バラの金額をすべて空欄にすることです。

(みつ) 2016/03/30(水) 13:05


 使い方がわからないのに、プログラムを教えてくださいっておかしくないですか?
 少しは自分で見てみたけど、それらしいものが見つからなかったとか。
 少なくとも、コードを実行する力が無いのなら、なに教えても意味ありません。

http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_tejyun.html

 検索すればすぐ出てきますので、少しは自分で努力する姿勢を見せてください。

 本題のほうですが、現状の説明ですと全範囲を選択してDelキー押してくださいとしか言えません。
 項目名も2つだけなら、全部消してから入力し直しせば良いのでは?
(稲葉) 2016/03/30(水) 13:58

そこは分かっております。

自分で試してみたプログラムです。
これを実行するとテーブルの値だけではなく行すべて消去になり、消去するのにかなり遅くなってしましました。

Private Sub ボタン1_Click( )
 
Dim i As Long

 With ActiveSheet.ListObjects(1).ListRows

  For i = .Count To 1 Step -1
   .Item(i).Delete
  Next i

 End With

End Sub
(みつ) 2016/03/30(水) 14:15


 だったらどうして使い方が分からないのですか?

 しかも提示されたコードはListObjectでテーブルではないですよね?
 テーブルとはなにを指していますか?

 一般的にエクセルでテーブルと言えば、1行1データベースを指すか
http://allabout.co.jp/gm/gc/373733/
 こちらのように、テーブル機能を指すと思われます。

 こっちの理解力が乏しいためなにがしたいのかわかりません。
(稲葉) 2016/03/30(水) 14:22

For i = .Count To 2 Step -1

(mm) 2016/03/30(水) 14:37


mm様コメントありがとうございます。

稲葉様、
1)しかも提示されたコードはListObjectでテーブルではないですよね?

はい、テーブルではないです。テーブルの内容を消去するプログラムが分からない為ご質問させていただきました。テーブルの機能は存じております。

稲葉様に教えてもらった事は何1つありませんが、お付き合いありがとうございます。
自分で調べてみた方が速そうです。

質問に対しての理解力がない、もしくは理解はしてるけど回答するスキルがないか分かりませんね。

(みつ) 2016/03/30(水) 15:00


 一々嫌味言うためにレス要らないです。
(稲葉) 2016/03/30(水) 15:11

 Excel2003ではリストと呼ばれていて、2007以降ではテーブルとして機能Upされており、
 VBAでのオブジェクト名はListObjectの様です。

 テーブルサイズはそのままで、タイトルや集計行を除いた値のみ消去するなら

 Range(Sheets("Sheet1").ListObjects(1).Name).ClearContents

   とか

 Sheets("Sheet1").ListObjects(1).DataBodyRange.ClearContents

 データの3行目だけなら

 Sheets("Sheet1").ListObjects(1).DataBodyRange.Rows(3).ClearContents

 その他、ListObjectのRangeプロパティを使うと、通常のセルと同様に扱えます。

 With Sheets("Sheet1").ListObjects(1).Range
    MsgBox .Cells(2, 2).Value
 End With

(きまぐれ) 2016/03/30(水) 16:26


きまぐれ様、やはりListObjectだったのですね。
プログラムまで見やすくありがとうございます。

以下が自分で調べた結果です。テーブルの隣りには横には空白の列を1列挟まないとテーブル以外の値も認識して消えてしまいました。勉強させていただきありがとうございました。

Sub ボタン1_Click()

    Range("A3").CurrentRegion.Offset(2, 0).ClearContents

End Sub

きまぐれ様に教えて頂きましたRange(Sheets("Sheet1").ListObjects(1).Name).ClearContentsがやりたい事でした。

教えてくださいました皆様ありがとうござしました。

(みつ) 2016/03/30(水) 17:15


きまぐれ様
もう1つお聞きしたい事があるのですが、下記のプログラムにセルのH19の値も一緒に消去する場合はどうなるんですか?H19はテーブルじゃないです。

Sub ボタン3_Click()

Range(Sheets("Sheet1").ListObjects(1).Name).ClearContents

End Sub

(みつ) 2016/03/31(木) 16:17


 ふつうに H19 も ClearContents すればいいのですが?

 それと、テーブルのデータ域の指定に、そんな【とってつけたような】記述はわかりにくいだけですね。
 気まぐれさんが回答された DataBodyRange をなぜ使わなかったんでしょうかね?

    With Sheets("Sheet1")
        .ListObjects(1).DataBodyRange.ClearContents
        .Range("H19").ClearContents
    End With

(β) 2016/03/31(木) 17:11


コメント返信:

[ 一覧(最新更新順) ]


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