Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 10 Home : Excel 2016)
マクロの転記が終われば指定のシートA1のセルに
投稿日時: 18/05/13 09:28:08
投稿者: 園 日暮

いつもお世話になりありがとうございまままます。
 
下記のマクロでシート「入力」から」シート「売上表」に転記した後、
黒ずんだようになり醜くその都度A1セルをクリックしています。
 
その原因が 下記のマクロで
Range("A1").Select がシート「入力」のA1セルになりシート「売上表」A1セルではないからですよね。
 
※ご指導をいただきたいのは、
 
シート「売上表」のRange("A1").Select
 
にするるにはどうすればいいかご指導いただけませんか。
 
 
構文の参考
Sub 転記()
Dim i As Long, wS As Worksheet
 Set wS = Worksheets("売上表")
With Worksheets("入力")
 For i = 5 To 9 '★5〜9行までループ
If .Cells(i, "L") <> "" Then
 .Cells(i, "L").Resize(, 8).Copy
 wS.Cells(Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
 End If
 Next i
 Application.CutCopyMode = False
  
 End With
  
 Range("A1").Select
  
 End Sub

回答
投稿日時: 18/05/13 09:54:42
投稿者: simple

ワークシートを選択して、A1セルを選択するというパターンでもよいですし、
Application.Goto シート.Range("A1")
などとすれば一行で済みます。

投稿日時: 18/05/13 10:26:40
投稿者: 園 日暮

ありがとうございます。
下記のように二通りに試しましたがエラー警告が出ます。
 
 
実行時エラー'424'
オブジェクトが必要です。
 
 ・・・
 Next i
 Application.CutCopyMode = False
 Application.Goto シート.Range("A1")
 End With
  
 End Sub
 
 
 ・・・
 Next i
 Application.CutCopyMode = False
 End With
 Application.Goto シート.Range("A1")
 End Sub

回答
投稿日時: 18/05/13 10:40:39
投稿者: かすみの

「シート」を自分の指定するワークシートオブジェクトに変更してないからですね。
 
 Set wS = Worksheets("売上表")
としているので、
wSに変更する必要があるってことです。
 
(もちろん Worksheets("売上表") を直接書いてもいいわけですが)

回答
投稿日時: 18/05/13 10:55:42
投稿者: simple

フォローありがとうございました。
手抜きの回答でしたか。

投稿日時: 18/05/13 11:13:49
投稿者: 園 日暮

下記のように変更して、
VBEの 書式 の下の 右向きの三角 Sub/ユーザーフォームの実行 ではうまくできるのですが
コマンドボタンにマクロ登録 ではうまくできないのはなぜでしょうか。
 
下記のマクロの変更方法に何か間違いがあるのでしょうか。
 
 
 
 
Sub 転記()
Dim i As Long, wS As Worksheet
 Set wS = Worksheets("売上表")
With Worksheets("入力")
 For i = 5 To 9 '★5〜9行までループ
If .Cells(i, "L") <> "" Then
 .Cells(i, "L").Resize(, 8).Copy
 wS.Cells(Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
 End If
 Next i
 Application.CutCopyMode = False
  
 End With
 With Worksheets("売上表")
 Range("A1").Select
 End With
 End Sub

回答
投稿日時: 18/05/13 11:25:50
投稿者: WinArrow
投稿者のウェブサイトに移動

園 日暮 さんの引用:
下記のように変更して、
VBEの 書式 の下の 右向きの三角 Sub/ユーザーフォームの実行 ではうまくできるのですが
コマンドボタンにマクロ登録 ではうまくできないのはなぜでしょうか。
 
下記のマクロの変更方法に何か間違いがあるのでしょうか。
 
 
 
 
Sub 転記()
Dim i As Long, wS As Worksheet
 Set wS = Worksheets("売上表")
With Worksheets("入力")
 For i = 5 To 9 '★5〜9行までループ
If .Cells(i, "L") <> "" Then
 .Cells(i, "L").Resize(, 8).Copy
 wS.Cells(Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
 End If
 Next i
 Application.CutCopyMode = False
  
 End With
 With Worksheets("売上表")
 Range("A1").Select
 End With
 End Sub

 
2つの問題点があります。
 
(1)コマンドボタンをどのシートに設置しているのかしら?
 コマンドボタンをクリックするわけですから
 コマンドボタンが設置されているシートがアクティブになっているはずです。
 推測ですが、「入力」シートに設置されていると思います。
(2)他のシートのセルをいきなり線多雨することはできません。
 「入力」シートがアクティブの状態から、他のシートのセルを選択する前には、
 当該シートをActiveにする必要があります。
 
 
 

回答
投稿日時: 18/05/13 11:45:01
投稿者: WinArrow
投稿者のウェブサイトに移動

コードの修正箇所
 
> wS.Cells(Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
 

 wS.Cells(ws.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
 

投稿日時: 18/05/13 12:05:54
投稿者: 園 日暮

具体的に教えていただけませんか。
あなたはご存知でしょうけど。

回答
投稿日時: 18/05/13 12:09:53
投稿者: もこな2

書いてる間に間に内容かぶっちゃったけどそのまま
 
横から口出し失礼します。

引用:
Sub 転記()
    Dim i As Long, wS As Worksheet
    Set wS = Worksheets("売上表")
 
    With Worksheets("入力")
        For i = 5 To 9 '★5〜9行までループ
         
            If .Cells(i, "L") <> "" Then
                .Cells(i, "L").Resize(, 8).Copy
                wS.Cells(ActiveSheet.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial _
                Paste:=xlPasteValues
            End If
        Next i
  
        Application.CutCopyMode = False
    End With
  
    Application.Goto wS.Range("A1")
End Sub

たぶんですけど、
(1)
Rows.Countの部分で対象シートの修飾を省略してるから辻褄が合わないよって怒られてるんじゃないですか?
 
(2)
「With Worksheets("売上表")」とやってもアクティブシートが切り替わっているわけではないので、どうしてもWithステートメントを使いたいなら
     With Worksheets("売上表")
        .Activate
        .Range("A1").Select
    End With
こんな感じにする必要があるでしょうし、simpleさんのおっしゃるようにApplication.Gotoで処理するって手もありますよね

回答
投稿日時: 18/05/13 12:13:37
投稿者: もこな2

おっと失礼しました。
先ほどの投稿の(1)は、辻褄が合わないとは指摘されないですね。
ちょっと手抜き感が出るだけで・・・
 
(1)の方は無視してください

回答
投稿日時: 18/05/13 12:23:03
投稿者: もこな2

園 日暮 さんの引用:
VBEの 書式 の下の 右向きの三角 Sub/ユーザーフォームの実行 ではうまくできるのですが
コマンドボタンにマクロ登録 ではうまくできないのはなぜでしょうか。

園 日暮 さんの引用:
具体的に教えていただけませんか。
あなたはご存知でしょうけど。

う〜ん。回答とは違いますけど、なんかとげがあるような聞き方に思いますので、そうなると、「あなたはご存知でしょうけど、回答者にはなにがうまくできないのかわかからないので教えていただけませんか。」と言いたくなるのは私だけでしょうか・・・
 
エラーが出て実行できないのであればエラーの内容を、思った動作にならないのであればどうなってしまうのかなどを伝えると望む回答が付くのでは?

投稿日時: 18/05/13 12:51:58
投稿者: 園 日暮

いろいろのアドバイスを試しました結果うまくできました。
 
simple様/WinArrow様
ありがとうございます。
 
1)
コマンドボタンを「入力シート」から「売上表」シートに移動
2)
wS.Cells(wS.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
wS.の追加
 
 
参考に
Sub 転記()
Dim i As Long, wS As Worksheet
 Set wS = Worksheets("売上表")
With Worksheets("入力")
 For i = 5 To 9 '★5〜9行までループ
If .Cells(i, "L") <> "" Then
 .Cells(i, "L").Resize(, 8).Copy
 wS.Cells(wS.Rows.Count, "B").End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValues
 End If
 Next i
 Application.CutCopyMode = False
 Range("A1").Select
 End With
   
 End Sub