エクセルマクロ offsetの使い方

解決済みの質問

エクセルマクロ offsetの使い方

Sub tess()

With Worksheets("Sheet1")
Cells(1,11)=Application.WorksheetFunction.Max(Range("A1:A10"))
End With
End Sub

上記でA1~A10のうちの最大値1つがA12に表示されます。
ここで上記コードに手を加えて、例えばA12にA8の”下のセル1つの値”を表示したいのですが、
Cells(1,11)=offset.(-1, 0).Application.WorksheetFunction.Max(Range("A1:A10"))
と”offset(-1, 0)” を加えても動きません。WorksheetFunctionを加えても動きません。

offsetを入れる位置と使い方がわかりません。是非よろしくお願いいたします。(OS:WindowsXP、Excel2003)

投稿日時 - 2011-05-17 18:25:44

連想キーワード:

QNo.6744478

すぐに回答ほしいです

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

何度もお邪魔します。

なかなかご希望に添えないようなので・・・
もう一度質問文を読み返してみました。

もしかして行・列の配置が全く逆になっているのではないのでしょうか?

もしそうであれば

Sub test1()
Dim i, j As Long
For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To 10
On Error Resume Next
If Cells(i, j) = WorksheetFunction.Max(Range(Cells(1, j), Cells(10, j))) Then
Cells(11, j) = Cells(i - 1, j)
End If
Next i
Next j
End Sub

またはOFFSETを使いたいとすれば

Sub test2()
Dim i, j As Long
For j = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
For i = 1 To 10
On Error Resume Next
If Cells(i, j) = WorksheetFunction.Max(Range(Cells(1, j), Cells(10, j))) Then
Cells(11, j) = Cells(i, j).Offset(-1)
End If
Next i
Next j
End Sub

※ 前回(No.2)のコードは各行の1列目~10列目(A列~J列)の最大値の一つ左列のセルを11列目(K列)に表示!

※ 今回のコードは各列の1行目~10行目の最大値の一つ上の行のセルを11行目に表示!

としています。

尚、前回同様1行目に最大値がある場合はエラーとなり、何も表示されないはずです。

投稿日時 - 2011-05-18 14:36:05

お礼

お忙しい中、ありがとうございます。明日試してみたいと思います。また結果をお返事いたします。

投稿日時 - 2011-05-23 00:43:19

ANo.3

0人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

ANo.2

No.1です!
たびたびお邪魔します。

どうしてもOFFSETを使うとすれば、こんな感じですかね?
(最大値は複数なし。A列に最大値はないとしています。)

Sub test1()
Dim i, j As Long
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To 10
On Error Resume Next
If Cells(i, j) = WorksheetFunction.Max(Range(Cells(i, 1), Cells(i, 10))) Then
Cells(i, j).Select
Cells(i, 11) = Selection.Offset(, -1)
End If
Next j
Next i
End Sub

上記と同様の考え方ですが、OFFSETを使わず単に

Sub test2()
Dim i, j As Long
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
For j = 1 To 10
On Error Resume Next
If Cells(i, j) = WorksheetFunction.Max(Range(Cells(i, 1), Cells(i, 10))) Then
Cells(i, 11) = Cells(i, j - 1)
End If
Next j
Next i
End Sub

でも同様の結果になると思います。

もし、最大値が複数あった場合は最終列の最大値の1列前が表示されると思います。
それからA列に最大値がある場合は空白になります。
参考になれば良いのですが・・・m(__)m

投稿日時 - 2011-05-17 22:18:25

お礼

ありがとうございます。試してみましたがうまくいきませんでした。上記の
If Cells(i, j) = WorksheetFunction.Max(Range(Cells(i, 1), Cells(i, 10))) Then
Cells(i, 11) = Cells(i, j - 1)
の中でCells(i,j)のままですと、Cells(i,1)~Cells(i,10)の最大値の直ぐ左隣が表示できません。悩んでおります m(__)m

投稿日時 - 2011-05-18 10:59:59

ANo.1

こんばんは!
直接の回答ではないのですが・・・

>上記でA1~A10のうちの最大値1つがA12に表示されます

に関してですが、最大値が表示されるのはK1セルになります。

それからOFFSETの使い方として、基準のセルから 何行下・何列右 という使い方になりますので
(マイナスの場合は上・左ということになります)

仮にA1セルから2行下・3列右(D3セル)の場合は
Cells(1,1).Offset(2,3)・・・
といった使い方になります。

質問内にあるOFFSETの使い方がはっきり判らないのですが、もしかして下記のようなことがご希望なのですかね?

Cells(1, 11).Offset(1) = Application.WorksheetFunction.Max(Range("A1:A10"))

もしそうであれば、Cells(1, 11) 「K1セル」の1行下のセル(K2セル)にA1~A10の最大値が表示されます。

この程度ですが、参考にならなかったらごめんなさいね。m(__)m

投稿日時 - 2011-05-17 20:12:19

補足

上記1部訂正いたします。(誤)98→(正)9

(Sheet1) (1)(2)(3)(4)(5)(6)(7)(8)(9)(10) (11)
( A ) 4  2   5  2   1  9  7  5  2   5   1
( B )
( C )
( D )

この場合、A1~A10までの最大値は”9”なので、その隣のA5の"1"をA11に表示したいと思います。また、同じ様に下位の行(B以降について)もループして表示したいのです。
よろしくお願いします。

投稿日時 - 2011-05-17 21:42:23

お礼

はじめまして。ご回答ありがとうございます。それから説明不足ですみません。

(Sheet1) (1)(2)(3)(4)(5)(6)(7)(8)(9)(10) (11)
( A ) 4  2   5  2   1  9  7  5  2   5   1
( B )
( C )
( D )

この場合、A1~A10までの最大値は98なので、その隣のA5の"1"をA11に表示したいと思います。また、同じ様に下位の行(B以降について)もループして表示したいのです。
よろしくお願いします。

投稿日時 - 2011-05-17 21:40:51

あわせてチェックしたい
  • エクセルマクロ ...
  • エクセル マクロ 行 ...
  • エクセル マクロ シートの集計 ...
PR

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら