• ベストアンサー

エクセル2003マクロ

お世話になります。 エクセル2003のマクロで、 ある範囲(たとえば、Cells(1,1)~Cells(1,10)の中の最小値のセルの(値でなく)アドレスを拾う方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 私は、数年マクロを書いてきて、初めて知りました。最小値が、0の場合は、Find メソッドでは取れないのですね。(それをご存知で質問されていたのですか?足元を掬われそうです^^;) ループという方法もあるけれど、それでは、ちょっとレベルが低くみられそうです。 ただし、これは、マクロと同じことが、関数でも出来るような気がします。 以下は、範囲に同値がある場合は、最初に見つけたものしかアドレスが出せません。 '----------------------------------------- Sub FindMinimum() Dim r As Range Dim myVal As Double Dim i As Integer Set r = Range(Cells(1, 1), Cells(1, 10)) If WorksheetFunction.Count(r) = 0 Then Exit Sub  myVal = WorksheetFunction.Min(r)  On Error Resume Next  i = WorksheetFunction.Match(myVal, r, 0)  On Error GoTo 0  If i > 0 Then   MsgBox r.Cells(i).Address  End If  Set r = Nothing End Sub '----------------------------------------- Sub FindMinimum2() '失敗の見本 Dim r As Range Dim r2 As Range Dim myVal As Double Set r = Range(Cells(1, 1), Cells(1, 10)) If WorksheetFunction.Count(r) = 0 Then Exit Sub  myVal = WorksheetFunction.Min(r)  Set r2 = r.Find(myVal, LookIn:=xlValues)  MsgBox r2.Address  Set r = Nothing End Sub

spaghetti09
質問者

お礼

回答ありがとうございます。 >(それをご存知で質問されていたのですか? いやいや、私とてもそーゆーところとかけ離れたマクロ初心者で、 まったく存知あげておりませんでしたですー。 いま作っているプログラムが終わったら基礎からマクロを見直そうと 思っておりますー。 おかげさまで進行しました。有難う御座います。

その他の回答 (1)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

Sub test() Set Rng = Range(Cells(1, 1), Cells(1, 10)) If Application.WorksheetFunction.Count(Rng) = 0 Then MsgBox "数字がないわ", vbCritical, "( ̄ロ ̄;)!! " Exit Sub End If mn = Application.WorksheetFunction.Min(Rng) Set mnc = Rng.Find(What:=mn, LookIn:=xlValues, LookAt:=xlWhole) MsgBox mnc.Address Set mnc = Nothing End Sub

spaghetti09
質問者

お礼

Sub thanks() MsgBox "有難う御座います。M(__)M" & Chr(13) & "参考にさせて頂きます。" End Sub

関連するQ&A

  • エクセル2003でのマクロで質問です。

    エクセル2003でのマクロで質問です。 セル(2,22)には"1"という値が入っています。 セル(2,13)には"20100521"という値が入っています。 セル(3,13)には"20100521"という値が入っています。 セル(4.13)には"20100525"という値が入っています。 セル(5,13)には"20100525"という値が入っています。 このようなときに セル(3,22)の値は"1" セル(4,22)の値は"2" セル(5,22)の値は"2" となるように以下のようなマクロを作成しました。 Dim i As Integer, j As Integer, date1 As String i = 2 j = 3 Do While Cells(i, 1).Value <> "" If Cells(i, 13) = Cells(j, 13) Then Cells(j, 22) = Cells(i, 22) Else Cells(j, 22) = Cells(i, 22) + 1 End If i = i + 1 j = j + 1 Loop しかし、結果は セル(3,22)の値は"2" セル(4,22)の値は"3" セル(5,22)の値は"4" となってしまいます。 どこに原因があるのかわかりません。 助けてください。 宜しくお願いします。

  • エクセルのマクロでグラフを作る方法

     エクセルのマクロでプログラムを組んでグラフを作るときXの値の範囲とYの値の範囲をそれぞれ指定する形でマクロをつくりたいのですがなかなかうまく行きません。  また、大量のグラフを一気に作りたいのでcells()を使って作りたいのですが、どなたかご存知でしたら教えてください。

  • エクセルのマクロについてなのですが…

    現在マクロを使用して数字の入力を行おうとしております。 セルのB2は変数iを入力(例えば5を入力) 値を入力する範囲はセルのCells(1,1)からCells(i,1)(下記あ~お)に 1~iまでの数字を重複する事無く入力します。 なお、セルのCells(1,1)からCells(i,1)に入力する数字は Rndを使用して乱数にしたいのですが 乱数の入力までは何とか辿り着いたのですが どうしても重複してしまいます。 ネットで調べたのですが、コピレば使えるのですが マクロの意味が良く分からないので 出来れば行ごとの意味も教えていただきたいのですが… ワガママばかりで申し訳ありません。 A B C D 1 あ 2 い 5 3 う 4 え 5 お 6 ・ ・ ・

  • エクセルのマクロについて教えてください

    エクセルのマクロで教えてほしいのですが、たとえば、指定した範囲の中でK列の値が"1”のとき、列F~Kの値をクリアするマクロはどう組めばよいでしょうか? 逆に、指定した範囲の中でK列の値が"1”以外のとき、列F~Kの値をクリアするマクロもどう組めばよいでしょうか?

  • Excelマクロ

    Excelマクロで1行が選ばれたかを判定したいのですが セルであらわすとCells(0,1)と(0があるのかわかりませんが)なるところがセレクトされているかを知りたいです 誰か教えていただけるとうれしいです

  • Excelのマクロについて教えてください。

    私がやりたいマクロは、 ある範囲の中でセルの中の数値が「0」以上のときは四捨五入をしなさい。 というマクロを組みたいのですが分かるかたがいましたら教えてください。 Excel2000です。 よろしくお願いします。

  • エクセルのマクロ

    Sub test() x = Selection.Row y = Selection.Column z = Selection.Columns.count Range(Cells(x, y), Cells(x, y + z - 2)).Select Selection.ClearContents End Sub 上記マクロは、同一行の連続するセルを二つ以上選択状態にして実行すると、範囲内の最も右にあるセルの値のみが残って他のセルの値は全て消去されます。 上記マクロを、複数のセレクションに対して対応できるようにするには、どうすればいいでしょうか? 例えば、c1~f1、d3~h3、e10~g10を選択して実行すると、f1とh3とg10の値のみ残って他の値は消えるということです。

  • エクセルのマクロについて

    エクセルのマクロ実行についてですが、 例えば、 E1セルの値が1ならばこうする(マクロ名 E1セル1) E2セルの値が2ならばこうする(マクロ名 E1セル2) E3セルの値が3ならばこうする(マクロ名 E1セル3) というマクロを別々に作りました。 これをボタンで実行する時に、 If Range("E1").Value = 1 Then ElseIf Range("E1").Value = 2 Then 2行目には作ったマクロを全部貼り付けないといけないのでしょうか? それとも簡単にこの場合は、マクロ名E1セル1を実行するという命令することができるのでしょうか? できるのであれば、入力方法を教えてください。 質問が分かりにくいと思いますが、よろしくお願いします。

  • エクセルのマクロについて

    お世話になります。 エクセルで、列に入力された値が有る範囲を超えた場合、 その値のみを赤色に変換したいのですが、 どのようにマクロを組めばよろしいでしょうか。 VBAに関しては、全くの初心者ですので わかりやすく教えて頂ければ幸いです。

  • エクセルのマクロのセルの範囲指定

    エクセルのマクロで、うまくセルの範囲を指定できません。 例えば、 Range(Cells(5.6), Cells(8, 7)) = "AAA" と、指定した時は、F5:G8のセルにAAAという文字を代入するつもりで書いています。 ところが、マクロを実行すると、F1:G8まで、AAAの文字が代入されます。 どうしてでしょうか。 宜しくお願い致します。

専門家に質問してみよう