Excel VBA 質問スレッド No.151 (未解決)

もらったエクセルでvbaが実行されるのに反映されない

投稿者 : tikdom     投稿日時 : 2020/12/25(Fri) 18:03:26     OS : Windows 10     EXCEL : Excel 2016
タイトルの通りです。
以下、vba記述
Dim i As Long
Dim MR As Long
MR = Cells(Rows.Count, 1).end(xlUp).Row
Thisworkbook.Sheets("控除明細書").Range("Q8").Snlect
For i = MR To 8 Step -1
If ActiveCell.Value = "-" And "0" Then
Rows(i).Delete
Else ActiveCell.Offset(1, 0).Select
End If
Next i
どなたか原因教えてください!
ちなみに、他の方が既に作られたエクセルの中にも実行はされるのに結果が反映されないものがありました。

[返信 1] Re : もらったエクセルでvbaが実行されるのに反映されない
投稿者 : EUNO     投稿日時 : 2020/12/25(Fri) 20:04:47
いま、Excelの環境がないので、ぱっと見ですが、

> Thisworkbook.Sheets("控除明細書").Range("Q8").Snlect
select のつづりがちがいます?

> If ActiveCell.Value = "-" And "0" Then
ここがおかしいですね。
If ActiveCell.Value = "-" And ActiveCell.avalue= "0" Then
じゃないかな。

[返信 2] Re : もらったエクセルでvbaが実行されるのに反映されない
投稿者 : EUNO     投稿日時 : 2020/12/25(Fri) 23:13:43
> If ActiveCell.Value = "-" And ActiveCell.Value= "0" Then
タイポ失礼、こうですね。0にダブルクオーテーションいるのかどうかは私には分かりませんが。

[返信 3] Re : もらったエクセルでvbaが実行されるのに反映されない
投稿者 : tikdom     投稿日時 : 2020/12/29(Tue) 12:12:47
■[質問] tikdomさん(2020-12-25 18:03:26)の記事
> タイトルの通りです。
> 以下、vba記述
> Dim i As Long
> Dim MR As Long
> MR = Cells(Rows.Count, 1).end(xlUp).Row
> Thisworkbook.Sheets("控除明細書").Range("Q8").Select
> For i = MR To 8 Step -1
> If ActiveCell.Value = "-" And ActiveCell.Value = "0_" Then
> Rows(i).Delete
> Else ActiveCell.Offset(1, 0).Select
> End If
> Next i
> どなたか原因教えてください!
> ちなみに、他の方が既に作られたエクセルの中にも実行はされるのに結果が反映されないものがありました。

追記
上記記述、修正しました。
返信くださった方ありがとうございます。
大変申し訳ないのですが、実際には上記の記述をしてあります。
そのうえでエラーでは帰ってこずに結果が反映されないです。

調べた所、ブックの共有がされていそうで、もしそうならそれを解除すれば結果が反映されそうなので、休み明けに会社で確認したいと思います。

[返信 4] Re : もらったエクセルでvbaが実行されるのに反映されない
投稿者 : EUNO     投稿日時 : 2020/12/29(Tue) 14:14:18
そもそも、activecell.valueで判定を行なって、ループ変数iで削除、
elseの場合はactivecellを移動という処理がイマイチ理解しにくいですね。

分かりやすさからも処理速度からも、selectせずにループ変数だけで処理するのが良いように思います。else節も不要になります。

[返信 5] Re : もらったエクセルでvbaが実行されるのに反映されない
投稿者 : tikdom     投稿日時 : 2020/12/31(Thu) 14:59:44
■[返信 4] EUNOさん(2020-12-29 14:14:18)の記事
> そもそも、activecell.valueで判定を行なって、ループ変数iで削除、
> elseの場合はactivecellを移動という処理がイマイチ理解しにくいですね。

> 分かりやすさからも処理速度からも、selectせずにループ変数だけで処理するのが良いように思います。else節も不要になります。

返信ありがとうございます。
If文の記述が
If Cells("Q" & i).Value = 0 And Cells("Q" & i).Value = "-" Then
Rows(i).Delete
End If
で充分という事でしょうか。
後から見て理解しやすさは私個人としては変わらないと判断してしまってました。
しかし、単純にこちらの方が確かに記述内容も簡潔に感じられるので今後上記のようにしようと思います。

[返信 6] Re : もらったエクセルでvbaが実行されるのに反映されない
投稿者 : EUNO     投稿日時 : 2021/01/04(Mon) 17:01:16
すみません、よく見てませんでした。

If ActiveCell.Value = "-" And ActiveCell.Value= "0" Then
だとおかしいですね。

If ActiveCell.Value = "-" Or ActiveCell.Value= 0 Then
かな。

当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2021-01-27 11:44:50 )

Page
Top