アプリ版:「スタンプのみでお礼する」機能のリリースについて

4月~3月まで12カ月横に並んだ表へ指定範囲を貼り付けたい。
Sheet2の指定範囲、Range("C3:C17")をコピーしてSheet1へ貼り付けたい。
毎月貼り付ける位置が違うので、Sheet2のセルC2へ貼り付け月を入力し、Sheet1の同一月の列へ貼り付けるにはどのようにしたら良いか教えてください。
Cellsの列を変数にしてコードを書きたいのですがマクロ勉強中で下記より先に進めません。

Sheets(2). Range("C3:C16").Copy Sheets(1).Cells(4, i)

「4月~3月まで12カ月横に並んだ表へ指定」の質問画像

A 回答 (2件)

No1です。



>If c < 15 Then
>この記述の解説をお願いします。
見出し部分と一致するものがなかった場合、ループを全部回って抜けてきますのでcの値は15になっています。
それを判別しています。

例えば、検索をFindメソッドで行うなら、ループで探す代わりに、
 Set f = sh.Range("C3:N3").Find(.Range("C2").Value, LookAt:=xlWhole)
 If Not f Is Nothing Then 処理
などとなりますが、やはり同様に、
If ~~ の部分で、対象が存在しない場合の分岐を行う必要がでてきます。


「該当列がないような入力はしない」ことを前提になさっているとは思いますが、人間には入力ミス等はつきものですので、その度にエラーが発生したり、おかしな処理をされてしまうようでは困りますよね?
それを避けるための分岐ということです。

No1のコードでは、「見つからない場合は何もしない」としてありますが、「その旨の警告を出す」等にしておいても宜しいかと思います。
 If ~~ Then ~~ Else ~~
を用いることで、できますよね。
    • good
    • 0
この回答へのお礼

丁寧に説明していただき理解できました。
ありがとうございます、助かりました。

お礼日時:2022/12/01 23:04

こんにちは



>4月~3月まで12カ月横に並んだ表へ~
タイトル部分が固定なら、Sheet2のC2セルの値から計算で転記位置を求めることも可能ですが、とりあえず同じ値のセルを探す方法にしてあります。
探す方法もWorksheetFunction.Match()などを使う方法も考えられますが、単純にループで照合して検索する方法にしてあります。

>Range("C3:C17")をコピーして~
C3:C17だとSheet1の合計欄を上書きしてしまうと思いますので、C3:C16としてあります。
(ご提示のコードの方は、C3:C16になっているようですし・・)

以下、ご参考までに。

Sub Sample()
Dim sh As Worksheet, c As Long
Set sh = Worksheets("Sheet1")

With Worksheets("Sheet2")
For c = 3 To 14
If sh.Cells(3, c).Value = .Range("C2").Value Then Exit For
Next c
If c < 15 Then .Range("C3:C16").Copy sh.Cells(4, c)
End With
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございます。思い通りの結果が得られました。1箇所質問させて下さい。If c < 15 Then
この記述の解説をお願いします。

お礼日時:2022/11/30 22:46

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