[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
で、本題。
スッテップ実行をしてみて、
動作を確認してみては?
こちらでは、書いてある通りの動作をしていることしか確認できません。
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
〇〇を選択→選択した(アクティブになっている)ものを××って書き方はダメではないですが、 どうしても冗長に見えるので、一般的には〇〇を××するというような表現にするとおもいます。
(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になるか確認してみては?
保存せずに閉じたら昨日のままで開けますよね?
http://marupeke296.com/DBG_No1_Step.html
(まっつわん) 2018/04/11(水) 19:19
そして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.