• 締切済み

シートの非表示について

マクロを始めたばかりで解読はできるのですが、まだまだ自分で文書を作ることが出来ません。どなたか教えて下さい。 (1)まず、A,B,C,Dのシートを作ります Aシート = 入力シート Bシート = 入力シートで入力したデーターを表にして表示されるシート Cシート = 入力シートのセルA1~A15までのデーターがCシートのA1~A15に表示されるシート Dシート = 入力シートのセA16~A30までのデーターがDシートのA1~A15に表示されるシート (2)マクロボタン『非表示』を押す (3)シートが下記のように非表示される Aシート = 表示 Bシート = 表示 Cシート = シートのセルA1に入力があれば表示、無ければ非表示 Dシート = シートのセルA1に入力があれば表示、無ければ非表示 (If Sheets("Cシート").Range("A1").Value <> "" Then)みたいな というマクロを作りたいのですが。

みんなの回答

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

VBAコードを勉強するのもよいがその前に シート設計、シート間のデータ移動など勉強すること、明確に文章化して説明できる能力を磨く必要があるように思う。 ーー それに次のステップの作業に進むキッカケが考えられていない。 (イベントという考え)およびイベントの勉強。 ーー 表示・非表示の理由(Dシート = シートのセルA1に入力があれば表示、無ければ非表示。)=>入力後まとめてやれば出来ることでは。 >マクロボタン『非表示』を押す 別作業をマクロボタンに登録しただけでは。 一連の動きが、説明が十分でなくわかりにくい。 ーー 別案で Aシートを入力専用にし、A商品の1-15行を入力する。完了ボタンクリックでCシートのA1-A15にデータ移送。 次にB商品のデータをAシートの1-15行に入れる。 完了ボタンクリックでDシートのA1-A15データ移送。・・・ などという手もある。この質問はそういうことか。 エクセルのメニューのデーターフォームの仕組みもあるが参考に。 Bシートは累積データか。 Bシートから、C,D・・シートを作る手もある。 ーー データが入らないシートもあるようだが、するとデータ入力と同時に納めるシート(名)も指定するのでは? そういうことは質問に書いてない。 ーーー 非表示はVisible=Falseか。なぜそうする理由があるのか。 Sheet3を非表示の例 If Sheets("Cシート").Range("A1").Value <> "" Thenのあとは Sub test01() 'ココに上記If文 Worksheets("Sheet3").Visible = False End Sub データが発生したら,通常に戻すのでしょうが、面倒なだけでは。 ーー 別シートにすると言うことは、後々非常に加工・計算などが難しくなる。覚悟は出来ているか。 ーー あるシート(多数ある中で)名を指定して、そこで処理をするコードは勉強したか。 ーーー 手作業でやる例を参考にして、1歩1歩、どういうことをする必要があり、そのVBAコードが必要か書き出してみたか。 ーー 全体的に課題丸投げで、作ってくださいというタイプになっていて、 このコーナーの規約上許されない。 もう少しVBAコード上で、質問のマトを絞れるまで勉強して質問すべきでは。

seikasan
質問者

お礼

すいません。 いろいろなご説明ありがとうございます。 がんばって作ってみます。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

マクロの自動記録を行なってから、いじってみては如何でしょう。 そこで躓いたらコードを提示してみる。

