1579083503 Excelでシート名が異なっていてもマクロが正しく動くのに、先頭一行を空白行にするとエラーが出る事象につきまして


前回の質問
https://q.hatena.ne.jp/1578650706

で、ご回答いただいたマクロのコード(空腹おやじさんのコード)を深く理解しようと試みました。そうすると、2つの謎に遭遇しました。

まず「Sheet1」「Sheet2」のうち、「Sheet2」のシート名を「検索対象」という名前に変えました。
すると…マクロは問題なく動き、Sheet1のF列に希望のデータを取得・記載してくれました。
なぜシート名を変えたのにマクロが正しく動き処理が行われたのか…これが1つ目の謎です。

もう1つは、タイトルにもしているのですが。
「検索対象」シートの方で、A列にずらりとデータ並んでいますが、一行目だけを空白行にしてみました。
すると…貼付画像のような「実行時エラー'1004':…」が出てきてしまったのです。
なぜ先頭一行を空白行にするとエラーになるのか…自分では理解できません。

2つの謎について、ご説明いただけますと有難いです。
こちらにファイルを置きました。https://xfs.jp/RpZWVJ
よろしくお願い致します<m(__)m>

回答の条件
  • 1人20回まで
  • 登録:2020/01/15 19:18:23
  • 終了:2020/02/09 19:18:23

回答(1件)

id:Z1000S No.1

空腹おやじ回答回数38ベストアンサー獲得回数262020/01/15 21:56:53

>なぜシート名を変えたのにマクロが正しく動き処理が行われたのか
プロシージャで指定している
Sheet2
は、シート名ではなく、ワークシートオブジェクトのCodeNameだからです。
https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.codename

>実行時エラー'1004'
Sheet2の1行目を空白行にしたため、
rDatasHD が1行分しかなくなったため、
次の行

Set rDatasD = rDatasHD.Resize(rDatasHD.Rows.Count - 1).Offset(1)

において、rDatasHD.Rows.Count が、1となるため
Resize(0)となり、Resize出来ないためエラーとなります。

他2件のコメントを見る
id:moon-fondu

うーん、いまいちピンとこないのですが…つまり「Sheet1.」という表記をする際は、Worksheetオブジェクトの記述が省略されており、「シート名.」と記載すれば、CodeNameプロパティとして利用している、という認識でよいのでしょうか?

2020/01/18 19:25:26
id:Z1000S

違います。

シート名とCodeNameは別物です。

オブジェクトのコード名はオブジェクトを表すオブジェクト式の代わりに使用できます。

シート名は、コード名と異なる場合があります。

https://docs.microsoft.com/ja-jp/office/vba/api/excel.worksheet.codename

VBEの画面で任意のシートを選択した状態で
プロパティウィンドウで、
(オブジェクト名):CodeName
Name:シート名
です。

2020/01/19 16:15:58

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません