匿名質問者

エクセルのVBAの件で質問です。


先日別の方がなさっている以下の質問を参考に、同様のものを作成しましたがエラーが出ます。どなたか、間違っているところを教えてください。

初心者が恥ずかしいことをしていると思いますが・・・、よろしくお願いします。

★やりたいこと
A列に並んでいるデータを36行毎に最小値を選び、削除していく。

★小生の作成したVBA
For i = 0 To 500
s = WorksheetFunction.Min(Range(Worksheets("グラフ").Cells(3 + 36 * i, 1), Worksheets("グラフ").Cells(38 + 36 * i, 1)))
ret = Application.WorksheetFunction.Match(s, Range(Worksheets("グラフ").Cells(3 + 36 * i, 1), Worksheets("グラフ").Cells(38 + 36 * i, 1)), 0)
Cells(ret, 1).Clear
Next i

★小生の参考にした別の方の質問
vbaで指定範囲の最小値を探し、最小値が入ったセルの行番号を取得する方法を教えてください。
WorksheetFunction.min(Range(Cells(i, 1), Cells(i +10, 1)))
これで最小値が取れるとこまで来たのですが、
このセルの行番号を取得するにはどうしたらいいですか?

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/03/04 20:10:04

ベストアンサー

匿名回答1号 No.1

Microsoftのサポートページを参考にしてください。

[XL] 最大値または最小値を持つセルのアドレスを返す
http://support.microsoft.com/kb/139574/ja

その他の回答1件)

匿名回答1号 No.1

ここでベストアンサー

Microsoftのサポートページを参考にしてください。

[XL] 最大値または最小値を持つセルのアドレスを返す
http://support.microsoft.com/kb/139574/ja

匿名回答4号 No.2

どうして 本気の質問を 匿名でするのか 理解できない

回答者も 真剣に答えたく無くなるよ 回答も 付きにくいし

匿名回答1号

どうしてこんなこと書くのか理解できない

あなたが答えたくないだけなのに回答者全員みたいなこと言わないで!

関数サンプルを提示しただけの私は真剣じゃないとでも言うの?失礼しちゃうわ!

2013/02/26 02:39:04
  • 匿名回答2号
    匿名回答2号 2013/02/25 21:15:37
    関数の結果が何であるかをきちんと理解することが先決だと思います。
    VBはオブジェクト指向といい難いですが、BASICとは大きく違います。
    そこを認識していないと、進めません。
    具体的な関数を作る前に学んでおきましょう。
  • 匿名回答3号
    匿名回答3号 2013/02/25 22:28:18
    >初心者が恥ずかしいことをしていると思いますが・・・
    そんなことないから、id さらして質問なさいな。ポイントをつける必要はないから。
    id さらしていれば、前の質問であそこが分かってなかったから、とか、回答者が気を利かせる余地がいっぱい出てくるので。
  • 匿名質問者
    匿名質問者 2013/02/26 20:38:27
    皆様、早速のご回答をありがとうございます。
    2号様が書いてくださったように、関数の結果を一つずつ出力させて理解していき、
    なんとか欲しい動くVBAを作ることができました。

    ただ、正直なところ完全に理解したとは言い難い状態です(汗)

    1号様に教えて頂いたページや入門書などを参考に、
    基礎のところを勉強していきます!

    3号様 了解しました。
    実は、この手の質問に投稿するのが初めて匿名としてしまいました。
    idさらすメリットってたくさんあるのですね。
    次回からはからならずそうしてみます。

    因みに、動いたVBAは以下です。
    たぶん基礎ができていないあまりいいものではないのだと思います^^;
    最小値を消せなかったので、-1としました。

    Sheet1.Activate

    For i = 0 To 500

    Dim ss1 As Variant
    Dim rr1 As Variant

    ss1 = WorksheetFunction.Min(Range(Worksheets("グラフ").Cells(3 + 36 * i, 1), Worksheets("グラフ").Cells(38 + 36 * i, 1)))
    rr1 = WorksheetFunction.Match(ss1, Range(Worksheets("グラフ").Cells(3 + 36 * i, 1), Worksheets("グラフ").Cells(38 + 36 * i, 1)), 0)
    Cells(3 + 36 * i + rr1 - 1, 1).Value = -1

    Next i
  • 匿名回答2号
    匿名回答2号 2013/03/04 14:15:15
     一歩前進、良かったですね。

     気がついたことをコメントします。
    1.DimはForループの外が見やすいですね。
    2.最小値を消すにはNullが良いと思います。
    3.定数は意味があるので変数定義した方がスッキリして、保守や応用に便利です。
      3は処理開始行、36は処理単位行数ですね。
      38は処理単位の最後の行を算定させるためですが、
      処理開始行と処理単位行数から計算して定数化しましょう。
    4.ワークシート関数は便利ですが、この処理の場合はセルの位置を知るためにMatch関数を必要とします。
      VBAではプロパティで値も位置も知ることができますので、それを活かすのが良いでしょう。

     では、さらなる進歩を!
  • 匿名質問者
    匿名質問者 2013/03/04 16:00:37
    2号様
    非常にスカッとするご回答、非常にうれしいです。

    具体的な勉強箇所を教えて頂け、励みになります。
    頑張ります。

    いろいろと、ご丁寧にありがとうございました!

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

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

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

回答リクエストを送信したユーザーはいません