[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『[[20240109105208]]からの派生トピック』(もこな2)
このトピックは[[20240109105208]]からの派生トピックです。
経緯等はそちらをご覧ください。
>下記のマクロの内容については、触れておりません。
それはわかっているんです。
「実験02」で言いたいことが、(少なくとも私には)分からないんです。
一応↓を作成して私の環境(Microsoft365/Windows11)でテストすると
Sub 実験02_整理() Dim 配列(1 To 5) As Variant Dim i As Long, Lrow As Long Dim SpecialCellsの対象セル As Range Dim 削除対象のセル As Range 配列(1) = Array("EA", "SS", "SS", "SS") 配列(2) = Array("EA", "SS", "EC", "SB") 配列(3) = Array("SS", "SS", "SS", "SS") 配列(4) = Array("SS", "SS", "SS", "SB") 配列(5) = Array("EA", "EC", "SB", "EA") For i = 1 To 5 With Worksheets.Add(after:=Worksheets(Worksheets.Count)) .Name = "パターン" & i .Range("A1:B1").Value = Array("Title1", "Title2") .Range("B2:B5").Value = Application.Transpose(配列(i)) .Range("A2:A5").Value = Application.Transpose(Array(1, 2, 3, 4)) .Range("A1").AutoFilter Field:=2, Criteria1:=Array("EA", "EC", "SB"), Operator:=xlFilterValues Lrow = .Range("A" & .Rows.Count).End(xlUp).Row Set SpecialCellsの対象セル = .Range("A2:A" & Lrow) Set 削除対象のセル = SpecialCellsの対象セル.SpecialCells(xlCellTypeVisible).EntireRow Debug.Print .Name Debug.Print "【SpecialCellsの対象セル】" & SpecialCellsの対象セル.Address(0, 0) Debug.Print "【削除対象のセル】" & 削除対象のセル.Address(0, 0) 削除対象のセル.EntireRow.Delete On Error Resume Next .ShowAllData If Err.Number <> 0 Then Debug.Print "エラー番号:" & Err.Number & vbLf & "エラーメッセージ:" & Err.Description Err.Clear End If End With Debug.Print " " Next i End Sub パターン1:項目行"も"削除されてオートフィルタが強制解除されるのでShowAllDataが失敗 パターン2:実行時エラーなし パターン3:項目行"が"削除されてオートフィルタが強制解除されるのでShowAllDataが失敗 パターン4:実行時エラーなし パターン5:"データのすべて"が削除されて"抽出状態じゃなくなるので"ShowAllDataが失敗
となりますが、(当たり前ですが)いずれもShowAllDataメソッドでの問題であって、質問の主題(抽出された行があるときだけ処理する)とは別の話でしょう。
(なお、ShowAllDataメソッドが失敗する場合の対処については「■5」で触れています。)
いやいや、そういう話じゃないということならば「特定条件の時だけ、エラーになりませんか?って 話だけですよ。」ってぼかさずに、どういうときにまずいのか具体例を挙げて問題提起されたほうが良いと思います。
■19
ここまで書いておいてなんですが、トピ主が終了宣言してから余談として話を続けるならまだしも、そうじゃない状態でトピ主を置き去りにした話を続けていたらトピ主だって混乱しますよ。
そういう意味で、【私の話は】トピ主にあてたものじゃないですと宣言してから書きました。
あみなさんの話が誰向けとかそういう話はしてません。
■20
上記の理由で、私としてはトピ主の混乱の原因になるようなことをしたくありません。
よって私のコメントを引き合いに出して話をするのはおやめください。
また、"自身の学習"として別トピックを立てて話を続けるのであれば、多少はお付き合いする気もありますが、話が終わっていないトピックで別話を続けるのは、同様の理由で避けるべきとおもっていますので上記についての返信は不要です。
(もこな2) 2024/01/20(土) 13:52:59
<転記2>
はじめに:
★★★ 閲覧される方へ ★★★
ここ [ エクセルの学校 ] での全ての回答者は、質問者への疑問や ご自身で組めない関数、マクロ等をサポートする為に、時として 文章が長文となることがあります。また議論に生ずる事もあります。
ご理解とご了承を賜りますようお願い申し上げます。また、ここから 先は流れを把握されていない方には、 理解しがたい内容となります。
★★★ もこなさんへ ★★★
先に言いますが、なぜ少なくともここの回答者(大先輩)として もこなさんへ敬意を払っているのに、私が喧嘩を売ったような 話になっているのでしょうね? では今回は、ズバリ言いますよ。
もこなさんへ、流れをよく理解してから回答をしてください。 すれば大きな誤解は無いでしょう。むしろ 、話の流れを別の条件にて トピ主を混乱させているのは、他でもない...( もこなさん )あなたです。
★★★[ 流れの説明 ] : 各回答者の返信より一部を抜粋★★★
●流れ : 1
> 追いつかない(-_-;) <<< ★重要 >(あなたが居たから) 2024/01/10(水) 11:35:19
●流れ : 2
(匿名)さんが、2024/01/13(土) 12:22:44 にトピ主さんへ返信をします。
> #テスト環境作成# を作り > #サンプルコード# を実行して
◇テスト環境 : (匿名)さんが指示するレイアウト例 <<< ★重要 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|[A] |[B] [1]|Title1|Title2 [2]| 1|EA [3]| 2|対象外 [4]| 3|対象外 [5]| 4|SB
> 該当がない場合、変数「Lrow」の値は「1」 > 該当がある場合、変数「Lrow」の値は「5」 > となりましたが、これをどの様にしたら良いか分かりません > みたいになると思います。
>変数「Lrow」の値によって削除を実行するかしないかをIf文で判断する >ステップイン実行を駆使して、 >「どこで何をやっているか」 >「実行結果がどうなっているか」 >を目で見て確認する事を繰り返した方が良い気がします。 >(匿名) 2024/01/13(土) 12:22:44
●流れ : 3
> しかし、理解できてないので > 匿名さんの回答のみを飲み込みました。 <<< ★重要 >(あなたが居たから) 2024/01/17(水) 12:57:02
●流れ : 4
> 該当がない場合、変数「Lrow」の値は「1」 > 該当がある場合、変数「Lrow」の値は「5」 > これは、どうやったら分かるのでしょうか? <<< ★重要 > 値 というのは何かで表示されるのでしょうか? >(あなたが居たから) 2024/01/17(水) 13:03:50
●流れ : 5
> すみません、イミディエイト 使い方の使い方が分からないです… > イミディエイトってのを使うと > If Lrow > 1 Thenが1とか5とか分かるのですか? <<< ★重要 >(あなたが居たから) 2024/01/18(木) 10:22:16
●流れ : 6
イミディエイトウィンドウの使い方を、複数の回答者が (あなたが居たから)さんへ、サポートの返信をする。
>(´・ω・`) 2024/01/17(水) 14:42:10 >(あみな) 2024/01/18(木) 10:26:42 >(ゆたか) 2024/01/18(木) 10:32:29
※(´・ω・`)さんは、トピ主さんの不明点を推定されて (あなたが居たから) 2024/01/18(木) 10:22:16 の前に参考URLを提示する ※被った内容があった為に、(xyz)さんは削除して後に、キチンと説明を入れる。
●流れ : 7
(もこな2)さんが、2024/01/13(土) 12:22:44 に トピ主さんへ以下の内容で返信をします。( 一部抜粋 )
> 日曜日に書いたものの、トピ主の反応を待ってからコメントしたほうが良いのかもと温めていたら、 <<< ★重要 〜〜〜〜 〜〜〜〜〜〜〜〜〜〜 > 完全に投稿するタイミングを逃してしまいましたが、せっかくなので投稿しておきます。 ~~~~~~~~~~~~~~~~~~~~~
満足ですか? 悲鳴と言うと少々オーバーな表現ですが、(あなたが居たから)さんは 複数回に渡ってされていますよね。でこの内容ですか? トピ主の状況からして、私にはとてもできない内容ですね。
>トピ主の反応を待ってからコメントしたほうが良いのかもと温めていたら、… それは、あなたが勝手に...妥協をしただけではないのですか?
>■9 >変数「Lrow」の値が「1」になるはずです。 >ただ、「■7」で述べているように、データによっては↓のようなことになるので、 > 手を入れるのであればその辺も考慮したほうが安牌かなと思いました。(ケチをつける意図はありません。)
※マクロの、重要部分を一部抜粋
> Sub 実験用() > .Range("B13:D13").Value = Array("消えて", "欲しくない", "データ") > MsgBox "H列で最終行をチェックした場合に2行目だった時の削除対象" & vbLf & vbLf & _ > Range("H2:H" & Lrow).SpecialCells(xlCellTypeVisible).EntireRow.Address(False, False) > End Sub
ここで、Array("消えて", "欲しくない", "データ") この条件の話が必要ですか? ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ さらに
> Sub 研究用2() > With .AutoFilter.Range > If .Rows.Count > 1 Then '★1 > If .Columns(8).SpecialCells(xlCellTypeVisible).Count > 1 Then '★2 > .Resize(.Rows.Count - 1).Offset(1).EntireRow.Delete '★3 > End If > End If > End With > End Sub
ここで、新たな( 違う書き方 )をした提案が必要ですか? (あなたが居たから)さんのスキルを、度外視した提案内容ではありませんか?
いけないとは言いませんよ。タイミングは、(あなたが居たから)さんの イミディエイトウィンドウの使い方の理解と、[ Lrow ]変数の[ 1 , 5 ]等の確認 が出来たかが、先ではないのでしょうか?( まだ、返信がないのですよ ) <<< ★重要
●流れ : 8
(xyz)さんが、Lrow 取得の説明をして <<< ★重要 トピ主さんへ少しでも理解が進むようにする
> 長い文章で疲れたでしょう。 > 動画を見たりすればわかったはずですが、あえて文章にするとこんなことになるでしょう。 > 私はこれにて失礼します。 >(xyz) 2024/01/19(金) 08:46:09
●流れ : 9
(あみな) 2024/01/19(金) 11:20:15 が (あなたが居たから)さんへ <<< ★重要 イミディエイトウィンドウの使い方が出来たのか? Debugの取り方が 無事に動作確認が出来たのかを案じて、以下の内容にて返信をする。
( 一部抜粋 ) > 下記の■7で、もこなさんが言っている内容も、イミディエイトウィンドウの > 使い方が解らなかったのであれば、ちんぷんかんぷんな内容だったかと思います。
★このスレの現段階での最重要ポイントは、トピ主さんが[ Lrow ]変数の取得問題です。 <<<★重要 理解できたか?
[ Lrow ]変数の内容を議論中である事と、SpecialCellsの仕様(バグ?)の話をされています。 私は、この(バグ?)の件は、知らなかった為に「半信半疑」ですがと入れる。 もし、記載事項に誤りなどがあれば、現在検証中の内容につきお許し下さい。と最後に入れる。
正直いって(あなたが居たから)さんがすぐに理解を出来る内容ではありませんよね? (バグ?)の話をするなら、参考URLを載せてあげても良いのではないでしょうか? https://www.limecode.jp/entry/trap/specialcells 絶対にとは、いいませんが。。。
>■20 >上記の理由で、私としてはトピ主の混乱の原因になるようなことをしたくありません。 >よって私のコメントを引き合いに出して話をするのはおやめください。 >(もこな2) 2024/01/20(土) 13:52:59
これが引き合いに出して困るような話ですか?
【 [ 実験02 ]マクロ私の説明 】
> では本題、私もまだ半信半疑ですが、(匿名)さんが提示された <<< 重要 > 2024/01/13(土) 12:22:44 の#サンプルコード#について <<< 重要
> 実は、ある条件の時だけですが、失敗するかと思っています。 > 口で言っても理解が難しいと思いますので、実験用のマクロを > 作成しました。シートにデータが無い新規シートにてマクロを > 実行してみてください。
それを最初に[ 実験02 ]のマクロに組み込む。( これ普通ですよね? ) <<< ★重要 もこなさんは、↓ レイアウトまで記載しているのに理解ができませんか?
|[A] |[B] [1]|Title1|Title2 [2]| 1|EA [3]| 2|SS [4]| 3|SS [5]| 4|SS
★また下に、成功する時の事も入れています。 > 尚、下記の条件では全て成功します。
> Application.Transpose(Array("EA", "SS", "EC", "SB")) > Application.Transpose(Array("SS", "SS", "SS", "SS")) > Application.Transpose(Array("SS", "SS", "SS", "SB") > (あみな) 2024/01/19(金) 11:20:15
★この話は、匿名さんの 、#サンプルコード# についてです。 これだけ説明を入れているのに対して、もこなさんは下記の返信をされていますがなんでしょうね?
> いやいや、そういう話じゃないということならば「特定条件の時だけ、エラーになりませんか?って 話だけですよ。」 > ってぼかさずに、どういうときにまずいのか具体例を挙げて問題提起されたほうが良いと思います。
★ぼかしてますか?
↓この下の話ではありませんよ。この話は、匿名さんの 、#サンプルコード# についてです。 ↓ここの話は既に終わっています。 > .ShowAllData は IFブロックの外に出した方がいいということですねの話ではありません。 >(なお、ShowAllDataメソッドが失敗する場合の対処については「■5」で触れています。)
★[ 実験02 ]のマクロは、変数「Lrow」の確認の取り方と、 Application.Transpose(Array("EA", "SS", "SS", "SS")) の条件の時だけ 匿名さんの 、#サンプルコード# が失敗するかと思っています。 <<< ★と説明をしていますが?
★誰宛にについて
>(あなたが居たから)さんへとも言ってますが…。 <<< ★重要 (匿名さんへとは言わずとも解るでしょう) >(あみな) 2024/01/19(金) 11:20:15
>もこなさんへ、私はですが、トピ主さん、匿名さん、 <<< ★再度 > 閲覧者全員の方に向けて発信しているつもりです。 >(あみな) 2024/01/19(金) 16:09:27
↓もこなさんがおっしゃるには下記のようですね。 >あみなさんの話が誰向けとかそういう話はしてません。 >質問の主題(抽出された行があるときだけ処理する)とは別の話でしょう。
★[ 実験02 ]のマクロは (匿名)さんが、(あなたが居たから)さんへ提示された #サンプルコード# と同じテスト環境のままですが? 問題ありますか? 違う想定の話ばかりをしているのは、(もこなさん)あなたじゃないんですか?
●流れ : 10
> ■12 >「実験02」について当方(諸般の事情でイミディエイトウィンドウの操作はコメントアウトしました)
もこなさんの実行環境に、興味はありません。 まして、(あなたが居たから)さんへ少しでも解りやすくと Debug.Print しているのに、そっくりの内容をここで挙げてどうするんですか?
>これ以上続けるならば、トピ主のじゃまになりますので別トピを作成されたほうが良いと思います。 >(もこな2 ) 2024/01/19(金) 14:21:55
流れを断っているのは、誰なんでしょうかね? 今更、見ていないかったとか...言わないでくださいね。 それだけの文章量の内容で、コメントをしているのですから。
●流れ : 11
私の数倍のマクロのスキルがある(もこな2 )方が、 私の[ 実験02 ]の(匿名)さんが提示された #サンプルコード#と同じ内容にしてあるものを <<< ★重要 IF文を削除して、わざわざ変更してテストしてどうするんでしょうか?( ↓下 : 重要部分を抜粋 ) <<< ★重要 〜〜〜〜〜〜 Sub 実験02_整理() If Lrow > 1 Then '★ないですよ Set SpecialCellsの対象セル = .Range("A2:A" & Lrow) Set 削除対象のセル = SpecialCellsの対象セル.SpecialCells(xlCellTypeVisible).EntireRow Debug.Print .Name Debug.Print "【SpecialCellsの対象セル】" & SpecialCellsの対象セル.Address(0, 0) Debug.Print "【削除対象のセル】" & 削除対象のセル.Address(0, 0) 削除対象のセル.EntireRow.Delete End If '★ないですよ End Sub (もこな2) 2024/01/20(土) 13:52:59
>となりますが、(当たり前ですが)いずれもShowAllDataメソッドでの問題であって、質問の主題(抽 >出された行があるときだけ処理する)とは別の話でしょう。
★( IF文 )が無いと全く別の実行環境ですよ。 <<< ★重要 ↓さらに下記の条件を追加する >配列(5) = Array("EA", "EC", "SB", "EA") '★全削除対象行 <<< ★重要
全削除対象行の条件を追加してますが、必要ですか? こんな条件の話はいらないのではないのでしょうか?
>■19 >ここまで書いておいてなんですが、トピ主が終了宣言してから余談として話を続けるならまだしも、そ >うじゃない状態でトピ主を置き去りにした話を続けていたらトピ主だって混乱しますよ。
私の[ 実験02 ]は(匿名)さんが提示された #サンプルコード#と同じ内容です。 失敗する事例を挙げて確認の為、問いているのが不要な内容なのでしょうか?
>■20 >上記の理由で、私としてはトピ主の混乱の原因になるようなことをしたくありません。 >よって私のコメントを引き合いに出して話をするのはおやめください。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 流れを理解されていないから、こうなるのでしょうね。( 引き合いの件が明確にわかりかねますが ) トピ主さんの今現在における一番必要な状況を、お考えになられてはどうですか?
>また、"自身の学習"として別トピックを立てて話を続けるのであれば、多少はお付き合いする気もありますが、 >話が終わっていないトピックで別話を続けるのは、同様の理由で避けるべきとおもっていますので上記についての返信は不要です。 ~~~~~~~~~~~~~~~~~~~~~~ >(もこな2) 2024/01/20(土) 13:52:59
>「実験02」で言いたいことが、(少なくとも私には)分からないんです。 なんでしょうかね? あなたのスキルで、この内容で解らないとかあるんですか?
>上記についての返信は不要です。
「でたらめ」実験してさようならですか?
★別件 : この際なので、ついでに言っておきます。
> ※1 説明用の提示であり完成品プレゼントの意図はありません。 >(もこな2 ) 2024/01/09(火) 19:17:20
> そういう意味で↓のようにコメントした次第です。 > ※1 説明用の提示であり完成品プレゼントの意図はありません。 >(もこな2) 2024/01/19(金) 07:40:58
2度目は珍しく、弁明ですか?
> 匿名さんの回答のみを飲み込みました。 >(あなたが居たから) 2024/01/17(水) 12:57:02
この状況でもされるのですね?
行を削除する程度の内容で、いちいち必要でしょうか? 過去にも、他の回答者から指摘をされていましたよね? まだ続けるんですかね?気持ちよく、提案されたらいかがですか?
将来、拡張があるような話ならですが、土台だけを作成するので 後の微調整は、ご自身でお願いしますなら普通なのですがね。 この程度の内容なら完成品プレゼントで良いのではないですか?
以上 (あみな) 2024/01/21(日) 12:29:13
ココから本題。
★1
繰り返しになるけど、元トピ主の質問を整理すると↓のようになるでしょう。
オートフィルタで抽出したときに、抽出された行があるときだけ、それを削除したい
なので、答えとしては
最終行を調べたときに項目行(以下)になるんだったら抽出されたものがないので、 それ以外のときに処理すればOK
★2
そういった背景があるので、匿名さんは↓のように言ってますし
>該当がない場合、変数「Lrow」には、どんな値が入るか >該当がある場合、変数「Lrow」には、どんな値が入るか >をステップイン実行で確認してみて下さい。
私は↓のように言っています。
>"抽出"したときの【H列最終行】が項目行より大きければ処理する。と考えてみては如何でしょうか?
さらには、(´・ω・`)さんは↓のように解説しています。
>Lrow = Range("A" & Rows.Count).End(xlUp).Row >のした後のLrowの値は、 > ・該当行がないとき Lrow=1 > ・該当行があるとき Lrow>1 >なので、Lrowの値で条件分岐できるでしょう
なのでみんな答えとしては同じ話をしてるんですよ。
(最初のトピ主の反応もアレだとは思いましたが)
★3
ですが、たくさんのコメントが付いたことや、話がデータが最大行まであることに移ってしまったので、トピ主が混乱してキャパオーバーになり、追いつかないという発言に至ったのだと思います。
〜〜以降順不同になりますが、ご容赦を。
★4
>満足ですか?
まぁ所詮、自己満ですね。(基本的に抑えるべきところは最初に出てましたから)
>それは、あなたが勝手に...妥協をしただけではないのですか?
こちらも仰るとおり。
匿名さんが細かい解説をされたのを拝見して、私もコメントを書いたのですが、やいのやいのいうと、またトピ主が混乱するだろうなぁとおもったので、【私が勝手に判断して】発言を控えたんです。
で、そのあとトピ主の反応があったわけですが、(これは私の事情ですが)こちらがコメントできないまま、コメントするころにはすっかりデバッグのやり方とかそういうところに話が移っていっていたので、【完全に投稿するタイミングを逃してしまいましたが、せっかくなので投稿しておきます。】と断ったうえでコメントをした次第です。
★5
>これが引き合いに出して困るような話ですか?
>流れを理解されていないから、こうなるのでしょうね。( 引き合いの件が明確にわかりかねますが )
私としては↓ですかね。
> あっ。。。もこな先生が何か「おっしゃって」います。 > 重箱って、開けたら髪の毛が真っ白になる...あれですよね? > 竜宮城で...貰えるやつって、お話ですね?...わかりました。 > >※1 説明用の提示であり完成品プレゼントの意図はありません。 > なるほど。。。これは何処かに...もしかして? 罠があるってことですね?
茶々入れみたいなことに巻き込まれるのは、私の本意ではありません。
「■7」は、元トピ主を置き去りにした話に、悪乗りして参加してしまったので反省しています。
★6
>★別件 : この際なので、ついでに言っておきます。 >2度目は珍しく、弁明ですか?
こちらとしては弁明しているつもりはないです。
質問者さんもいろんなタイプの方がいらっしゃいます。
中には、理屈はどうでもいいので動くものをもらえればそれでOKという方もいるでしょう。
ですが、私としては、せっかく"質問"をされたのであれば、ちゃんと理屈を分かってほしいとおもっていますので、そのようなコメントを付けています。(つけ忘れることもしばしばありますが)
これは私のポリシーなので、今のところ方針変更するつもりはありません。
>この程度の内容なら完成品プレゼントで良いのではないですか?
上記のように"私の"ポリシーなだけですから、ほかの人に強制するつもりはありません。
(完全に余談ですが、別サイトでは、作成依頼禁止となっているところもありますので、そういった場所では指摘することもあります)
したがって、あみなさんはあみなさんでそうされたら良いと思います。
★7
>トピ主さんの今現在における一番必要な状況を、お考えになられてはどうですか?
私としては、最初の質問部分を解決するのが優先かなと思っています。
もちろん密接な関係にありますので[Lrow]変数の確認の仕方も大事でしょうが、なんでそれが入るのかということを理解されるのがより先決かと。
変数の中身を確認する方法がわからなきゃ理解できないじゃないかということにもなろうかと思いますが、例えば
(1)該当がない条件で抽出する (2)H1048568セルを選択する (3)「Ctrl」+「↑」を押して、【何行目】のセルが選択されるか目視確認する (4)該当がある条件で抽出する (5)H1048568セルを選択する (6)「Ctrl」+「↑」を押して、【何行目】のセルが選択されるか目視確認する
という操作を体験することでも理解の一助になるのではないかと思います。
(既に匿名さんが細かく説明されているので、そこは理解されたという話かもしれませんが)
★8
>「でたらめ」実験してさようならですか?
部分だけ取り出して反論されるのは心外です。
>また、"自身の学習"として別トピックを立てて話を続けるのであれば、多少はお付き合いする気もありますが、 >話が終わっていないトピックで別話を続けるのは、同様の理由で避けるべきとおもっていますので上記についての返信は不要です。
こちらの言葉がたりなかったのかもしれませんが、トピ主の課題解決に直接関係ない話を【こちらのトピックで続けるならば】上記についての返信は不要です。という意図でした。
★9
>「でたらめ」実験してさようならですか?
>IF文を削除して、わざわざ変更してテストしてどうするんでしょうか?( ↓下 : 重要部分を抜粋 )
こちらは完全に私に非があります。「でたらめ」になっていてすみません。
テストコードを作成するときに思いっきり削除してしまってました。
>もこなさんの実行環境に、興味はありません。
一応説明しておくと、おま環という話かもしれないですが、
Application.VBE.Windows("イミディエイト").Visible = True
↑を実行すると↓のように実行時エラーになるので、イミディエイトが絡む話だったらわかりませんいう話をしているつもりでした。
実行時エラー'1004' プログラミングによるVisual Basic プロジェクトへのアクセスは信頼性に欠けます。
>私の数倍のマクロのスキルがある〜
>あなたのスキルで、この内容で解らないとかあるんですか?
>全削除対象行の条件を追加してますが、必要ですか?
買い被りすぎです。事務職のおじさんのただの趣味レベルでしかありません。
前述のようにIF分岐を見落としていたのもありますが、「ShowAllDataメソッド」の直前でエラートラップ(というかエラー表示?)させていたので、トピ主の質問である"対象データがあるときだけ処理"の話とは関係してないので、何を言いたいのか"私には"理解できませんでした。
それでも、「ShowAllDataメソッド」の話をされているのであれば、「■5」で述べているような場合でもエラーになりますよという話として付け加えました。
★10
> (バグ?)の話をするなら、参考URLを載せてあげても良いのではないでしょうか?
仰る通りなのですが、私もこのサイトで知ったので、そのトピックへのリンクを貼りたかったんですが、記事が簡単にはみつからなかったので端折りました。
もう一度時間をかけて探したら発見できましたので、提示しておきます。
[[20200911193145]]
関連して「■13の話はもうふれませんが」とありますが、SpecialCellsを単一のセルに対して実行したことにより、項目行まで削除対象にしてしまい、項目行が削除されたから、オートフィルタが強制解除された結果、「ShowAllDataメソッド」が失敗して、イミディエイトにエラー出力されるという理屈は納得いただけたという意味でしょうか?
★11
SpecialCellsついでに言うと、既に述べたように今回のケースで使う必要はありません。
かなり昔のバージョン(少なくともExcel2007より前)では、SpecialCells(xlCellTypeVisible)で特定する必要があった"らしい"のですが、現行のバージョンではコピーや削除(貼付は駄目です)などは、抽出されている(可視)セルを対象にすることになっているようです。
(それ以上古いバージョンでマクロを扱ったことが無いので検証はできてませんが)
★12
最後に、私の業界だとデジタル化が進んでいないので
(1) ←あるある 項目行が(上下に)セル結合されたり、内訳欄とかがあって「Range("A1").AutoFilter」だと、 思った範囲にオートフィルタが設定されない
(2) ←かなりある A列はチェック欄になっていて普段はブランクセルなので、A列で最終行を求めるとマズイ
(3) ←結構ある 1列開けてチェック欄がありそこもオートフィルタの範囲にしたい
(4) ←そこそこある 表の下に注意書きなどが書いてあってそこは、コピーや削除の対象にしたくない。
(5) ←経験なし データが最大行まで詰まっている
みたいな感じです。(あんまり書くと身バレしそうなのでほどほどにします)
そういうことを考えると、範囲を明確に指定してオートフィルタをかけるとか、Endプロパティ以外の方法で最終行を取るとか、イレギュラーケースの対応策として引き出しをいろいろ持っておくことに異論ありませんし、議論することもいいと思います。
ただ、基本部分で立ち止まっているトピ主がそちらの話も読んで混乱に拍車をかけるのはちょっとまずいかなと思い、今回のように別トピックにすべきだと発言しました。
==別記== ・転記の際に一括してTabを削除したので、どこかミスっているかもしれません。他意はありませんのであればご指摘ください
< 使用 Excel:unknown、使用 OS:unknown >
[20240109105208]に回答している間に、
こちらのトピが立ったようなので、
念のため、こちらでも同じ内容を投稿しておきます。
以下、あなたが居たから様の質問に回答した内容です。
ちょっと体調を崩していて、この掲示板を見るのに、
間が空いてしまいました。
いつの間にか、多数の方が回答されていたようですね。
私はこの掲示板ではありませんが、
他の掲示板で多数の方々に助けられて
VBAができるようになりました。
ですから恩返しのつもりで、
このような掲示板で私のできる事は回答をつけるようになりました。
そして、私を育ててくれた掲示板で、
1つ1つできるようになるために、
以下のような事を指摘して頂いたおかげだと思っております。
丸投げをやめましょう。作成してもらう事が目的なら、
有料でやってもらうべきです。
一気に進めるのではなく、わからない事、躓いていることを、
1つずつ分けて解消していきましょう。
本番データでいきなり実行するのではなく、似たような形の表を小さく作って
(例えば3列4行くらい)、そこでVBAを実行する習慣をつけましょう。
といった感じです。
ですから私は、回答のコードを載せるのではなく、
ヒントになるようなことを掲載して、
質問者が「自分でできた」という感覚を覚える事で、
引き続きVBAに挑戦する、結果VBAができるようになる。
となるように心がけて回答しているつもりです。
>フィルタで検索をして該当があれば下記を実行
従って、上記の事だけをクリアするためだけを
できるようになるための導きをするための回答をしているのです。
他の条件でエラーが出るとかは意識していません。
もちろん、「有料で作成してください」といわれて作成しするのであれば、
テストデータも多数作成するでしょうし、
テスト仕様書も、プログラム仕様書もセットで納品して、
バグがない様に作成しますけど…
又、質問の内容、質問する言葉を見る限りでは、
VBAに不慣れな方である事も推測できます。
特にイミディエイトウインドウの使用方法が分からない
という事は、VBAに不慣れな事が分かる質問だと思います。
それは、以下のような回答からも推測できるような気がします。
>他の皆さんもありがとうございます
>しかし、理解できてないので
>匿名さんの回答のみを飲み込みました。
そこで、さらに上を行く事(例えばある条件だけはエラーが出る)を言っては、
質問者を混乱させるだけだと思います。
一つずつクリアしていく事にならなくなってしまうからです。
従って、私は、イミディエイトウインドウの説明のみをしている方、
又はそのリンクを貼っている方だけで十分のような気がします。
私の説明不足で多数の方の混乱をさせてしまったようです。
質問者にも、回答をつけてくださった皆様にも
混乱を招いてしまった事をお詫び申し上げます。
大変申し訳ございませんでした。
(匿名) 2024/01/21(日) 23:36:04
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.