dポイントプレゼントキャンペーン実施中!

ネットや本でマクロを作成しているいて、あまりマクロの意味も分からず作成しています。
下記のマクロの記述を繰り返しマクロで記述したいので、御指導願います。(H列で終わっていますが、できれば隣のセルが空白になるまで繰り返すようにしたい。)

あと、自分の欲しい内容に修正出来るように、記述の意味などもコメントして頂けたら嬉しいのですが・・・。よろしくお願いします。

Sub 最終履歴を表示する(2)()
Range("C4").NumberFormatLocal = "G/標準"
Range("C4").Value = Application.WorksheetFunction.Max(Range("C6:C10000"))
Range("C4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole
Range("C4").NumberFormatLocal = "yyyy/m/d;@"
Range("D4").NumberFormatLocal = "G/標準"
Range("D4").Value = Application.WorksheetFunction.Max(Range("D6:D10000"))
Range("D4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole
Range("D4").NumberFormatLocal = "yyyy/m/d;@"
Range("E4").NumberFormatLocal = "G/標準"
Range("E4").Value = Application.WorksheetFunction.Max(Range("E6:E10000"))
Range("E4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole
Range("E4").NumberFormatLocal = "yyyy/m/d;@"
Range("F4").NumberFormatLocal = "G/標準"
Range("F4").Value = Application.WorksheetFunction.Max(Range("F6:F10000"))
Range("F4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole
Range("F4").NumberFormatLocal = "yyyy/m/d;@"
Range("G4").NumberFormatLocal = "G/標準"
Range("G4").Value = Application.WorksheetFunction.Max(Range("G6:G10000"))
Range("G4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole
Range("G4").NumberFormatLocal = "yyyy/m/d;@"
Range("H4").NumberFormatLocal = "G/標準"
Range("H4").Value = Application.WorksheetFunction.Max(Range("H6:H10000"))
Range("H4").Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole
Range("H4").NumberFormatLocal = "yyyy/m/d;@"
End Sub

A 回答 (3件)

各データの詳細がわかりませんので、とりあえずご質問の中で記述されたままの処理を繰り返します。


----------
Sub 最終履歴を表示する()
Dim c as Integer '列番号をcという名前の数字変数として定義します。
c = 3 'C列(先頭から3番目の列)から始まるので最初は3
 '以下、Do~Loopで、6行目のセル(C6,D6,E6,…)が空白でない限り列の処理を繰り返します。
Do While Cells(6, c).Value <> ""
With Cells(4, c) '4行目のセル(C4,D4,E4,…)に関して以下のように設定します。
.NumberFormatLocal = "G/標準"
.Value = Application.WorksheetFunction.Max(Range(Cells(6, c), Cells(10000, c)))
.Replace What:="0", Replacement:="履歴無し", LookAt:=xlWhole
.NumberFormatLocal = "yyyy/m/d;@"
End With '4行目のセルに関する記述を終了します。
c = c + 1 '次の列を処理するため列番号を1つ加算します。
Loop
End Sub
    • good
    • 0
この回答へのお礼

この質問の為に貴重な時間を割いて頂き、ありがとうございました。
詳しく説明されていたので、ちょっとした修正もすぐにできました。
役に立ちそうな事例と思うので、本当に嬉しいです。

お礼日時:2012/11/01 01:38

こんばんは。



>連続したデータとはどんなものでしょうか?
空の列・行のない四角形のデータです。つまり、CurrentRegion で囲まれる範囲
ActiveSheet.Range("C6").CurrentRegion.Select で選択できる範囲。

>j = .Range("C6").CurrentRegion.Columns.Count - 1

四角形のデータの左上端をC6とした場合のCurrentRegion の列の数を数えて、
その列数から、-1 を引く。つまり、その左端の列を、0として、その列の右端までの数。

と書いても、簡単には納得できないと思います。
1つの行だけを、それぞれ試してみると良いです。
VBA入門当初だったら、私も理解できなかったと思います。
    • good
    • 0
この回答へのお礼

少しずつ覚えていきます。回答ありがとうございました。

お礼日時:2012/11/05 00:07

こんにちは。



前回の延長です。
こちらからは、解説はしません。分からない所があれば聞いてください。
連続したデータに、数式を入れる場合は、ループは必要ありません。
VBAのコーディングは、記録マクロとは違う種類のものです。

'//
Sub Test_LatestDatePickup()
 Dim j As Long
 With ActiveSheet
  j = .Range("C6").CurrentRegion.Columns.Count - 1
  With .Range("C4", .Cells(4, 3 + j))
   .Formula = "=IF(MAX(R[2]C:R[9996]C)=0,""履歴無し"",MAX(R[2]C:R[9996]C))"
   .Value = .Value
   .NumberFormatLocal = "yyyy/m/d"
  End With
 End With
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
連続したデータとはどんなものでしょうか?
列単位?行単位?それとも両方?途中で空白があってもOK?
理解力なくてすみません。

Dim j As Long
     ← どんな意味でしょうか?
j = .Range("C6").CurrentRegion.Columns.Count - 1
     ←どんな意味でしょうか?
御指導よろしくお願いします。

お礼日時:2012/11/01 01:23

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!