[[20020508193711]] 『100〜200の間で空いている番号を探したい場合?』(miya) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『100〜200の間で空いている番号を探したい場合?』(miya)


 マクロというかVBAでプログラムを組めばできますが、数も少ないみたいなので、

 そのデータをどこか空いている列にコピーして並べて、昇順に並べ替えすれば

 どうですか?

 それとも100〜200までで同じ数字をいくつもダブって使ってるのかな?

 (ramrun)


 私は多分数値がちゃんと並んでいて、他の列で使っていない数字を探したいのだと

 思いますが、起案者の回答待ちですね。

 (kazu)


  (miya)ですが、(kazu)さんの言う通りです。

 実際は、100000〜993100で検索の間隔を10で空いている番号を探したい時は

 どうすれば良いのか解りません。(思いっきり初心者ですいません)


 もう少し聞いていいですか?

 100000 100010 100030 100040 .. 993090 993100

 100001 100011 100031 100041    993091 993101

 100002 100012 100032 100042    993092 993102

    .

    .

 100008 100018 100038 100048    993098 993108

 100009 100019 100039 100049    993099 993109

 こんな感じに数値が並んでいるってことかな。

 例で書いたものは100020を抜いてあるから、それを検索結果としてどこかに表示したい

 ってことですか?

 miyaさんが考えるフォーマット(数値の配置)がいまいちつかめないので(汗)。

 (ramrun)


 miyaさんの思っているイメージは

 100000  bbb  100

 100010  ccc  200

 100020

 100030  aaa   50

 こうなっていて、空いている10020を見つけたいのでは?

 (kazu)


 あ〜 なるほど。 数値そのものじゃなくて、それを行番号とした値があるわけですね。

 もしそうだとすると、空白を検索すればいいんじゃないかな?

      A     B    C

 1 100000  bbb  100

 2 100010  ccc  200

 3 100020

 4 100030  aaa   50

 B列を選んで、メニューから編集>検索。

 検索する文字列には何も入力せず、次を検索ボタンをどんどん押していったら...

 そういうのダメですか?

 実は今月の日経パソコンにちょうど、表の空白をチェックして、備考欄に『未記入あり』って

 表示するマクロが載ってるんだけど...

 フォーマットがハッキリしないと書けない(汗)。

 (ramrun)


 (miya) です。無知でどうもすいません。

  A B C

  1 100000  bbb  100

  2 100010  ccc  200

 3 100020

  4 100030  aaa   50

  5 100050 ddd 300

 で、A列の100040番を空き番として検索したい場合はどのようにしてら良いのですか?

 で宜しいですか。

  


 ↓のマクロを使ってみてください。

マクロの登録は[[20020507201512]]を参考に。

マクロを登録した後に、ツール>マクロ>マクロ でmacroが選択された状態で

オプションボタンより、ショートカットキーを割り付けることが出来ます。

ctrl+aと設定すれば、キーボードよりctrl+aでmacroを実行できるようになります。

 使い方は↑の例でいうと、セルA1を選択してmacroを実行するだけです。

簡単に組んだので検索は上から1つずつ、数値が連続して歯抜けていたり同じ数値が

登録されていたりというときは正しい結果はでません。

 (ramrun)

 Sub macro()

    Dim x As Variant

    Dim y As Integer

    x = Val(ActiveCell.Value)

    y = 10

    Do While (1)

        ActiveCell.Offset(1, 0).Select

        If ActiveCell.Value = Empty Then Exit Sub

        If Val(ActiveCell.Value) <> x + y Then

            If vbNo = MsgBox(x + y & "がありません。次を検索しますか?", _

            vbYesNo, "検索") Then Exit Sub

        End If

        x = Val(ActiveCell.Value)

    Loop

 End Sub


 こんな手ではだめでしょうか?

  A B C D

  1 100000  bbb  100

  2 100010  ccc  200

 3 100020

  4 100030  aaa   50 100040

  5 100050 ddd 300

 セルD1 に『=IF(A1+10=A2,"",A1+10)』でD2から下は単にD1をドラッグコピーします。

 すると抜けているところに『100040』が表示されます。

 (kazu)


 (miya)です。(ramrun)さん(kazu)さんありがとうございます。大変勉強になりました。

 とりあえず、(kazu)の方法を用いる事にしました。エクセルは奥が深いですね!ところで次

 に上げるような事も出来るのでしょうか?

 頭文字   検索範囲

  あ  100000〜122490

  い  122490〜144990

  う  144990〜159990

  :     :

  :     :

  :     :

  わ  949990〜950000

 『あ』が100000〜122490でと言う様に番号が決っていたら、上に書いてある(kazu)さんや

 (ramrun)の方法では当然違いますよね?


 違うと言えば違います。

 でも全く違うわけではなくて、どちらも少し変えれば使えます。

 縦が横になっただけですから...

 kazuさんが紹介しているやり方では、検索用の行が必要になるけど、関数の使い方自体は

 簡単なものなので参考書等で調べれば、すぐ改造できると思いますよ。

 プログラムは Do while〜 のループを追加してますけど、連続で数値が歯抜けていた場合に

 検出できるようにしました。

 検索の実行は1行ずつです。

 ↑の例だと100000を選択して実行、122490を選択して実行、、、というように、

 各先頭行のセルを選択してマクロを実行すればOKです。

 あと、あ行だと122300〜122490のように最後の方が連続して歯抜けた場合は検索しません。

 そういうのは検索するまでもないかなと思ったので...

 (ramrun)

 Sub macro()

    Dim x As Variant

    Dim y As Integer

    x = Val(ActiveCell.Value)

    y = 10

    Do While (1)

        ActiveCell.Offset(0, 1).Select

        If Val(ActiveCell.Value) = Empty Then Exit Sub

        Do While (1)

            If Val(ActiveCell.Value) <> x + y Then

                If vbNo = MsgBox(x + y & "がありません。次を検索しますか?", _

                vbYesNo, "検索") Then Exit Sub

                x = x + y

            Else: Exit Do

            End If

        Loop

        x = Val(ActiveCell.Value)

    Loop

 End Sub

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.