![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
こんにちは。
EXCELの中にボタンを設置して以下のような動作をさせたいと思っておりますが、うまくいきません。
どのように改良すればよろしいでしょうか?
1.「end」の文字を検索し、そのセルのアドレスを取得する
2.取得したアドレスの行に関する値から一つ引いた値を計算で求める。例えばendがA10にあれば、A9とする
3.次にA3からA9までの範囲を消去する。
以下が自作したプログラムです。
Sub ボタン1_Click()
Dim srcSheets As Worksheet
Dim sinki As Integer
sinki = MsgBox("データを消去しますか", vbYesNo)
Select Case sinki
Case vbYes
'選択肢
Dim lngYLine As Long
Dim intXLine As Integer
Set Obj = Worksheets("Sheet2").Cells.Find("end")
'Sheet2の中でendを検索する。セルの場所を特定する。
If Obj Is Nothing Then
MsgBox "endが見つかりません"
Else
lngYLine = Worksheets("Sheet2").Cells.Find("end").Row
intXLine = Worksheets("Sheet2").Cells.Find("end").Column
lngYLine = lngYLine - 1
End If
With Sheets("Sheet2").Range("A3:intXLine+lngYLine").ClearContents
End With
End Select
End Sub
No.2ベストアンサー
- 回答日時:
#1です。
With
End With
もいらないですね。
というか使い方が間違ってます。
Sheets("Sheet2").Range(Cells(3,intXLine),Cells(lngYLine,intXLine)).ClearContents
この回答への補足
早速の返事ありがとうございます。
ただ、アプリケーション定義またはオブジェクト定義のエラーです。
と表記されます。
以下のように改良しております。
Sub ボタン1_Click()
Dim srcSheets As Worksheet
Dim sinki As Integer
sinki = MsgBox("データを消去しますか", vbYesNo)
Select Case sinki
Case vbYes
'データを削除
Dim lngYLine As Long
Dim intXLine As Integer
Set Obj = Worksheets("Sheet2").Cells.Find("end")
'endを検索する
If Obj Is Nothing Then
MsgBox "endが見つかりません"
Else
lngYLine = Obj.Row
intXLine = Obj.Column
lngYLine = lngYLine - 1
End If
Sheets("Sheet2").Range(Cells(3, intXLine), Cells(lngYLine, intXLine)).ClearContents
End Select
End Sub
No.5
- 回答日時:
#1です。
endが見つからないときはクリアを実行してはいけないので
Else
(略)
'End If ←削除
Sheets("Sheet2").Range(Cells(3, intXLine), Cells(lngYLine, intXLine)).ClearContents
End If '←追加
ですね。
No.4
- 回答日時:
そのエラーが出るということはコードの書き方が拙いのです。
それに、コードの書く場所も違います。
>End If
>Sheets("Sheet2").Range(Cells(3, intXLine), Cells(lngYLine, intXLine)).ClearContents
上記2行を下記4行と入れ替えてください。
With Sheets("Sheet2")
.Range(.Cells(3, "A"), .Cells(lngYLine, intXLine)).ClearContents
End With
End If
値のクリアーは、必ず【A3】からendの前のセルまでですよね?
例えば、endが
A7にあったら、A3~A6をクリアー
C7にあったら、A3~C6をクリアー
ということです。
また、
Range(.Cells(3, intXLine), .Cells(lngYLine, intXLine))
このようにすると、
endがC7にあったらクリアーされるのは、C3~C6になります。
以上。
分かりやすい解説ありがとうございます。
意図していたプログラムを作ることができました。
どうやら、
.Range(.Cells(3, "A"), .Cells(lngYLine, intXLine)).ClearContents
の使い方が根本的にわかっていなかったようです。
No.3
- 回答日時:
Set Obj = Worksheets("Sheet2").Cells.Find("end")
Cells のFindメソッドは、該当したレンジを返しますので、
lngYLine = Worksheets("Sheet2").Cells.Find("end").Row
intXLine = Worksheets("Sheet2").Cells.Find("end").Column
lngYLine = lngYLine - 1
ここは、
lngYLine = Obj.Row
intXLine = Obj.Column
lngYLine = lngYLine - 1
でもいいですね
簡略化のアドバイスありがとうございます。
こちらの方がすっきりして、見やすくなりました。
ぜひ、活用させていただきたいと思います!
No.1
- 回答日時:
With Sheets("Sheet2").Range(Cells(3,intXLine),Cells(lngYLine,intXLine)).ClearContents
でいいのでは。
ちなみに
sinki = MsgBox("データを消去しますか", vbYesNo)
If sinki = vbNo then Exit Sub
If Obj Is Nothing Then
MsgBox "endが見つかりません"
Set Obj = Nothing
Exit Sub
End If
というふうにプロシージャを終了させるほうがわかりやすいと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 日付で矢印マクロ 4 2023/07/25 16:47
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excel VBA キーワードから列を取得して、さらに空欄行を非表示にする 3 2022/10/21 22:49
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) まとめシートから集計シートへA列のコードが一致したら1行コピーするマクロをネット上で見つけました。こ 1 2022/08/30 14:11
- Excel(エクセル) EXCEL マクロで行を挿入して貼り付けようとするとエラーになる。 2 2022/05/24 09:43
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコードセットにnullの場合
-
日付の重複
-
FORTRAN77でプログラミング
-
FPGAのシミュレーションに関して
-
EXCEL VBA 文字 アドレス 検...
-
C言語のプログラムで...
-
MATLABの質問
-
エクセルVBAついて ①if•••••the...
-
整順リスト形式の英単語辞書(pa...
-
ドラゴン曲線を再帰で書く
-
他のフォームから別のフォーム...
-
VBA public変数はどのようなこ...
-
ボールが壁に当たって跳ね返る...
-
エクセルVBAでテキストボッ...
-
VBAでcallで呼び出したsubを終...
-
チェックボックスを操作できな...
-
C言語のサフィックスについて
-
マウスポインタの変更
-
画像処理について。(移動)
-
[VB6] SQLの作成について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
タイムアウトする仕組みを作りたい
-
レコードセットにnullの場合
-
subsequentとnextの違いってな...
-
日付の重複
-
verilogのcase文
-
Verilog-HDLによる設計において
-
Verilogの文法
-
リスト間のアイテム移動について
-
Rubyプログラミングの課題につ...
-
EXCEL VBA 文字 アドレス 検...
-
Delphiでコンポーネント名を変...
-
delphi
-
TreeViewのTag情報取得
-
pascalでの二分探索(バイナリ...
-
エクセルVBAついて ①if•••••the...
-
「for next」文と「if then els...
-
整順リスト形式の英単語辞書(pa...
-
直線検出のハフ変換プログラム(...
-
Matlab
-
【FPGA】VHDLのprocessとevent
おすすめ情報