ここから本文です

マクロについて教えてください。ネットで見つけたマクロコードです。 このコード...

hot********さん

2019/10/2122:43:46

マクロについて教えてください。ネットで見つけたマクロコードです。
このコードについて説明できるほど知識がありませんので申し訳ありません。

Dim rng As Range
Dim ck As Variant

Sheets("入力シート").Select
Set rng = Range("Q3:DW3")
ck = Application.Match(Range("G3"), rng, 0)
If IsError(ck) Then
MsgBox "G3の月が表に存在しません"
Exit Sub
End If
Range("G6:N" & Cells(Rows.Count, "G").End(xlUp).Row).Copy Destination:=Cells(6, ck + 16)

やりたい事は
① ("G6:N")の範囲を1列広げて("G6:O")の範囲する方法
② 範囲をコピーし値の貼り付けの方法
所定の位置にコピー先に貼り付けはできるが、O列だけ数式があって、数式の番地が移動した分だけ数式の番地も移動するため、めちゃくちゃになるので所定の位置に値貼り付けとするには同様なコードを作成するのでしょうか。.PasteSpecial .PasteSpecial(xlPasteValues)など色々ためしたのですが全く上手くいきません。何方か教えてください。宜しくお願いします。

閲覧数:
11
回答数:
1
お礼:
500枚

違反報告

ベストアンサーに選ばれた回答

プロフィール画像

カテゴリマスター

taihenda****さん

2019/10/2212:10:26

PasteSpecialはエラーの起きやすい意外と難しいメソッドですね。しかもデータを転記するには低速です。

配列に入れるのが範囲の計算とかも楽です。


G6の下には必ずデータが有るとして、



Sub test()
Dim rng As Range, myrng As Variant
Dim ck As Variant
Sheets("入力シート").Select
Set rng = Range("Q3:DW3")
ck = Application.Match(Range("G3"), rng, 0)
If IsError(ck) Then
MsgBox "G3の月が表に存在しません"
Exit Sub
End If
myrng = Range("G6", Cells(Rows.Count, "G").End(xlUp)).Resize(, 9).Value
Cells(6, ck + 16).Resize(UBound(myrng), UBound(myrng, 2)) = myrng
End Sub

質問した人からのコメント

2019/10/22 21:47:47

私がやりたいと思っている事が全てしかも完璧に出来ました。Resizeで行・列数変更で範囲を変更する(単純な言い方ですが)UBoundについても配列やら添え字などで理解は程遠い状態ですが勉強して行こうと思っています。こんな素晴らしいコードを作成して頂き有難うございました。

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる