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

始めて投稿します。
Sheet1に設置したボタンを押すとSheet2のデータを処理するようにしたいのですがうまくいきません。
処理内容は一定の行を隠し、表示セルのみのデータを新規シートに貼り付け(Sheet3)貼り付けたシートのみを新規ファイルにして共有することを目的にしています。
(Sheet2はSheet3の閲覧者には見せたくないデータがあるため)
(Sheet2にボタンを置くと上手くいくのですがSheet2にボタンを置きたくないです。最初はSheet2にボタンを置いて作りました。指定ファイルだけ新規ファイルに保存する方法もうまくいかず、貼り付けと保存は一つにしたいのですが後付けで作ったの別々になってしまいました。)
何か足りないのだろうということはわかるのですが何を書き足せば実行できるようになるのかお知恵をお貸しいただけますでしょうか。

Private Sub Cmd隠す_Click()
Sheets("Sheet2").Activate
Dim 行番号 As Long

'行を隠す
For 行番号 = 1 To 10
If Cells(行番号, 6).Value = "A" Then
Cells(行番号, 1).EntireRow.Hidden = True
End If
Next 行番号
End Sub

Private Sub Cmd表示_Click()
Sheets("Sheet2").Activate
'表全体を再表示する
Cells.Select
Selection.EntireRow.Hidden = False
Selection.EntireColumn.Hidden = False

Cells(1, 1).Select
End Sub
Private Sub Cmd貼付_Click()
' 可視セル貼付

Range("A2").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.SpecialCells(xlCellTypeVisible).Select
Selection.Copy
Sheets("Sheet3").Select
Range("A2").Select
ActiveSheet.Paste
Columns("B:B").EntireColumn.AutoFit
Columns("E:E").EntireColumn.AutoFit
Range("A2").Select
End Sub

Sub 最終更新日を取得して保存()
' 最終更新日を取得して保存

Dim myFile As String
myFile = ThisWorkbook.Path & "\" & "Sheet3" & Format(Date, "yymmdd") & ".xlsm"
ThisWorkbook.SaveAs Filename:=myFile
End Sub

A 回答 (5件)

シートをアクティブにせず、セルにシート情報をくっつけましょう。


とりあえず、下のように書き換えて試してみてください。
Sheets("Sheet2").Cells(行番号, 6).Value
シートをアクティブにするところをコメントアウトしてね。

理解できました?
    • good
    • 0
この回答へのお礼

くんこばさまありがとうございます!やってみます!

お礼日時:2016/05/20 13:59

要するに、セルにシート情報がないんで、デフォルトでアクティブなシートを見に行ってるんですね。


書き方は、もっとスマートなものがあるので、ネットで調べてみて下さい。
    • good
    • 0
この回答へのお礼

Cmd隠すでSheets("Sheet2").Cells(行番号, 6).ValueにするとやはりSheet2を認識せず、

Cmd表示では
Sheets("Sheet1").Cells.Select にするとデバッグになってしまいました・・・

お礼日時:2016/05/20 14:14

一応、2つの案です。


①「Select」「Paste」を使わずに、セルに1ずつ代入すれば、アクティブシートでなくても出来ます。
②「Application.ScreenUpdating = False」を貼り付け先のシートを開く前に実行し、処理が終わったところで、元のシートに戻してから「Application.ScreenUpdating = True」を実行するのも良いかもです。
    • good
    • 0
この回答へのお礼

①の方法がよくわからないのですが
②は処理速度が速くなるようなので書き足してみますありがとうございます。

お礼日時:2016/05/20 14:01

Sheets("Sheet1").Cells.Select


確認しました。
どうも、selectだけバグっちゃうみたいです。
取得も反映なら大丈夫。
    • good
    • 0

あ、取得と反映です。


A1セル=Sheets("Sheet1").Cells(1,1)

※スマホなんで、時間がかかってしまいます。
    • good
    • 1
この回答へのお礼

If Sheets("Sheet2").Cells(行番号, 6).Value = "A" Then
Sheets("Sheet2").Cells(行番号, 1).EntireRow.Hidden = True
End If
これで隠す方のボタンは非表示シートで反映しましたが

隠した行ふくめ全部を再表示するボタンで
同じように各処理にシート名を指定するとデバッグになってしましました。。。

Sheets("Sheet2").Cells.Select
Sheets("Sheet2").Selection.EntireRow.Hidden = False
Sheets("Sheet2"). Selection.EntireColumn.Hidden = False

お礼日時:2016/05/20 17:54

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

このQ&Aを見た人はこんなQ&Aも見ています