- ベストアンサー
エクセルのVBAの初心者です。よろしくお願いします
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは! VBAをご希望というコトなので、一例です。 H列には月曜日の「始値」をI列には金曜日の「終値」を表示させればよい訳ですよね? 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 Sub test() 'この行から Dim i As Long i = Cells(Rows.Count, 8).End(xlUp).Row If i > 1 Then Range(Cells(2, 8), Cells(i, 9)).ClearContents End If For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.Weekday(Cells(i, 1)) = 2 Then Cells(Rows.Count, 8).End(xlUp).Offset(1) = Cells(i, 2) ElseIf WorksheetFunction.Weekday(Cells(i, 1)) = 6 Then Cells(Rows.Count, 9).End(xlUp).Offset(1) = Cells(i, 5) End If Next i End Sub 'この行まで こんな感じではどうでしょうか?m(_ _)m
その他の回答 (2)
- tom04
- ベストアンサー率49% (2537/5117)
No.2です! たびたびごめんなさい。 前回のコードはデータに空白がない!という前提のコードです。 普通に考えるとマーケットが休みの日もあると思います。 その場合セルが空白だと行がずれてしまいますので、 空白がある場合は空白を表示するようにしてみました。 ↓のコードに訂正してみてください。 Sub test() Dim i As Long, j As Long, k As Long j = Cells(Rows.Count, 8).End(xlUp).Row If j > 1 Then Range(Cells(2, 8), Cells(j, 9)).ClearContents End If j = 1 k = 1 For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row If WorksheetFunction.Weekday(Cells(i, 1)) = 2 Then j = j + 1 Cells(j, 8) = Cells(i, 2) ElseIf WorksheetFunction.Weekday(Cells(i, 1)) = 6 Then k = k + 1 Cells(k, 9) = Cells(i, 5) End If Next i End Sub 何度も失礼しました。m(_ _)m
- bin-chan
- ベストアンサー率33% (1403/4213)
VBAでなくても、関数で実現できそうに思います。 1)以下の2セルに式を設定 セルH2に式[=indirect("B"&(ROW()*5-8)] セルI2に式[=indirect("E"&(ROW()*5-8)] 2)セルH2:I2を選択 3)選択範囲の右下■にマウスカーソルを当てる 4)マウスカーソルが+になったら、下方向へドラッグ
お礼
ご返答いただきまして、どうもありがとうございました。 仰られますように、関数でじゅうぶん、役割を果たせるかと存じます。 ただ、この機会に、VBAを少々勉強しておこうとの想いから、ご質問させていただきました、 ですが、ご回答いただきましたことには、厚くお礼申し上げます。