「ブロック機能」のリニューアルについて

忙しいところすいませんが、よろしくお願いいたします。
マクロで日にちの今日の値から前の日を引いて値(増減)を貼り付ける。
月が替わると今月の1日から前の日を引いて値(増減)を貼り付ける。

「マクロで日にちの今日から前の日を引いて貼」の質問画像

質問者からの補足コメント

  • つらい・・・

    すいませんです。
    5月2日から5月31日までは 5月2日-5月1日=5月2日の増減へ値を貼る
    6月1日は 6月1日-5月31日=6月1日の増減に値を貼りたい。
    月が替わるところが良くわかりません。
    マクロで貼りたいと思います。
    画像は上手く添付できませんがよろしくお願いいたします。

      補足日時:2022/05/06 21:54
  • うーん・・・

    ありがとうございます。
    a3からA34まで 2022/5/1~2022/5/31
    B3~B34まで金額 d3~d34まで前日との増減を今日の日(2022/5/6)に貼り付けたい。
    e3~e33まで 2022/6/1~2022/6/30 f3~f33まで金額 h3~h33 まで 増減を貼り付けたい。
    今日の日の増減です。
    Range("D8").Select
    ActiveCell.FormulaR1C1 = "=RC[-2]-R[-1]C[-2]"
     これをどう変えたら上手くいくかわかりません。

    No.3の回答に寄せられた補足コメントです。 補足日時:2022/05/06 22:23
  • うーん・・・

    日付、金額は記載されています。

      補足日時:2022/05/06 22:25
  • ありがとうございます。
    金額は別のシートからマクロで毎日変化する内容を貼り付けていますので、増減も一緒に計算させたいと思っています。よろしくお願いいたします。

      補足日時:2022/05/06 22:45
  • うれしい

    tagletさん早速の回答ありがとうございました。テストしてみましたら5月2日から6月30日まで連続で計算が上手くできました。今日と前の日の増減だけを計算して貼り付ける事はできないでしょうか?。勝手な事を言って誠にすいませんが、よろしくお願いいたします。

      補足日時:2022/05/07 00:08
  • へこむわー

    taglet さんありがとうございます。
    (Rangeを今日のセルに設定してください)の設定の仕方が良くわかりません。日付の入っている列ですか?。 A2列は5月が入っています。e2列から6月、I2列から7月とかわっていきます。
    後 H3列、 H4列もそれぞれ月によって変化していきます。

    1日の場合2~31日は IF で 分岐させるのですか?。面倒な事聞いてすいません。

    No.7の回答に寄せられた補足コメントです。 補足日時:2022/05/07 06:52
  • うーん・・・

    どうもうまくいきません。 
    Sub Macro1()
    '
    Dim FC As Range----2022/5/6
    Dim FD As Range------ここに1日前を入れたい。
    Set 当日金額 = FC.Offset(, 1).Resize(1, 1)
    Range "FD" =Range"FC" - 1 この計算が上手くいきません。
    Set 前日金額 = FD.Offset(, 1).Resize(1, 1)

      補足日時:2022/05/07 11:42
  • うーん・・・

    ありがとうございます。

    Set FC = Sheets("日毎推移").Range("a:ac").Find(What:=Date, LookAt:=xlWhole)
    If Not FC Is Nothing Then
    FC.Offset(, 1).Resize(1, 1).Value = Sheets("売買").Range("N11").Value
    FC.Offset(, 2).Resize(1, 1).Value = Sheets("売買").Range("o11").Value

    Set 当日金額 = FC.Offset(, 1).Resize(1, 1)

    Range "FD" =Range"FC" - 1  ここの式がエラーです。
    Set 前日金額 = FD.Offset(, 1).Resize(1, 1)
    Else


    End If

      補足日時:2022/05/07 12:10
  • うーん・・・

    ありがとうございます。うまく値を取り出すことが出来ました。
    これで、当日金額-前日金額を FC.Offset(, 3).Resize(1, 1).Value = 当日金額-前日金額
    でよろしいでしょうか。3列目に貼り付ける。

      補足日時:2022/05/07 17:02
教えて!goo グレード

A 回答 (11件中1~10件)

日付の3つ右の列が「前日との増減」でしたら、その式で合っています。

    • good
    • 0
この回答へのお礼

大変ありがとうございました。分からない者のお付き合い本当にありがとうございます。やっとできました。これでスッキリしました。感謝

お礼日時:2022/05/07 17:21

以下のプログラムをお試しください。



Sub Main()
Dim FC as Object '当日
Dim FC2 as Object '前日

Set FC = Sheets("日毎推移").Range("A:AC").Find(What:=Date, LookAt:=xlWhole)
Set FC2 = Sheets("日毎推移").Range("A:AC").Find(What:=Date - 1, LookAt:=xlWhole)

If Not FC Is Nothing Then
FC.Offset(, 1).Resize(1, 1).Value = Sheets("売買").Range("N11").Value
FC.Offset(, 2).Resize(1, 1).Value = Sheets("売買").Range("O11").Value

Set 当日金額 = FC.Offset(, 1).Resize(1, 1)
Set 前日金額 = FC2.Offset(, 1).Resize(1, 1)
End If
End Sub
    • good
    • 0

