Excel VBA 質問スレッド №2175 (未解決)

vbaおかしい

投稿者 : メ     投稿日時 : 2026/03/09(Mon) 07:19:51     OS : 未指定     EXCEL : 未指定
Option Explicit

'========================================
' メイン処理
' 外部データの色を取得して
' 入力シートと出力シートへ書き込む
'========================================
Sub データ更新()

    '画面更新を止めて高速化
    Application.ScreenUpdating = False
    
    '自動計算を停止(高速化)
    Application.Calculation = xlCalculationManual

    'ワークシート変数
    Dim wsIn As Worksheet      '入力シート
    Dim wsOut As Worksheet     '出力シート
    Dim wsExt As Worksheet     '外部データシート
    Dim wbExt As Workbook      '外部データブック

    '年月
    Dim Y As Long
    Dim M As Long

    'ループ用
    Dim i As Long
    
    '月の日数
    Dim lastDay As Long

    'シート設定
    Set wsIn = Worksheets("入力")
    Set wsOut = Worksheets("出力")

    '入力シートから年と月を取得
    Y = wsIn.Range("A1").Value
    M = wsIn.Range("B1").Value

    'その月の最終日を取得
    lastDay = Day(DateSerial(Y, M + 1, 0))

    '========================================
    ' 外部ブックを探す
    '========================================
    
    Dim wb As Workbook

    '現在開いているブックを順番に確認
    For Each wb In Workbooks
    
        'このブック自身は除外
        If wb.Name <> ThisWorkbook.Name Then
        
            '年と同じ名前のシートがあるか確認
            On Error Resume Next
            Set wsExt = wb.Worksheets(CStr(Y))
            On Error GoTo 0
            
            '見つかったら外部ブック確定
            If Not wsExt Is Nothing Then
                Set wbExt = wb
                Exit For
            End If
            
        End If
        
    Next

    '外部データが見つからない場合
    If wsExt Is Nothing Then
        MsgBox "外部データが見つかりません"
        GoTo EndProc
    End If

    '========================================
    ' シート初期化
    '========================================
    
    '2~40行の内容をクリア
    wsIn.Range("A2:B40").ClearContents
    wsOut.Range("A2:B40").ClearContents

    '========================================
    ' 日付と色を取得
    '========================================
    
    For i = 1 To lastDay
    
        '日付を入力
        wsIn.Cells(i + 1, 1).Value = DateSerial(Y, M, i)
        wsOut.Cells(i + 1, 1).Value = DateSerial(Y, M, i)
        
        '外部データのセル色を取得
        wsIn.Cells(i + 1, 2).Value = wsExt.Cells(i + 1, 1).Interior.Color
        wsOut.Cells(i + 1, 2).Value = wsExt.Cells(i + 1, 1).Interior.Color

    Next i

EndProc:

    '画面更新を戻す
    Application.ScreenUpdating = True
    
    '自動計算を戻す
    Application.Calculation = xlCalculationAutomatic

End Sub


'========================================
' 先月へ移動ボタン
'========================================
Sub 先月()

    Dim Y As Long
    Dim M As Long

    '入力シートから年と月取得
    With Worksheets("入力")

        Y = .Range("A1").Value
        M = .Range("B1").Value

        '月を1つ減らす
        M = M - 1

        '1月の場合は前年の12月へ
        If M = 0 Then
            M = 12
            Y = Y - 1
        End If

        'シートへ戻す
        .Range("A1") = Y
        .Range("B1") = M

    End With

    'データ更新
    Call データ更新

End Sub


'========================================
' 翌月へ移動ボタン
'========================================
Sub 翌月()

    Dim Y As Long
    Dim M As Long

    '入力シートから年と月取得
    With Worksheets("入力")

        Y = .Range("A1").Value
        M = .Range("B1").Value

        '月を1つ増やす
        M = M + 1

        '12月の場合は翌年の1月へ
        If M = 13 Then
            M = 1
            Y = Y + 1
        End If

        'シートへ戻す
        .Range("A1") = Y
        .Range("B1") = M

    End With

    'データ更新
    Call データ更新

End Sub
これを使用して、色を取得して、日にちことに色を変えていきたいのですができますか?
また、これを実行しても動きません。

スポンサーリンク
[返信 1] Re : vbaおかしい
投稿者 : 4x4my     投稿日時 : 2026/03/09(Mon) 08:19:53
vba「おかしい」って、何がどうおかしいのかは第三者には分かりません。
そもそもそのマクロでどういう処理をしたいのか、まずそれを説明しないと、長ったらしい「おかしい」コードなど読む気になれません。

それから違っていたらごめんなさいですが、投稿のたびに名前を変えるのやめましょうよ。

当掲示板について
  • Excel VBA に関する掲示板です。Excel VBA に関する質問や疑問、それに対する解決方法など気軽に投稿してください。
  • 記事内ではHTMLのタグは使用できません。
  • 記事は一度投稿すると修正できません。内容を訂正したい場合は返信で対応してください。
  • Sub〜End Sub、Function〜End Function は自動的にプログラムコードとみなし、枠で囲って見やすくします。
  • Excel VBA とは関係ないことや、他人が不快に思うようなことなど、管理人が適当でないと判断した記事は削除する場合があります。
スポンサーリンク
返信入力フォーム
お 名 前  :
内  容   :

ステータス  :

認証コード  : キャプチャ画像 




( 処理日時 : 2026-03-10 03:57:41 )
タイトルとURLをコピーしました