Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


405 / 13645 ツリー ←次へ | 前へ→

【80498】シート名と同じ文字列のセル行位置を取得したい 狛ちゃん 19/2/21(木) 20:29 質問[未読]
【80499】Re:シート名と同じ文字列のセル行位置を取... γ 19/2/21(木) 21:37 発言[未読]
【80500】Re:シート名と同じ文字列のセル行位置を取... 狛ちゃん 19/2/21(木) 22:26 発言[未読]
【80501】Re:シート名と同じ文字列のセル行位置を取... γ 19/2/21(木) 22:35 発言[未読]
【80504】Re:シート名と同じ文字列のセル行位置を取... 狛ちゃん 19/2/22(金) 23:27 質問[未読]
【80505】Re:シート名と同じ文字列のセル行位置を取... マナ 19/2/22(金) 23:48 発言[未読]
【80512】Re:シート名と同じ文字列のセル行位置を取... γ 19/2/24(日) 8:51 発言[未読]
【80548】Re:シート名と同じ文字列のセル行位置を取... 狛ちゃん 19/3/2(土) 11:56 質問[未読]
【80549】Re:シート名と同じ文字列のセル行位置を取... γ 19/3/2(土) 14:40 発言[未読]

【80498】シート名と同じ文字列のセル行位置を取得...
質問  狛ちゃん E-MAIL  - 19/2/21(木) 20:29 -

引用なし
パスワード
     With Activesheet
     sheetName = ActiveSheet.Name
     k = Worksheet.Match(sheetName, activesheet.Range("Q8:Q14"), False, 0)
  
  End With

と記述しましたら、オブジェクトが有りませんとのエラーメッセージがでます。
この場合のオブジェクトの意味が理解できていません。
アドバイスお願いします。

【80499】Re:シート名と同じ文字列のセル行位置を...
発言  γ  - 19/2/21(木) 21:37 -

引用なし
パスワード
   Matchはワークシート関数ですよね。
でしたら、
k = WorksheetFunction.Match(・・・
とするのでは?
引数の数もそれでよいのか確認してください。

【80500】Re:シート名と同じ文字列のセル行位置を...
発言  狛ちゃん E-MAIL  - 19/2/21(木) 22:26 -

引用なし
パスワード
   ▼γ さん:
>Matchはワークシート関数ですよね。
>でしたら、
>k = WorksheetFunction.Match(・・・
>とするのでは?
>引数の数もそれでよいのか確認してください。

早速の回答有難うございます。
引数の数が一致していませんとのエラーメッセージが表示されました。

【80501】Re:シート名と同じ文字列のセル行位置を...
発言  γ  - 19/2/21(木) 22:35 -

引用なし
パスワード
   再度書きます。
>引数の数もそれでよいのか確認してください。

【80504】Re:シート名と同じ文字列のセル行位置を...
質問  狛ちゃん E-MAIL  - 19/2/22(金) 23:27 -

引用なし
パスワード
   ▼γ さん:
>再度書きます。
>>引数の数もそれでよいのか確認してください。

引数は間違いないと思います。
MATCH関数に対応するVBの関数は何でしょうか?
教えて頂ければ幸いです。

【80505】Re:シート名と同じ文字列のセル行位置を...
発言  マナ  - 19/2/22(金) 23:48 -

引用なし
パスワード
   ▼狛ちゃん さん:

>引数は間違いないと思います。

Matchの部分にカーソルをおき、F1キーを押してみてください。
わたしのヘルプでは、引数は3個です。

【80512】Re:シート名と同じ文字列のセル行位置を...
発言  γ  - 19/2/24(日) 8:51 -

引用なし
パスワード
   すでに適切なコメントをいただいています。
遅ればせながら追加コメントをします。

>MATCH関数に対応するVBの関数は何でしょうか?
そういうVBの関数はありません。

VBAの中でMatch関数を使えるようにしたものが、
(Application.)WorksheetFunction.Matchです。
Applicationは省略することが多いですね。

下記を参照。
ht tps://www.moug.net/tech/exvba/0100035.html
↑スペースを詰める。

--------------------------------------
最初の質問への回答の補足。

> k = Worksheet.Match(sheetName, activesheet.Range("Q8:Q14"), False, 0)
Worksheet.Matchのところですが、
(1)Worksheetオブジェクトのつもりだとして、
 単にWorksheetと書くことは無いと思って頂いて結構です。
 Worksheets("Sheet1")
 Worksheets(1)
 などと書くことが多いです。

(2)重要なのは、Worksheetオブジェクトのつもりだとして、
  Worksheetオブジェクトは、Matchというメソッド、プロパティは持ちません。
  オブジェクト - メソッド
  オブジェクト - プロパティ の組み合わせは決まっており、
  自分で勝手に追加することはできません。
  そういう正当な組み合わせであるかどうかに気をつけることが大切です。

ヘルプで調べたり、最初は例文を一部を変えて使ってみるという経験を
積み重ねることが必要でしょう。

---------------------------------------
また、
Option Explicit
をモジュールの一行目に挿入するようにして下さい。
そうすれば、今回のような未宣言の変数には警告が出て、
しかも場所を特定してくれますから、原因が直ぐに判明します。

今回の例で言えば、Worksheetがハイライトされ、
「変数が定義されていません」とエラーになるはずです。
Excel君は、ユーザーが使った変数と見なし、
その宣言がされていないと指摘しています。
ミスの早期発見につながります。

なお、
ツール − オプション − 編集 で
「変数の宣言を強制する」にチェックを入れておけば、
モジュールを作成した時点で、Option Explicitが自動的に挿入されるので、
手間が省けます。
一度だけチェックを入れておけば、以後、気にする必要はありません。
これは必ず実行してください。参考程度の聞いて貰っては困ります。

ht tp://officetanaka.net/excel/vba/beginner/06.htm
を参照。

【80548】Re:シート名と同じ文字列のセル行位置を...
質問  狛ちゃん E-MAIL  - 19/3/2(土) 11:56 -

引用なし
パスワード
   アドバイスにあるモーグのmatch関数と同じ構文を使用してみました。
ワークシート名と表内の文字列に差があることも分かったのですが
安定した動作が得られません。
安定しない状況に
1)マッチした行数が得られた場合でもエラーメッセジが表示されることあります。
2)繰り返して作動してみると行数そのものも得られない場合があります。

このように動作が安定しない理由としては何が考えられるでしょうか?

【80549】Re:シート名と同じ文字列のセル行位置を...
発言  γ  - 19/3/2(土) 14:40 -

引用なし
パスワード
   ▼狛ちゃん さん:
>アドバイスにあるモーグのmatch関数と同じ構文を使用してみました。

その最後にあるSample3を参考にしてください。
Application.Match (Worksheetfunction.Matchでなく)を使った
マッチしない場合の対応方法が役に立つはずです。

>このように動作が安定しない理由としては何が考えられるでしょうか?
詳細なコメントを希望するなら、現在のコードを提示することです。
回答者が当て推量で回答しても益がないでしょう。

405 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free