FCの代入はどのように行っていますか?

    • good
    • 0

No.5で回答した者です


>金額は別のシートからマクロで毎日変化する内容を貼り付けていますので、増減も一緒に計算させたいと思っています。
一緒になので、別シートから貼り付けるマクロを提示すると回答し易いですね
まぁ何をされたいのかちょっと分かりませんが

>Range("D8").Select
>ActiveCell.FormulaR1C1 = "=RC[-2]-R[-1]C[-2]"

///
マクロで数式を入力するのなら、あらかじめセルに数式を使った方が無難です。
(表組みが決まっているのであれば、間違いなくこちらを勧めます)
///

上記コードを数式でなく結果を書き込む場合
With ActiveCell
.Value = .Offset(, -2) - .Offset(-1, -2)
End With

Range("D8").Selectは省いてアクティブなセルに出力していますが
マイナスの値を指定していますのでアクティブセルの位置に制限があります
C列、2行目以降の選択で実行可能でA列などでは1004エラー

または
Range("D8").Select
ActiveCell.FormulaR1C1 = "=RC[-2]-R[-1]C[-2]"
ActiveCell.Value = ActiveCell.Value

範囲に数式を書き込む場合はすでに回答されているので、

セルのダブルクリックで処理をすると
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("D:D,H:H,L:L,P:P")) Is Nothing Then
Cancel = True
With Target
If .Row = 3 And .Column >= 8 Then Cells(34, .Column - 4).End(xlUp).Value -.Value = .Offset(, -2)
If Target.Row >= 4 And .Row <= Cells(34, .Column - 2).End(xlUp).Row Then .Value = .Offset(-1, -2) - .Offset(, -2)
End With
End If
End Sub

今日と前の日の計算
Sub sample()
Dim yd As Range
Dim td As Range
Set yd = Worksheets(1).UsedRange.Find(DateAdd("d", -1, Date))
Set td = Worksheets(1).UsedRange.Find(DateAdd("d", 0, Date))
If Not yd Is Nothing And Not td Is Nothing Then
td.Offset(, 3) = yd.Offset(, 1) - td.Offset(, 1)
End If
End Sub

Findのオプションは設定するべきですが取り敢えず割愛
いずれも表組みが限定されますが列位置が良く分からないので
想定列です
    • good
    • 0

今日と前の日の差分だけ計算式を入れたい場合は、以下の内容を今日分の「前日との増減」に対応するセルに入れてください。


(Rangeを今日のセルに設定してください)

'前月の最終行を取得
lastRow = Range("A2").End(xlDown).Row
'1日の場合
Range("H3").FormulaR1C1 = "=RC[-2] - R[" & (lastRow - 3) & "]C[-6]"

'2~31日の場合
Range("H4").FormulaR1C1 = "=RC[-2]-R[-1]C[-2]"
この回答への補足あり
    • good
    • 0

こちらを元にして、作ってみてください。



Sub Main

Dim lastRow as Long

'5月
Range("D4:D33").FormulaR1C1 = "=RC[-2]-R[-1]C[-2]"

'6月
lastRow = Range("A2").End(xlDown).Row
Range("H3").FormulaR1C1 = "=RC[-2] - R[" & (lastRow - 3) & "]C[-6]"
Range("H4:H33").FormulaR1C1 = "=RC[-2]-R[-1]C[-2]"

End Sub
    • good
    • 0

こんばんは


想像の範疇ですが・・・

>月が替わるところが良くわかりません。
月が変わらない所は出来ていると想像します
方法は、おそらくOffsetだと思いますので
月が替わるを条件にOffsetのカラム側に変数で値を与て場所を特定すれば
出来そうです。
月末、月初の取得方法 参考:
https://vbanobuhinko.com/%E6%9C%88%E3%81%AE%E5%8 …

先月末日の取得方法
https://kimama-vba.com/2018/05/01/datecirialvba/

ただし、年末年初、月末月初が休日の場合どうするかなどのロジックも必要かも知れません。

もし、Findで特定しているのなら、
上記取得方法(先月末日を取得)で取得した日付けをFindで探す事も出来ます。
注意)日付けでFindの場合、出来れば、対象もシリアルで・・・

先月末日=DateSerial(Year(Date), Month(Date), 0)

set hoge =Sheets("Sheet1").Range("??").Find(What:=先月末日, LookAt:=xlWhole)

6月1日.value=6月1日.value-hoge.value ?
    • good
    • 0

マクロを使わなくても作れます。



D4:=B4-B3
D5~D33:D4をコピーして貼り付け
H3:=F3-B33
H4~H33:D4をコピーして貼り付け

※「今日の日(2022/5/6)に貼り付けたい。」が、何を行いたいのか不明です。
    • good
    • 0

以下の内容を教えてください。


・シートの構成はどうなっているか?
・そのシートに、どのように日付・金額が記載されているか?
この回答への補足あり
    • good
    • 0

画像の高さを半分位の位置でカットし直した物をアップされた方が見えやすいのではないかなと思います。


あとデータのない列幅はちょっと詰めてみるのも。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています

教えて!goo グレード

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング