過去ログ

                                Page     892
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼行番号を変数にするには?  ポリンキー 03/3/18(火) 10:10
   ┗Re:行番号を変数にするには?  ポンタ 03/3/18(火) 10:41
      ┗ポンタさんいつもありがとうございます。  ポリンキー 03/3/18(火) 11:55
         ┗Re:ポンタさんいつもありがとうございます...  ポンタ 03/3/18(火) 12:24
            ┗追伸  ポンタ 03/3/18(火) 12:53
               ┗ありがとうございました。  ポリンキー 03/3/18(火) 14:22

 ───────────────────────────────────────
 ■題名 : 行番号を変数にするには?
 ■名前 : ポリンキー
 ■日付 : 03/3/18(火) 10:10
 -------------------------------------------------------------------------
   初心者で度々お世話になっております。
まだ変数の使い方があまりよくわかっていないので、教えてください。


ある文字列を検索して、その次の行番号を変数にして、
For i = ★ To Range("B65536").End(xlUp).Row - 3
    ↑
    ココに入れたいと思っています。

例えばB列の49行目に検索する文字列(DATA_START)があって、50行目からデータが
始まっている場合、★には50を入れたいのです。

質問がわかりにくいかもしれませんが、よろしくお願いいたします。
 ───────────────────────────────────────  ■題名 : Re:行番号を変数にするには?  ■名前 : ポンタ  ■日付 : 03/3/18(火) 10:41  -------------------------------------------------------------------------
   ポリンキーさん、こんにちは。

私がコメントを入れないのが良くないんですね、きっと。

こんな感じでいかがでしょう?

Sub test()
  Dim MyRange As Range, i As Long
  'B列を対象に"DATA_START"を検索
  Set MyRange = Range("B:B").Find("DATA_START", , xlValue, xlWhole)
  'もし見つかったら
  If Not MyRange Is Nothing Then
    '見つかったセルの次の行から
    For i = MyRange.Row + 1 To Range("B65536").End(xlUp).Row - 3
       :
       :
 ───────────────────────────────────────  ■題名 : ポンタさんいつもありがとうございます。  ■名前 : ポリンキー  ■日付 : 03/3/18(火) 11:55  -------------------------------------------------------------------------
   ▼ポンタ さん:

 前回教えていただいたものも勉強になっています。いつもありがとうございます。
おまけに注釈までご丁寧につけてくださり、大変助かりました。
職場でVBAの分かる人が一人もいないのに作らなければならず、(私もわからないのに!)おまけになるべく短くしろと言われたもので、変数を代入するだけでどうにかなれば・・・と思ったのです。おかげで、変数の使い方がよくわかりました。どうもありがとうございました。

 度々ご面倒をおかけしますが、検索について質問があります。
検索したい文字は*COUNTなんですが、その前に*GROUP_COUNTという文字があって、
実行してみると、
Set MyRange = Range("B:B").Find("*COUNT", , xlValue, xlWhole)
のところで*GROUP_COUNTを検索してしまいます。ですから、検索した値の次の行
をMsgBoxで表示させてみると、文字列が入っていて、始まりのデータが入らないのです。
Findメソッドのところを調べてみたのですが、よくわかりません。こういう場合どうすればよいですか?
 ───────────────────────────────────────  ■題名 : Re:ポンタさんいつもありがとうございます...  ■名前 : ポンタ  ■日付 : 03/3/18(火) 12:24  -------------------------------------------------------------------------
   >検索したい文字は*COUNTなんですが、その前に*GROUP_COUNTという文字があって、
>実行してみると、
>Set MyRange = Range("B:B").Find("*COUNT", , xlValue, xlWhole)
>のところで*GROUP_COUNTを検索してしまいます。ですから、検索した値の次の行

特殊な条件が重なりましたね。

xlWhole は「完全に同一なセルだけを検索する」というオプションなので、
普通は指定した文字意外にはヒットしないのですが、

「*(アスタリスク)」はワイルドカードとして指定できるため、
*GROUP_COUNT にヒットしてしまったようです。

(以下、ヘルプからの抜粋)

文字列または数値の検索に使用できるワイルドカード文字
部分的に等しい文字列、または一部の数字が等しい数値を検索するには、ワイルドカード文字を使います。
ワイルドカード文字は 1 つまたは任意の数の文字を表します。

ワイルドカード文字 検索する文字列
? (疑問符) 疑問符と同じ位置にある任意の 1 文字
たとえば、「sm?th」と入力すると "smith" や "smyth" が検索されます。
* (アスタリスク) アスタリスクと同じ位置にある任意の数の文字
たとえば、「*east」と入力すると "Northeast" や "Southeast" が検索されます。
~ (チルダ) (?、*、または ~ の前に入力) 疑問符、アスタリスク、またはチルダ
たとえば、「fy91~?」と入力すると "fy91?" が検索されます。

(ここまで)

で、対応策ですが、ヘルプファイルにあるように

Set MyRange = Range("B:B").Find("*COUNT", , xlValue, xlWhole)

Set MyRange = Range("B:B").Find("~*COUNT", , xlValue, xlWhole)
                 ^^^^^^^^^
としてあげれば、「*COUNT」だけにヒットします。
 ───────────────────────────────────────  ■題名 : 追伸  ■名前 : ポンタ  ■日付 : 03/3/18(火) 12:53  -------------------------------------------------------------------------
   マクロの実行前のシートレイアウトと、
実行後のシートレイアウトがはっきりすると、
そのように動くコードをお教えできると思います。
 ───────────────────────────────────────  ■題名 : ありがとうございました。  ■名前 : ポリンキー  ■日付 : 03/3/18(火) 14:22  -------------------------------------------------------------------------
   ▼ポンタ さん:
できました!ありがとうございました。*が原因だったんですか。そんなことがあるんですね。今日が期限だったので無事間に合いました。これも、全てポンタさんのお陰です。
うれしー。これからはなるべくご迷惑をおかけしないように、せめてヘルプとマニュアルを読んで理解できるように勉強したいと思います。本当にどうもありがとうございました。
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 892