• ベストアンサー

エクセルのVBAの初心者です。よろしくお願いします

 以下の画像にもございますが、左側の1週間おきの”始値”と”終値”を、右側のテーブルに記入できるVBAはどのようなものになりますでしょうか?  何分、約1年分のデータを移さなければいけないため、手動ではどうしようもない状況にございます。  ご教示の程、いただきますれば、幸いでございます。  それでは、よろしくお願い申し上げます。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんにちは! 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.3

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)
回答No.1

VBAでなくても、関数で実現できそうに思います。 1)以下の2セルに式を設定  セルH2に式[=indirect("B"&(ROW()*5-8)]  セルI2に式[=indirect("E"&(ROW()*5-8)] 2)セルH2:I2を選択 3)選択範囲の右下■にマウスカーソルを当てる 4)マウスカーソルが+になったら、下方向へドラッグ

nyan_nyanko
質問者

お礼

 ご返答いただきまして、どうもありがとうございました。  仰られますように、関数でじゅうぶん、役割を果たせるかと存じます。  ただ、この機会に、VBAを少々勉強しておこうとの想いから、ご質問させていただきました、  ですが、ご回答いただきましたことには、厚くお礼申し上げます。

関連するQ&A