関連するQ&A

  • VBAのTextBox表示について質問します。

    実は、MicrosoftのExcel内にありますVBAを使ってシート内に記載られている内容を Userform内にあるTextBoxに表示させたいと考えています。 UserformにあるTextBoxは、シートのセルに対してTextBoxを1個配置させています。 例えば・・・セルA1に入力されている文字をTextBox1に表示 セルB1に入力されている文字をTextBox2に表示 セルC1に入力されている文字をTextBox3に表示 セルD1に入力されている文字をTextBox4に表示 セルE1に入力されている文字をTextBox5に表示と言う様な感じで表示したいです。 セル表示範囲は、A1~E24までのセルでTextBoxもTextBox24まで存在します。 TextBox1.Text = ThisWorkbook.Sheets("Sheet1").Range("A1") TextBox2.Text = ThisWorkbook.Sheets("Sheet1").Range("B1") TextBox3.Text = ThisWorkbook.Sheets("Sheet1").Range("C1") TextBox4.Text = ThisWorkbook.Sheets("Sheet1").Range("D1") TextBox5.Text = ThisWorkbook.Sheets("Sheet1").Range("E1") TextBox6.Text = ThisWorkbook.Sheets("Sheet1").Range("A2") TextBox7.Text = ThisWorkbook.Sheets("Sheet1").Range("B2") TextBox8.Text = ThisWorkbook.Sheets("Sheet1").Range("C2") TextBox9.Text = ThisWorkbook.Sheets("Sheet1").Range("D2") TextBox10.Text = ThisWorkbook.Sheets("Sheet1").Range("E2") 以降~途中省略 TextBox120.Text = ThisWorkbook.Sheets("Sheet1").Range("E24") と言う様な・・・ 上記の、この様なコードでして行くと事は可能なんですが・・・ もっと短く出来ないでしょうか?

  • エクセル2007マクロ シート間のセルコピー

    [Sheet1]にあるデータを[Sheet2]にコピーするマクロボタンを[Sheet2]に作りたいのですが、マクロがよく分からないので、「マクロの記録」で作成してみました。 Sub siken() ' ' siken Macro ' ' Sheets("Sheet1").Select Range("A1").Select Selection.Copy Sheets("Sheet2").Select Range("A1").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B3").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B3").Select ActiveSheet.Paste Sheets("Sheet1").Select Range("B6:D6").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet2").Select Range("B6").Select ActiveSheet.Paste End Sub (実際はもっと多くのセルをコピーします) マクロを実行すると、ちゃんとコピーできるのですが、セルをコピーする都度[Sheet1]と[Sheet2]が交互に表示されます。 コピー元の[Sheet1]を表示させずにマクロを実行させるにはどのようにしたらよいのでしょうか? よろしくお願いします。

  • エクセル VB を使ってシートをまたいだセルへの自動記入を教えてください

    エクセルとマクロ(VB)を使い、こづかい帳や家計簿の様な物を想定して、 「前月シート」の「今月残高」が「翌月シート」の「先月残高」に 自動で記入する方法を教えてください。 現在Sheet1のセルには      A    B      C      D 1 2008年12月 2        12   前月残高    99999 3           収入    5555 4           支出     7777 5           今月残高   97777 ずれるので書き直しますと A1:2008年12月(=Date(2008,B2,1) B2:12 C2:"前月残高 " C3:"収入 " C4:"支出" C5:"今月残高" D2:99999 D3:5555 D4:7777 D5:9777(=D2+D3-D4) D5は式「=D2+D3-D4」、B2は作業セルでA1に入力されている関数 「=DATE(2008,B2,1)」を表示させ、マクロを実行するごとにSheetが一つずつコピー増加され、B2が+1し、それに伴いA1の年月が変わります。 新しく現れたSheetの名前は、A1を参照して(この場合ですと)「12月」となります。 このマクロを実行するごとに「12月」「1月」・・・とシートが増えていきますが、 (先月の)「今月残高」を(翌月の)「前月残高」に記入する方法が分かりません。 VBAは Sub Macro1() ' ' Macro1 Macro ' マクロ記録日 : 2008/12/9 ユーザー名 : ' ' Sheets("Sheet1").Select Sheets("Sheet1").Copy Before:=Sheets(2) Sheets("Sheet1 (2)").Select Sheets("Sheet1 (2)").Name = Format(Range("A1").Value, "mm") & "月" Sheets("Sheet1").Select Range("B2").Value = Range("B2").Value + 1 Range("D2:D4").Select Selection.ClearContents Sheets("sheet1").Select Range("d2").Select ActiveCell.FormulaR1C1 = "='12月'!R[3]C" End Sub 最後の行の 「"='12月'!R[3]C"」をマクロを実行するごとに「 "='1月'!R[3]C"」 「 "='2月'!R[3]C"」・・・・・・・ とする方法は無いでしょうか。よろしくお願いいたします。

  • 新しいシートが表示されません。

    Sub 新清算書シート作成() ' ' 新清算書シート作成 Macro ' 新しいシートに交通費清算書を作成する ' ' Worksheets("新清算書").Range("b1:f22").Copy Set NewSheet = Sheets.Add(Type:=xlWorksheet) ActiveSheet.Paste Destination:=NewSheet.Range("b1:f22") NewSheet.Visible = True NewSheet.Name = Sheets("メニュー").Range("A3").Value & Sheets("メニュー").Range("B3").Value Worksheets("メニュー").Range("A3").Copy NewSheet.Range("D4") Worksheets("メニュー").Range("B3").Copy NewSheet.Range("F4") ActiveWindow.SelectedSheets.Visible = False End Sub サンプルコードを勉強し自分なりに変えて作っています。 このコードでNewSheet.Visible = True があるにも関わらず、シートが表示されなくて困っています。しかし書式からシート→再表示にいけば表示は可能です。NewSheet.Visible = True 以外にも方法はありますか?  また新清算書をマクロで実行してコピーしても完璧にはコピーできず、セルの中身はコピーできるのですが、セルの行や列の幅まできれいにコピーできません。完璧にコピーするにはどうすればいいのでしょうか?

  • 実行時エラー 1004について 【超初心者です】

    マクロ超初心者です。 WindowsXP Excel 2003です。 データ入力用にマクロを作成してみましたが、 「実行時エラー 1004 アプリケーション定義・・・・」というメッセージが出てきます。 シート1「入力」を入力用画面として、 シート2「データ」にシート1で入力した内容が反映されるものです。 シート1「入力」の入力用画面はセルの結合が多く、 入力するセル以外はシートの保護をかけています。 下記のようなマクロです。 Sub 登録() ActiveSheet.Unprotect Password:="×××" 最終行 = Sheets("データ").Range("A" & Rows.Count).End(xlUp).Row + 1 Sheets("データ").Range("A" & 最終行).Value = 最終行 Sheets("データ").Range("B" & 最終行).Value = Range("C2:D2").Value Sheets("データ").Range("C" & 最終行).Value = Range("C3").Value Sheets("データ").Range("D" & 最終行).Value = Range("E3").Value          Sheets("データ").Range("C2:D2").ClearContents Sheets("データ").Range("C3, E3").ClearContents MsgBox "登録しました" ActiveSheet.Protect Password:="×××", DrawingObjects:=True, contents:=True, UserInterfaceOnly:=True End Sub   超初心者で、何をどうしたらいいのかまったくわかりません。   なるべく専門用語がないように   ご指導いただくとありがたいです。   非常に困っておりますので、よろしくお願いします。   

  • 【Excel VBA】シート表示&ボタン操作

    何度もすみません。 シート表示のコードの続きです。 また、別記事で質問していた件(件名の後者)も合わせて コードに組み込んでいます。 Sheets(actsht).Tab.ColorIndex = 2 '当月分のワークシート見出しの色を白に設定する Sheets(actsht).Range("B3").Value = Sheets("Sheet2").Range("A1").Value 'ワークシート(Sheet2)のA1セルの値を当月分のワークシートのB3セルに代入 Sheets(actsht).Range("B4").Value = Sheets("Sheet2").Range("A2").Value 'ワークシート(Sheet2)のA2セルの値を当月分のワークシートのB4セルに代入 ActiveSheet.Range("A2").Select '翌月分のワークシートのA2セルを選択する Sheets("元データ").Visible = True 'ワークシート(元データ)を表示する Call clear_Click 'フォームボタン(clear)をクリックする Sheets("元データ").Visible = False 'ワークシート(元データ)を非表示にする Exit For 'For文を抜ける ElseIf Anser = vbNo Then 'MsgBoxで"vbNo"を選択した場合 Exit For 'For文を抜ける End If 'If文を終了する End If 'If文を終了する Next 'iの値を1増分する If Flag = O Then 'Flagが0であった場合 MsgBox ("新しいワークシートを作成出来ません。") 'MsgBoxを表示する End If 'If文を終了する End Sub

  • 非表示シートに関して(エクセル・マクロ)

    度々ご教授お願い致します。 今までの質問に対して回答は得られたのですが 下記が質問内容 >>1)シート1のA1セルを右クリックするとシート2を印刷。 >>2)シート1のB1セルを右クリックするとシート3を印刷。 >>3)それぞれのシート印刷時に2部印刷が行われるようにする。 下記が回答済みのマクロ Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean) If Intersect(Target, Range("A1:B1")) Is Nothing Then Exit Sub If Target.Address = "$A$1" Then Sheets("Sheet2").PrintOut Copies:=2 ElseIf Target.Address = "$B$1" Then Sheets("Sheet3").PrintOut Copies:=2 End If Cancel = True End Sub シート2とシート3を非表示にした場合、 今まで出来た(印刷)作業が出来なくなったのですが、 こちらを解消するためにはどのような記述を増やせばよろしいのでしょうか。 よろしくお願い致します。

  • 指定記号のみ別シートにコピー

    sheet1(表-1)の入力文字「A,C,E」をsheet2へコピーする。 sheet2(表-3)のように[A,C,E」以外及びsheet1空白のセルはsheet2でも空白としたい。 その際、sheet2(表-2)に入力済みの記号「○、●、◎」はそのまま残したい。 下記のコードでは、sheet2に入力済みの記号「○、●、◎」が消えてしまいます。 どなたかコードがわかる方よろしくお願いします。 Sub シートコピー() Dim r As Range For Each r In Worksheets("Sheet1").Range("B1:D5") If WorksheetFunction.CountIf(Range("A8:A10"), r.Value) Then Sheets("sheet2").Range(r.Address).Value = r.Value Else Sheets("sheet2").Range(r.Address).Value = "" End If Next End Sub セルA11に"0"を入力して実行してもsheet1空白セルはsheet2でも空白となり困っています。

  • VBA 特定のシートが選択されていたら、セル入力

    Excel365。簡略化したVBAです。 現在、「あ」というシートが選択されていたら、「あ」シートの「A1」セルに「a」と入力 「い」というシートが選択されていたら「い」シートの「A1」セルに「i」と入力。 それ以外のシートが選択されていたら、何もしない。 If Sheets("あ").Activate Then Range("A1") = "a" ElseIf Sheets("い").Activate Then Range("A1") = "i" Else 以下省略 「い」シート選択中でも、「あ」シートの「a1」セルに入力され、シートを増やしても、「あ」シートの「a1」セルに入力されます。 「い」シートを入力していません。 簡単だと思っていたのですが…。 どんなコードになるのでしょうか?

  • エクセル VBA シートの選択 

    windows XP でエクセル2000を使っています。 Sub aaa() Sheets("Sheet1").Select Dim a As String a = Cells(2, 4) Sheets(a).Select Range("A1").Select End Sub というマクロだと セルに入っている値のシート名を探してくれます。 ですが Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range) If Intersect(Target, Range("B11:b683")) Is Nothing Then Exit Sub Worksheets("Sheet1").Range("C2").Value = Target.Value Dim b As String b = Range("C2).value (←ここをcellsにしてもダメ) Sheets(b).Select Range("A1").Select End Sub これだとsheets(b)を選びません。Sheets(b).Selectのところが黄色くなります。 何処が間違えているのでしょうか。 全くの素人ですが、仕事で必要に迫られています。 わかりやすく回答・解説くれると助かります。

専門家に質問してみよう