[[20180410161251]] 『VBA 別シートの日付の一致』(ぜん) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『VBA 別シートの日付の一致』(ぜん)

こんにちは

下記のコードを作成したのですが行き詰りましたのでご教授頂ければと思います。

Sub test()

Dim 日付 As Date
Dim 列番号 As Long

日付 = Sheets("作業用").Cells(18, 2).Value

 Sheets("集計表").Select

 For 列番号 = 6 To Cells(11, Columns.Count).End(xlToLeft).Column Step 2

 If Cells(11, 列番号).Value = 日付 Then Exit For
 Next

 If Cells(11, 列番号).Value <> 日付 Then
 MsgBox ("対象の日付が見つかりませんでした。")
 Exit Sub
・
・
・
作業用のシートのセルは2018/4/2となっていて、
集計用のセルの日付を=DATE(YEAR($J$9),MONTH($J$9),DAY($J$9)+1)で出しているのですが、
これを一致させるためにはどうしたらいいのでしょうか?

< 使用 Excel:Excel2007、使用 OS:Windows7 >


 日付同士なら一致しますが?
(seiya) 2018/04/10(火) 16:46

 あの〜、勘違いでしたらお許しを。。。 ^^
同一日付があれば、そのままループを抜け。
何もしないで、終了しているのでは。。。。。。??;
それとも、
何かエラーが出るのでしょうか。
一列飛ばし、と云うのも気にはなりますが。。。日付が一列飛ばしで。。。
なのでしょう。
でわ
(隠居じーさん) 2018/04/10(火) 17:34

 >集計用のセルの日付を=DATE(YEAR($J$9),MONTH($J$9),DAY($J$9)+1)で出しているのですが、
J9のセルの値が日付なら=J9+1でも同じでは?
あと、絶対参照だと数式をどのセルにコピーしても同じなってしましますがいいのかな?

で、本題。

スッテップ実行をしてみて、
動作を確認してみては?
こちらでは、書いてある通りの動作をしていることしか確認できません。

http://www.239-programing.com/excel-vba/basic/basic023.html
(まっつわん) 2018/04/10(火) 17:56


申し訳ありません。
私の勘違いでした。

ただ別の問題が生じましてお力添え頂ければと思います。

下記のようにコードを修正し日付を一致させることが出来ました。
しかし作業用シート(日報です)で2018/4/1〜毎日実行します。
4/4分を実行すると
集計表シート(月報です)の2018/4/3や2018/4/2など
前日分までの実績が0になってしまいます・・・
なぜでしょうか?

Sub 正方形長方形1_Click()

Dim 日付 As Date
Dim 列番号 As Long

Application.ScreenUpdating = False '画面描画停止

日付 = Sheets("作業用").Cells(9, 2).Value

 Sheets("集計表").Select

 For 列番号 = 1 To Cells(24, Columns.Count).End(xlToLeft).Column

 If Cells(24, 列番号).Value = 日付 Then Exit For
 Next

 If Cells(24, 列番号).Value <> 日付 Then
 MsgBox ("対象の日付が見つかりませんでした。")

Exit Sub

End If

Sheets("集計表").Select

Cells(25, 列番号).Select
ActiveCell.Formula = _

 "=SUMIFS(作業用!J:J,作業用!C:C,""A"")"
If ActiveCell = 0 Then
ActiveCell = ""
End If

Cells(26, 列番号).Select
ActiveCell.Formula = _

 "=SUMIFS(作業用!R:R,作業用!C:C,""A"")"
If ActiveCell = 0 Then
ActiveCell = ""
End If

Cells(27, 列番号).Select
ActiveCell.Formula = _

 "=SUMIFS(作業用!S:S,作業用!C:C,""A"")"
If ActiveCell = 0 Then
ActiveCell = ""
End If

Cells(28, 列番号).Select
ActiveCell.Formula = _
"=IFERROR((AverageIf(作業用!C:C, ""A"",作業用!T:T)), """")"
ActiveCell.NumberFormatLocal = "#,##0.0"




(ぜん) 2018/04/11(水) 15:08


余計なお節介かもしれないですが、
(1)
  〇〇を選択→選択した(アクティブになっている)ものを××って書き方はダメではないですが、
 どうしても冗長に見えるので、一般的には〇〇を××するというような表現にするとおもいます。

(2)

 インデントを入れると一般的には読みやすくなるので、誰かに見てもらうことを前提にするなら
 きちんと入れた方が良いです。

(1)、(2)を踏まえて整理するとこんな感じです。参考まで。

    Sub 正方形長方形1_Click()

        Dim 日付 As Date
        Dim 列番号 As Long

        日付 = Sheets("作業用").Cells(9, 2).Value

        With Sheets("集計表")
            '■↓このループで何をやりたいのか不明■
            For 列番号 = 1 To .Cells(24, .Columns.Count).End(xlToLeft).Column
                If .Cells(24, 列番号).Value = 日付 Then Exit For
            Next

            If .Cells(24, 列番号).Value <> 日付 Then
                MsgBox "対象の日付が見つかりませんでした。"
                Exit Sub
            End If

            With .Cells(25, 列番号)
                .Formula = "=SUMIFS(作業用!J:J,作業用!C:C,""A"")"
                If .Value = 0 Then .Value = ""
            End With

            With .Cells(26, 列番号)
                .Formula = "=SUMIFS(作業用!R:R,作業用!C:C,""A"")"
                If .Value = 0 Then .Value = ""
            End With

            With .Cells(27, 列番号)
                .Formula = "=SUMIFS(作業用!S:S,作業用!C:C,""A"")"
                If .Value = 0 Then .Value = ""
            End With

            With Cells(28, 列番号)
                .Formula = "=IFERROR((AverageIf(作業用!C:C, ""A"",作業用!T:T)), """")"
                .NumberFormatLocal = "#,##0.0"
            End With
        End With
    End Sub

(もこな2) 2018/04/11(水) 18:45


 >前日分までの実績が0になってしまいます・・・
 >なぜでしょうか?

なぜでしょうね?
ステップ実行して、どのタイミングで0になるか確認してみては?
保存せずに閉じたら昨日のままで開けますよね?

http://marupeke296.com/DBG_No1_Step.html
(まっつわん) 2018/04/11(水) 19:19


もこな2様有難うございます。
参考にさせて頂きます。

そして0になってしまう原因が分かりました。

実行すると集計表のセルに"=SUMIFS(作業用!J:J,作業用!C:C,""A"")"の数式が入りますが
作業用のシートは日々上書きしていくので
集計表の数字が変わってしまいました。

集計表に数式ではなく結果(値)がセルに入るようにしたりと
何かいい方法はありますでしょうか?

説明が悪く申し訳ありません。

(ぜん) 2018/04/12(木) 11:00


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.