プロが教える店舗&オフィスのセキュリティ対策術

他のシートからコピーする下記マクロで貼付け位置をWorksheets(1).Range("A3")の「*月」を参照しています。
Worksheets(1).Range("A3")が西暦だった場合、Fomatで月を取り出して下記マクロに組み込む方法を教えてください。
Sub test1()
Dim Cop
Set Cop = Worksheets(4).Range("G15:G18") 'コピー元
'処理月へ転記
Dim c As Long
For c = 8 To 19 '4月~3月の範囲
If Cells(2, c).Value = Worksheets(1).Range("A3").Value Then Exit For
Next c '該当月の指定
Worksheets(2).Cells(5, c).Resize(Cop.Rows.count, 1) = Cop.Value 'コピー先
End Sub

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

  • うーん・・・

    ご教授いただいた内容で、If Cells(2, c).Value = Month(Worksheets(1).Range("A3")).Value Then Exit Forとしてみたところ、実行時エラー424 オブジェクトが必要です。とエラーになりました。どこを変更したらよいか教えていただけませんでしょうか。よろしくお願いいたします。

      補足日時:2023/01/30 21:27
  • If Cells(2, c).Value = Format(Month(Worksheets(1).Range("A2").Value), "m 月") Then Exit Forへ変更し、
    Sheet1のA2セルを参照してマクロを実行したところ、Sheet2のT列へ転記されました。
    Sheet1のA3セルを参照するとQ列の1月へ転記できるのですがこのちがいを解消するにはどのようにしたら良いか教えてください。

    「他のシートからコピーする下記マクロで貼付」の補足画像2
      補足日時:2023/01/31 10:07
  • Sheet1のA3セルを参照してSheet2のQ列に転記できたこーどは、If Cells(2, c).Value = Worksheets(1).Range("A3").Value Then Exit Forになります。

      補足日時:2023/01/31 10:17
  • 1.Sheet2のH2:S2は4月~3月が表示されていますが、これは
    ①実際に4月~3月の文字が設定されている。

    2.Sheet1のA3に設定される値は
    ①2023/3/1 等の日付である。

      補足日時:2023/01/31 11:36

A 回答 (8件)

No5です。


Format文を使って月を取り出したい場合は、
If Worksheets(2).Cells(2, c).Value = Month(Worksheets(1).Range("A3").Value) & "月" Then Exit For

If Worksheets(2).Cells(2, c).Value = Format(Worksheets(1).Range("A3").Value, "m月") Then Exit For
に変えてください。
    • good
    • 0
この回答へのお礼

いつも解決していただきありがとうございます。
とても勉強になりました。

お礼日時:2023/01/31 15:11

回答者: めぐみん_ です。



>With Worksheets("Sheet1")

Worksheets(1)

シートインデックスで記載でしたか。
    • good
    • 0

西暦入力の場合と『”○月"』の文字列の場合があっての事での質問かわかりませんが、


取り敢えずややこしいループによる検索をやめるのも手では?

'For c = 8 To 19 '4月~3月の範囲
'If Cells(2, c).Value = Worksheets(1).Range("A3").Value Then Exit For
'Next c '該当月の指定

' ↓

With Worksheets("Sheet1")
c = IIf(Month(.Range("A3").Value) >= 4, Month(.Range("A3").Value) + 4 , Month(.Range("A3").Value) + 16)
End With

Worksheets(2).Cells(5, c).Resize(Cop.Rows.Count, 1) = Cop.Value 'コピー先
    • good
    • 0

以下のようにしてください。


Cells(2, c).ValueはWorksheets(2)で修飾したほうが安全ですので、
そのようにしています。
-------------------------------------------
Sub test1()
Dim Cop
Set Cop = Worksheets(4).Range("G15:G18") 'コピー元
'処理月へ転記
Dim c As Long
For c = 8 To 19 '4月~3月の範囲
If Worksheets(2).Cells(2, c).Value = Month(Worksheets(1).Range("A3").Value) & "月" Then Exit For
Next c '該当月の指定
Worksheets(2).Cells(5, c).Resize(Cop.Rows.Count, 1) = Cop.Value 'コピー先
End Sub
    • good
    • 0

そもそもの話になりますが、前提条件の確認になります。


1.Sheet2のH2:S2は4月~3月が表示されていますが、これは
①実際に4月~3月の文字が設定されている。
②設定されているのは2022/4/1~2023/3/1の日付であるが、
セルの書式設定で、4月~3月と表示されるようにしてある。
上記の①②のどちらでしょうか。

2.Sheet1のA3に設定される値は
①2023/3/1 等の日付である。
②"3月" 等の文字である。
③3 等の数値であるが、書式設定で3月と表示されるようにしてある。
上記①②③のどのパターンでしょうか。
    • good
    • 0
この回答へのお礼

ご確認ありがとうございます。補足しました。

お礼日時:2023/01/31 11:33

Month(Worksheets(1).Range("A3")).Value ではなく


Month(Worksheets(1).Range("A3").Value)
にしてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2023/01/31 10:06

No1です。



>オブジェクトが必要です。とエラーになりました。
No1に書いておいたはずですが・・・
セルの値がなんなのか不明のままですが、シリアル値としてもよいのなら、
 Month(Worksheets(1).Range("A3"))
は数値になります。(=月数になる)
    • good
    • 0
この回答へのお礼

ありがとうございます。月数ですね!
セルH2の4月から横に3月まで並んでいます。(For c = 8 To 19 '4月~3月の範囲)月数ということは、セルA3に「2022/04/01」が入っていた場合、「4」になっているのですね。これに何月の「月」をつけるにはどのようにしたら良いか教えてください。

お礼日時:2023/01/30 22:23

こんばんは



>Worksheets(1).Range("A3")が西暦だった場合
セルの値がどうなっているのかわからないのですが・・・

もしも、シリアル値が入力されているのなら
 Month(Worksheets(1).Range("A3"))
で、月の数値を取得できます。

その他の形式の場合は、形式が不明だと一般的な回答はできかねます。
    • good
    • 0
この回答へのお礼

ありがとうございます。

お礼日時:2023/01/30 21:25

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