エクセル VBAでの別シートへのコピーについて教えてください。
sheet1
A列:受注日 B列:名前 C列:フリガナ D列:個数 E列:納品日 F列:担当
↓コピペ
sheet2
F列:受注日 G列:名前 H列:フリガナ I列:個数 J列:納品日 K列:担当 という風にしたいです。
今いれてるコードは
Private Sub CommandButton1_Click()
Dim maxrow As Long
Dim row As Long
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheet("発注")
Set sh2 = Worksheet("納品済み")
ActiveCell.Resize(1,5).Copy
sh2.Select
maxrow = sh2.Cells((Rows.Cout),"G").End(xlUp).row
For row = 4 To maxrow
If sh2. Cells(row."G").Value = "" Then
sh2. Cells(row."G").Past
End If
Next
Application. CutCopyMode = False
Unload Me
End Sub
ですが、うまく貼り付けされず、空白のままです。どのようなコードを、入れたら良いのでしょうか?ご教授お願いいたします!!
ちなみにsh1のG列ダブルクリックでユーザーフォームがたちあがり、コマンドボタン1を、選択でこのコードが、起動するようにしてあります。
No.12ベストアンサー
- 回答日時:
訂正、修正が重なったので、ご質問を整理した方が良いと思います。
ペーストする先が最終行迄と言うのも、不思議な用途になるかと思います。
ダブルクリックした行のAからFまでがコピーされ、
(範囲6列)
sh2のBからGに貼り付け出来るようにしたいです。
(範囲6列)
sh2.Cells(row, "B" ).PasteSpecial Paste:=xlPasteAll
例えば
sh2.Cells(5, "B" ).PasteSpecial Paste:=xlPasteAll
なら、5行目のB列から6列ペーストされますよね。
rowを決める部分とForを考えれば良いですね。
row = 4 To maxrow
maxrow = sh2.Cells((Rows.Count),"F").End(xlUp).row
どこに矛盾があるのでしょう。
4と言う定数は何か、
sh2のF列は何の列なのか、なんでF列の最終行まで貼り付けをするのか
初めは、sheet2
F列:受注日 G列:名前 H列:フリガナ I列:個数 J列:納品日 K列:担当 という風にしたいです。
なので、
もう一度、整理しましょう。
何度もありがとうございます!ほんとやって行くうちに自分でもわからなくってしまっていました、、、。最終行に、貼り付けしたいのではなく、その次に貼り付けしたくて、悩んでいたのですが、結局、教えて頂いたコードに、変えsh2.Cells((Rows.Count),"F").End(xlUp).rowのところをsh2.Cells((Rows.Count),"F").End(xlUp).row+1に、変えることで上手くいきました。ほんと感謝です!!!ありがとうございます!!
No.11
- 回答日時:
Range("A" & ActiveCell.row & ":F" & ActiveCell.row).Copy を入れてみたのですが、 ":の部分がエラーになります、、、。
なりますか?
&の前後の半角スペースありますか?そもそも、Webコピペでエラー出ませんね。
セルを複数選んでもアクティブは一つだし???ちゃんとセルをクリックしてフォームから実行してます?
私の環境で出ないので、原因は分かりません。
No.10
- 回答日時:
No.2です。
補足やお礼を読む限り、ご自分で考えることを放棄されたように感じられ、残念です。>4行目以下には何も入っていません。
ということは、maxrowは3になるのは理解できますか?
maxrowが3の場合、次のようなループになります。
For row = 4 To 3 Step 1
これは、rowの初期値4、増分1とした上で、rowが3を超えるまでループすることを意味します。しかし、初期値が4なので、その時点ですでに3を超えているため、即ループを抜けてしまいます。
例えば、F7セルに何らかの文字を入力して、maxrowが7になるようにしておけば、4~6行目にペーストされるはずです。
ただ、これが質問者さんの意図する結果なのでしょうか?
コメント遅くなり、すみません。考えることを放棄しているわけではないのですが、そのように感じられたのならすみません!
たしかにmaxrowは3に、なりますね!4かと思っていました、、、。と言う事はmaxrow = sh2.Cells((Rows.Cout),"G").End(xlUp).row
For row = 4 To maxrow
If sh2. Cells(row."H").Value = "" Then
sh2. Cells(row."H").Pastにして、G4に何かしらのデータを入れておき、H以降を貼り付けすれば上手くいくということなのでしようか?
No.8
- 回答日時:
mahi-mahi様、修正の情報ありがとうございます。
掲示された内容からすると、原因は、先に記しましたが ActiveCell.Resize(1,5).Copyに
あります。ダブルクリックでフォームを立ち上げたのち、ActiveCellを指定していないので
>ちなみにsh1のG列ダブルクリックでユーザーフォームがたちあがり なので
G列のクリックセルがアクティブになりそのセル以降から5列がコピーされる為です。
№7で示したコードなどの置き換えを検討してみてください。
ただ、方法は色々あるので、環境や慣れ、好みで作成されるのが良いと思います。
ありがとうございます!とても勉強になります!
教えていただいた
Range("A" & ActiveCell.row & ":F" & ActiveCell.row).Copy を入れてみたのですが、 ":の部分がエラーになります、、、。
No.7
- 回答日時:
横からすみません。
ご質問のコードをお借りしますがこれは、実際にVBEに書かれているコードでしょうか?
タイプミスなど多数ありますが、コンパイルエラーになりませんか
また、行いたい事が不明な点が多く、コードからも矛盾がありますが
そのようなシート組なのでしょうか、
基本的にモジュールの最初に Option Explicit を記すことを勧めます。
コンパイルや変数などの不備をデバック時に教えてくれます。
では、ご質問記載のコードで確認してください。
Private Sub CommandButton1_Click()
Dim maxrow As Long
Dim row As Long
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheet("発注")
ここは、sh1 = Worksheets("発注") です。
Set sh2 = Worksheet("納品済み")
ここは、sh2 = Worksheets("発注") です。
ActiveCell.Resize(1,5).Copy
ここが一番の問題です。
>sh1のG列ダブルクリックでユーザーフォームがたちあがり
つまり、G列がアクティブになっています。と言う事は、G列からK列がコピーされます
あれ?
>sheet1
>A列:受注日 B列:名前 C列:フリガナ D列:個数 E列:納品日 F列:担当
ですよね。であれば、
Range("A" & ActiveCell.row & ":F" & ActiveCell.row).Copy とか
Range(Cells(ActiveCell.row, "A"), Cells(ActiveCell.row, "F")).Copy です。
書き方はほかにもありますが。
sh2.Select
maxrow = sh2.Cells((Rows.Cout),"G").End(xlUp).row
ここは、Cout スペルミス
maxrow = sh2.Cells(Rows.Count, "G").End(xlUp).row
For row = 4 To maxrow
If sh2. Cells(row."G").Value = "" Then
ここは、If sh2.Cells(row, "G").Value = "" Then です
また、納品済みシートの最終行を4行の間に空のセルがあるのでしょうか?
最終行までG列が書かれているなら、空白がないので何もペーストされませんよね?
コードから見るときっと空行を埋めるのでしょう。
もし、F行を対象にしているなら If sh2.Cells(row, "F").Value = "" Then です
sh2. Cells(row."G").Past
これはちょっと気持ちが悪いと言うか
Pastはスペルミス .は , ですF行に書き込むなら "F"ですよね?
また、他のシートにすべてをペーストなら sh2.Cells(row, "F").PasteSpecial Paste:=xlPasteAll
End If
Next
Application. CutCopyMode = False
Unload Me
End Sub
コピー元の条件、書き込み先の条件があいまいです。
わざとそのように書かれているのであれば、その旨を記載すべきと思います。
この場合、列に対して確定的範囲であれば、Resizeでない方が良いかなと思います。
Resizeは、変数や配列、数式などで範囲変動する場合などに有効ですので
勿論使っても良いのですが。
なんとなく、すっきりしませんが、参考になれば幸いです。
お教えいただきありがとうございます!ほんとお恥ずかしいほど間違えてますね!
PCが、ネット環境など外部とのアクセス出来ない仕様になっているため、実際の VBEを、見てスマホで投稿に、なりスペル間違いだらけになってしまいました、、、。言い訳ですが、、、。実際のものをもう一度、補足に入れさせてもらいます。
No.4
- 回答日時:
Private Sub CommandButton1_Click()
Dim maxrow As Long
Dim row As Long
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Dim r1 As Range
Set sh1 = Worksheet("発注")
Set sh2 = Worksheet("納品済み")
Set r1 = sh1.ActiveCell.Resize(1,5)
sh2.Select
maxrow = sh2.Cells((Rows.Cout),"G").row
For row = 4 To maxrow
If sh2. Cells(row."G").Value = "" Then
r1.Copy sh2. Cells(row."G")
Exit For
End If
Next
Unload Me
End Sub
とか?(未検証)
ご回答ありがとうございます!
実行してみましたが、
Set r1 = sh1.Active Cell.R esize(1,5)
の箇所でエラーになり、メソッドまたはデータメンバーがみつかりませんと出てしまいました、、、。
No.3
- 回答日時:
No1です。
>sh2.Cells(row,"G").Pasteの部分が、とばされている
ご質問文には、該当部分が見当たりませんね。
>If sh2. Cells(row."G").Value = "" Then
>sh2. Cells(row."G").Past
ってのはあるけれど・・・
「Paste」と同様に、たったひと文字の違いでも異なる意味になったり、解釈できなくてエラーになったりします。
回答者にも正確な内容が伝わりません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) マクロで最終行を取得したい 4 2023/05/28 12:14
- Visual Basic(VBA) コード名シートA列と集計シートA列のコードが一致したら、コード名シートA5からk12の範囲をコピーし 1 2022/08/29 23:46
- Visual Basic(VBA) VBAで質問ですが、皆さんはどの様に導き出しているのでしょうか? 6 2022/05/03 21:53
- Visual Basic(VBA) VBAコードが作動せず、どこに問題があるのか教えて下さい。 3 2023/06/13 13:20
- Visual Basic(VBA) 稀に1円合いません? Sheet1から金額と個数を貼り付ける下記コードで、金額を切り上げるコードを何 3 2022/09/05 15:11
- Visual Basic(VBA) 改行ごとに行を追加し、数量を分割 4 2023/07/11 16:39
- Visual Basic(VBA) 別シートのデータを参照して値を入れたい。 まとめデータシートのC列D列の値を商品一覧シートのコードが 7 2022/08/17 13:20
- Visual Basic(VBA) VBA横データを縦にしたいです 2 2023/08/08 19:38
- Visual Basic(VBA) いつもお世話になっております、VBAで教えて頂きたいのですが 2 2022/05/05 22:20
- Visual Basic(VBA) VBAで、シート間の転記するコードをFOR~NEXTで教えてください。 9 2023/04/30 20:04
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
IIF関数の使い方
-
Worksheets メソッドは失敗しま...
-
Excelで、あるセルの値に応じて...
-
エクセルVBA シートモジュール...
-
データグリッドビューの一番最...
-
B列の最終行までA列をオート...
-
vba 2つの条件が一致したら...
-
VBAのFind関数で結合セルを検索...
-
URLのリンク切れをマクロを使っ...
-
文字列の結合を空白行まで実行
-
Cellsのかっこの中はどっちが行...
-
VBAを使って検索したセルをコピ...
-
vbaでシートより100より大きい...
-
Changeイベントでの複数セルの...
-
VBA UserFormからの転記で
-
VBA 値と一致した行の一部の列...
-
【VBA】2つのシートの値を比較...
-
エクセルVBAにて =A1=B1とすれ...
-
targetをA列のセルに限定するに...
-
VBA 何かしら文字が入っていたら
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Worksheets メソッドは失敗しま...
-
Cellsのかっこの中はどっちが行...
-
VBAのコードを教えてください
-
VBAを使って検索したセルをコピ...
-
B列の最終行までA列をオート...
-
エクセルvbaについて
-
vba 2つの条件が一致したら...
-
Excelで、あるセルの値に応じて...
-
VBA UserFormからの転記で
-
VBAのFind関数で結合セルを検索...
-
文字列の結合を空白行まで実行
-
IIF関数の使い方
-
VBA 何かしら文字が入っていたら
-
マクロ 最終列をコピーして最終...
-
Changeイベントでの複数セルの...
-
エクセルVBAにて =A1=B1とすれ...
-
【VBA】2つのシートの値を比較...
-
データグリッドビューの一番最...
-
VBマクロ 色の付いたセルを...
-
VBAで指定範囲内の空白セルを左...
おすすめ情報
ステップ イン(F8)すると、sh2.Cells(row,"G").Paste
の部分が、とばされているのですが、ここが原因でしょうか?
NO.1さんのご指摘にありました通り、
If sh2. Cells(row."G").Value = "" Then
sh2. Cells(row."G").Pastの箇所は、正しくは
If sh2. Cells(row."G").Value = "" Then
sh2. Cells(row."G").Pasteです。
そして、先ほどの補足に入れました通り、ステップインで飛んでしまうのは、この
sh2. Cells(row."G").Pastの部分です
また間違えてます!すみません!ステップインで飛んでしまうのは
sh2. Cells(row."G").Pasteです!
スペル間違い等々ご指摘をいただきましたので、、正しくはこちらです。
Set sh1 = Worksheets("発注")
Set sh2 = Worksheets("納品済み")
ActiveCell.Resize(1,5).Copy
sh2.Select
maxrow = sh2.Cells((Rows.Count),"F").End(xlUp).row
For row = 4 To maxrow
If sh2. Cells(row,"F").Value = "" Then
sh2. Cells(row,"F").Paste
End If
Next
Qchang1962さん
半角入ってませんでした!すみません!
エラーは出なくなりました!!ありがとうございます!
あれから色々やってみて、もう一度、表を、作り直して試しています。
実行はsh1の A列ダブルクリックに設定し、sh1の AからFを、sh2のBからGに貼り付け出来るようにしたいです。
しかし、教えていただいたコードに置き換えてみましたが、何も貼り付けされませんでした、、、。他の方も言われていたようにmaxrowが4になるからでしょうか?
If sh2. Cells(row, "B")=""Then
Range("A" & ActiveCell.row & ":F"). Copy
sh2.Cells(row, "B" ).PasteSpecial Paste:=xlPasteAll