

お世話になります。
先日、こちらで教えて頂いたプログラムの改良のご相談です。
プログラムはこちらです。
↓
Option Explicit
Public Sub 転送()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim hizuke As Variant
Dim yyyy As Long
Dim mm As Long
Dim dd As Long
Dim sheet_name As String
Dim sheet_name2 As String
Dim row As Long
Dim col As Long
Set sh1 = Worksheets("入力")
'日付取得
hizuke = sh1.Cells(2, "C").Value
'日付から年月日を別々に取得
yyyy = Year(hizuke)
mm = Month(hizuke)
dd = Day(hizuke)
'シート名作成
sheet_name = (yyyy Mod 1000) & "-" & mm & "月"
If CheckSheetName(sheet_name) = False Then
MsgBox ("シート:" & sheet_name & "なし")
Exit Sub
End If
Set sh2 = Worksheets(sheet_name)
'日付に対応するカラム位置及び累計のカラム位置計算
col = 3 + dd
'3行から10行まで繰り返す
For row = 3 To 16
'残業転送
sh2.Cells(row + 1, col).Value = sh1.Cells(row, "C").Value
Next
For row = 3 To 17
'累計転送
sh1.Cells(row - 1, "D").Value = sh2.Cells(row, "C").Value
Next
MsgBox ("転送完了")
End Sub
Private Function CheckSheetName(ByVal sheet_name As String) As Boolean
Dim i As Long
CheckSheetName = True
For i = 1 To Worksheets.Count
If Worksheets(i).Name = sheet_name Then Exit Function
Next
CheckSheetName = False
End Function
■ご相談
過去のデータを後から上書きしたい時、1名だけ時間を入れて転送させると、
その日の全員分のデータが上書きされてしまい、他のメンバーが消えてしまいます。
新たに入力した分だけを上書きするようにできませんでしょうか?
見えづらい画像を貼りますが、不明な点などありましたらご連絡ください。
お手数かけますが、よろしくお願いします。


No.3ベストアンサー
- 回答日時:
変更点は
1)入力シートが3~17行、月別シートが4行~18行になった。
と理解しました。
以下のようにしてください。
---------------------------------
'3行から10行まで繰り返す
For row = 3 To 17
If sh1.Cells(row, "C").Value <> "" Then
'残業転送
sh2.Cells(row + 1, col).Value = sh1.Cells(row, "C").Value
'累計転送
sh1.Cells(row, "D").Value = sh2.Cells(row + 1, "C").Value
End If
Next
-----------------------------------
'3行から10行まで繰り返す ・・・は
'3行から17行まで繰り返す ・・・が正しいですが、修正個所をわかりやすくするために、そのままにしています。
tatsu99さん
できました!
つたない説明にも関わらず、ご理解頂きましてありがとうございました。
IFで空白でない部分だけを見ればいいんですね。
勉強になります。
またご相談させて頂きますので、お時間合いましたら
次回もよろしくお願いします。
ありがとうございました。

No.2
- 回答日時:
No1です。
よくみると、私が回答したものと変わっていますね。
ですので、No1は無視してください。
補足要求です。
1)変える理由がなにかあったのでしょうか。
2)残業転送が3から16行(for row = 3 to 16)で、累計転送が3から17行(for row = 3 to 17)だと、累計転送が1行多くなりますが、
それは、意図したものしょうか。

No.1
- 回答日時:
前回、回答者です。
以下の部分を変えてください。
'3行から10行まで繰り返す
For row = 3 To 10
If sh1.Cells(row, "C").Value <> "" Then '・・・・・追加①
'残業転送
sh2.Cells(row, col).Value = sh1.Cells(row, "C").Value
'累計転送
sh1.Cells(row, "D").Value = sh2.Cells(row, "C").Value
End If '・・・・追加②
Next
追加①、追加②を追加します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) VBA 別ブックからの転記の高速化について VBA 別ブックからの転記の高速化についてご教授下さい。 19 2022/07/26 13:07
- Visual Basic(VBA) 別シートから年齢別の件数をカウントしたい 6 2023/01/23 12:00
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) 日付を重複させずに数えたい 4 2022/12/04 16:26
- Visual Basic(VBA) 【VBA】特定のワードが入っている行全体を塗りつぶしたい 4 2022/04/20 15:22
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) なぜExit Subがあるのかわかりません 4 2023/02/19 12:34
- Excel(エクセル) VBAの指示の内容 昨日こちらでご教示頂いたのですが初心者な為、一つ一つの指示が何をやっているのかわ 2 2022/10/25 18:08
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
オートフィルターの絞込みをし...
-
【マクロ】【画像あり】関数が...
-
EXCELのVBAで複数のシートを追...
-
勤怠表について ABS、TEXT関数...
-
【Officer360?Officer365?の...
-
Excelに貼ったXのURLのリンク...
-
Excelで4択問題を作成したい
-
エクセルについて
-
エクセル
-
グループごとの個数をカウント...
-
エクセル GROUPBY関数について...
-
グループごとの人数のカウント
-
グループごとの人数のカウント
-
エクセルシートの見出しの文字...
-
Amazonでマイクロソフトオフィ...
-
エクセルの複雑なシフト表から...
-
エクセルの関数について
-
【マクロ】実行時エラー '424':...
-
ページが変なふうに切れる
-
エクセル ドロップダウンリスト...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelマクロで空白セルを詰めて...
-
VBA:同じ文字列データの比...
-
Excel で行を指定回数だけコピ...
-
エクセル:VBAで月変わりで、自...
-
Excel VBA インデックスの境...
-
excelの差込印刷で可視セルだけ...
-
エクセルVBAで 2種のリストを...
-
EXCELマクロで全シート対...
-
エクセルVBAで SendKeys "{TAB}"
-
VBA別シートの最終行の下行へ貼...
-
エクセルVBA 別シートの複数の...
-
Excel VBAでシート内全体に非表...
-
エクセルVBAで実行時エラー...
-
Excel VBA元データから別シー...
-
VBA 最終行取得からの繰り返し貼付
-
vbaでコントロールブレイク
-
歯抜けの時間を埋めて行の挿入
-
Excelでデータの抽出&別シート...
-
Excelマクロ データが上書きさ...
-
VBAで条件が一致する行のデータ...
おすすめ情報
tatsu99さん
お世話になります。
説明不足でした、申し訳ありません。
添付した画像は古いものでした。
変化点
① 表の行と列を変えたので、少し修正しました
② 人数が増えたのですが、17行が正解で、16は間違いです・・・(^^;
こちらでわかりますでしょうか。
その他、不明な点などありましたらご連絡ください。
以上、よろしくお願いします。