こんばんわ!
VBAを実行すると、画面がちかちかします。
シートを行ったり来たりしているせいでしょうね?
自分で、色々やってみたのですが、エラーばかりで全然できません。
シートを行ったり来たりしなくてもいいVBAを作るには、どこを直せばいいでしょうか。
教えて頂けませんか?
(現在のVBA)
(1)「Data!FB63376,FG63376,FI63376」を「拾い出し!K4」にコピー&ペースト
値が入っている場合、下の行に貼付け。
Sub Macro1()
Range("FB63376,FG63376,FI63376").Select
Range("FI63376").Activate
Selection.Copy
Sheets("拾い出し").Select
If Range("K4").Value = "" Then
Range("K4").Select
Else
Range("K" & Rows.Count).End(xlUp).Offset(1).Select
End If
ActiveSheet.Paste
Sheets("Data").Select
(2)「Data!FO63367:FQ63372」を「拾い出し!O4」に値のみをコピー&ペースト
値が入っている場合、下の行に貼付け。
Range("FO63367:FQ63372").Select
Selection.Copy
Sheets("拾い出し").Select
If Range("P4").Value = "" Then
Range("P4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Else
Range("P" & Rows.Count).End(xlUp).Offset(1).Select
End If
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("Data").Select
Application.CutCopyMode = False
End Sub
以上です。
お分かりになる方教えて頂けませんか?
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
いちいちSelectしなくてもいい。
Sub Macro1()
Range("FB63376,FG63376,FI63376").Copy
With Sheets("拾い出し")
If .Range("K4").Value = "" Then
.Range("K4").PasteSpecial
Else
.Range("K" & Rows.Count).End(xlUp).Offset(1).PasteSpecial
End If
End With
というように。
この回答への補足
okormazdさんが、回答ありがとうございました。
すごい短くなるんですね~
教えて頂いたのを早速実行させて頂きました。
(結果)
「Data!FB63376,FG63376,FJ63376」⇒「Data!K4,L4,M4」へコピー
「Data!FP63367:FR63372」⇒「拾い出し!O4」へコピー
(希望)
「Data!FB63376,FG63376,FJ63376」⇒「拾い出し!K4,L4,M4」へコピーしたいです。
二つ共 With Sheets("拾い出し")に しているのに、片方は「Data!K4,L4,M4」に、片方は「拾い出し!K4,L4,M4」になります。どこがいけないのでしょうか?
Sub Macro1()
Range("FB63376,FG63376,FJ63376").Copy
With Sheets("拾い出し")
If Range("K4").Value = "" Then
Range("K4").PasteSpecial Paste:=xlPasteValues
Else
Range("K" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
End If
End With
Range("FO63367:FQ63372").Copy
With Sheets("拾い出し")
If Range("P4").Value = "" Then
.Range("P4").PasteSpecial Paste:=xlPasteValues
Else
.Range("P" & Rows.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
End If
End With
End Sub
申し訳ありませんが教えて頂けませんか?
okormazdさん、回答ありがとうございました。
補足に書かせて頂きましたが、一つだけうまくいきません。
教えて頂けませんか。
よろしくお願いします。
No.3
- 回答日時:
こんにちは。
RangeがどのシートのRangeなのか明確に書くクセをつけましょう。
例えば、K4セルは、"拾い出し"シートにも"Data"シートにも存在しますよね。
Range("K4") と書かれたセル範囲は、親オブジェクトが示されていないのでアクティブシートが対象になります。つまり、"拾い出し"シートにも"Data"シートのセルにもなるんです。
一方、
Sheets("拾い出し").Range("K4") と書くと、親オブジェクトが指定されているので"拾い出し"シートのK4セルであることがきちんとエクセル君に伝わるのです。
質問者さんが提示されたコードでも . がRangeの前に書かれていないので、Withで指定されたオブジェクトが、親オブジェクトとして指定されておらず、アクティブシートが対象になって処理されているから意図した処理になっていないんです。
まず、Withステートメントを使う前にそれぞれのRangeの前にシート名を付け、その上でWithステートメントでオブジェクトをまとめるようにしてみてください。
Sub Macro1編集前()
If Sheets("拾い出し").Range("K4").Value = "" Then
Sheets("Data").Range("FB63376,FG63376,FI63376").Copy _
Destination:=Sheets("拾い出し").Range("K4")
Else
Sheets("Data").Range("FB63376,FG63376,FI63376").Copy _
Destination:=Sheets("拾い出し").Range("K" & Rows.Count).End(xlUp).Offset(1)
End If
Sheets("Data").Range("FO63367:FQ63372").Copy
If Sheets("拾い出し").Range("P4").Value = "" Then
Sheets("拾い出し").Range("P4").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Else
Sheets("拾い出し").Range("P" & Rows.Count).End(xlUp).Offset(1).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
Application.CutCopyMode = False
End Sub
Sub Macro1編集後()
With Sheets("拾い出し")
If .Range("K4").Value = "" Then
Sheets("Data").Range("FB63376,FG63376,FI63376").Copy _
Destination:=.Range("K4")
Else
Sheets("Data").Range("FB63376,FG63376,FI63376").Copy _
Destination:=.Range("K" & Rows.Count).End(xlUp).Offset(1)
End If
Sheets("Data").Range("FO63367:FQ63372").Copy
If .Range("P4").Value = "" Then
.Range("P4").PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Else
.Range("P" & Rows.Count).End(xlUp).Offset(1).PasteSpecial _
Paste:=xlPasteValues, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
End If
End With
Application.CutCopyMode = False
End Sub
OtenkiAmeさん、こんばんわ!
回答ありがとうございます。
>RangeがどのシートのRangeなのか明確に書くクセをつけましょう。
そうですね、Rangeをきちんと書かないと駄目ですね。
説明して頂いたのを、見て理解出来ました。
後、編集前・編集後と書けばわかりやすくていいですね。
みなさんのお陰で、うまく出来ました。
ありがとうございました。
今後共、よろしくお願いします。
No.1
- 回答日時:
長々とコードを載せているが関係ないのでは>
http://www.serpress.co.jp/excel/vba035.html
のように
Application.ScreenUpdating = False(最後にTrueに戻す)
を入れて仕舞いではないのですか。これはエクセルVBAの常識といったことですよ。
Googleででも「vba 画面の更新を止める」で照会すれば沢山記事がある。
imogasiさん、回答ありがとうございました。
imogasiさんの、やり方で直りました。
ありがとうございました。
今後共、よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 動きっぱなしです。止め方とプロシージャの間違いを教えて下さい! 5 2022/08/15 23:08
- Excel(エクセル) エクセル VBAでシートのコピーを作りたい 1 2023/05/18 07:42
- Visual Basic(VBA) マクロを短くする 1 2023/01/15 00:11
- Excel(エクセル) エクセルのマクロでコピー後の貼り付け先を毎回指定したところにしたい 5 2022/08/12 10:47
- Visual Basic(VBA) マクロで最終行を取得してコピーしたい 3 2022/04/06 19:07
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Excel(エクセル) ExcelVBAについて。 2 2022/12/10 20:08
- Visual Basic(VBA) excelVBAについて。 4 2022/11/21 16:15
- Excel(エクセル) マクロで最終行から上に検索を逆にしたい 1 2022/05/17 18:27
- Visual Basic(VBA) excelVBAについて。 1 2022/11/30 06:16
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルVBAでオブジェクトが必...
-
Excell VBA にて配列に定数を代...
-
マクロのコマンドボタン《Activ...
-
エクセルで品番を入れると、そ...
-
コンボボックスへ降順に表示す...
-
B列の最終行までA列をオート...
-
エクセル マクロ オートフィ...
-
【Excel関数】UNIQUE関数で"0"...
-
エクセルVBAが途中で止まります
-
マクロ 最終列をコピーして最終...
-
vba 2つの条件が一致したら...
-
VBA シートをコピーする際に Co...
-
EXCELのSheet番号って変更でき...
-
VBAでの SendKeysの変数指定方法
-
Worksheets メソッドは失敗しま...
-
vbaで指定したセルより下の行を...
-
VBAを使って検索したセルをコピ...
-
マクロの「SaveAs」でエラーが...
-
VLOOKUPの列番号の最大は?
-
ワイルドカード「*」を使うとう...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Access-VBAでExcelファイ...
-
コンボボックスへ降順に表示す...
-
エクセルVBAでオブジェクトが必...
-
複数シートを一括で保護を掛け...
-
Excell VBA にて配列に定数を代...
-
エクセルのVBAについて教えてく...
-
マクロ実行後、画面がちかちか...
-
マクロのコマンドボタン《Activ...
-
Auto_Openマクロ
-
エクセルVBA 別シートの最終セ...
-
vbaアニメーションについて
-
Excelに関数使用を調べる方法
-
エクセルのVBAの関数について
-
エクセルマクロ 変数をワーク...
-
オフィス2003VBAのスプレッドシ...
-
エクセルの全てのシート名を一...
-
エクセルを共有にすると、シー...
-
エクセルの図形(線)の情報
-
EXCELに関する質問
-
エクセル マクロについて、 Inp...
おすすめ情報