• 締切済み

1.セルに『無し』と力すれば機能するマクロ

1.セルに『無し』と力すれば機能するマクロの『無し』を例えばA1セルにデータの入力規則でリストを作成して"無し"を選び、C10セルで=A1で無しを表示しましたがC10セルが非表示になりませんでした。どのようにすれば出来るかをお願いします。

みんなの回答

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.6

回答No.3の補足に下記の条件が提示されていますが行と列の認識に誤りがあるようです。 「そこで 例えばA1セルで無しと入力したらC10で無しが表示され10列が非表示になりA1セルに有りと入力したらC10が有りの表示になり10列が表示されるようにしようとしています。」の中で「10列」としているのは「C列」の誤りか「10行」の誤りと思います。 「10行」の誤りでしたら次のコードになります。 Private Sub Worksheet_Change(ByVal Target As Range) Dim myRange As String myRange = ActiveCell.Address If ActiveCell.Address = "$A$1" Then Range("C10").Select If Range("c10").Value = "無し" Then Range("C10").EntireRow.Hidden = True MsgBox "C10セルの値は " & Range("c10").Value & " です。" Else Range("C10").EntireRow.Hidden = False End If End If Range(myRange).Select End Sub 「10列」が「C列」の誤りのときは次のように修正してください。 Range("C10").EntireRow.Hidden = True      ↓ Range("C10").EntireColumn.Hidden = True Range("C10").EntireRow.Hidden = False      ↓ Range("C10").EntireColumn.Hidden = False 尚、MsgBoxで表示している部分は動作確認のためなので不要になればコメントアウトまたは削除してください。 また、質問の内容からA1以外の値変更には最小のチェックでイベントから抜け出すようにしています。 C10セルの内容で確認する方法ではA1以外のセルで値が変更されたときも表示または非表示の再操作が起り負荷が増えますのでお勧めできません。

  • SI299792
  • ベストアンサー率48% (715/1480)
回答No.5

 なるほど。何が悪いのかわかりました。  Worksheet_ChangeのTargetは、変化した場所全てが入るわけでは無く、入力で変化させた1か所しか入りません。つまり、TargetにはA1しか入っておらず、C10 は入っていません。  試しにプログラムの頭に、Debug.Print Target.Countを入れて見て下さい。常に1です。  また、For Eachの後に、Debug.Print rg.Addressを入れれば、このループは1回だけ、A1しか処理されていないのが判ります。  この場合C列全体を見るしかありません。 ' Private Sub Worksheet_Change(ByVal Target As Range) '   If Target.Address <> "$A$1" Then     End   End If '  最初に非表示を解除   Cells.EntireRow.Hidden = False   Set Target = [C:C].Find("無し", LookIn:=xlValues, LookAt:=xlWhole) '  「無し」のセルが見つからなくなるまで繰り返す。   Do Until Target Is Nothing     Rows(Target.Row).Hidden = True     Set Target = [C:C].FindNext   Loop End Sub  最初からプログラムを載せていただければ、こんな2度手間は省けました。  変化したセルがどこかを見る方法はありません。カウントは入れませんでした。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.4

>例えばA1セルにデータの入力規則でリストを作成して"無し"を選び、C10セルで=A1で無しを表示しましたがC10セルが非表示になりませんでした。 意味不明です。 「非表示」は行または列全体を対象に表示/非表示が選択できますがC10セルを単独で表示/非表示を指定できません。 VBAのイベントプロシージャで何れかのセルの値が変化はしたとき実行するプログラムを記述できますが、あなたの要望する内容を第三者が理解できるようにしないと目的に合うコードのサンプルを提示できません。 質問の内容からはA1セルにデータの入力規則でリストから「無し」を選択するとC10セルにはA1と同じ「無し」と言う文字列が代入されます。 C10セルの「無し」を「非表示」にするという状態がどのようなことか説明されていません。 C10セルのフォントの色を白にして見えなくするのか?、10行目の行を非表示にするのか?、またはC列を非表示にするのかを決めてください。 また、A1のセルの値を「無し」以外の値に変更したときはどうするかも提示する必要があります。

  • SI299792
  • ベストアンサー率48% (715/1480)
回答No.3

上記間違い、こちらをご利用ください。 Cells が付いているかどうかの違いです。上記でも問題なく動くのですが、余計なもの付いているとどうも気になって。 Option Explicit ' Private Sub Worksheet_Change(ByVal Target As Range) '   Dim Col As Integer '   If Target.Address <> "$A$1" Then     End   End If '   Cells.EntireColumn.Hidden = False   Set Target = [B:XFD].Find("無し", LookIn:=xlValues, LookAt:=xlWhole) '   Do Until Target Is Nothing     Col = Target.Column     Columns(Col).EntireColumn.Hidden = True     Set Target = [B:XFD].FindNext   Loop End Sub

kawamura042
質問者

補足

■ セルに『無し』と力すれば機能するマクロ ■です。 '//   C列の3行目以降に『無し』を入力すると、その行を非表示にする '//   『無し』をコピーして複数セルに貼り付けても可にするため下記のようにしました。しかし直接セルに無しを入力すると非表示になる為表示するときはマクロを使わずに表示しなければなりません。 そこで 例えばA1セルで無しと入力したらC10で無しが表示され10列が非表示になりA1セルに有りと入力したらC10が有りの表示になり10列が表示されるようにしようとしています。 Private Sub Worksheet_Change(ByVal Target As Range)   If Target.Count > 100 Then Exit Sub  '// 多数のセルの修正は無視する   Dim rg As Range        '// セル   For Each rg In Target     If rg.Column = "3" Then  '// C列なら       If rg.Value = "無し" Then         Rows(rg.Row).Hidden = True       '// 下2行を有効にすると、セルの『無し』をクリアすると行が表示される       'Else       '  Rows(rg.Row).Hidden = False       End If     End If   Next End Sub

  • SI299792
  • ベストアンサー率48% (715/1480)
回答No.2

まず、『無し』と力すれば機能するマクロがどんなマクロか記述がないので、どこが悪いかわかりません。 また、何を非表示にするのかわかりません。 私は、列を非表示ににするプログラムを作ってやってみたらうまく行きました。 Option Explicit ' Private Sub Worksheet_Change(ByVal Target As Range) '   Dim Col As Integer '   If Target = "無し" Then     Col = Target.Column     Columns(Col).EntireColumn.Hidden = True   End If End Sub それとも、C10セルで=A1 を入れた後に、A1を『無し』にしたら、Cが非表示になるということでしょうか。これを実現するには、全てのセルをチェックする必要があります。 A列は有り・無しの切替の為、対象外にしました。 Option Explicit ' Private Sub Worksheet_Change(ByVal Target As Range) '   Dim Col As Integer '   If Target.Address <> "$A$1" Then     End   End If '   Cells.EntireColumn.Hidden = False   Set Target = [B:XFD].Cells.Find("無し", LookIn:=xlValues, LookAt:=xlWhole) '   Do Until Target Is Nothing     Col = Target.Column     Columns(Col).EntireColumn.Hidden = True     Set Target = [B:XFD].FindNext   Loop End Sub 非表示にするのは行かもしれません。その場合これを参考に作り直して下さい。

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

>せるに『無し』と力すれば機能するマクロ エクセルのVBAのセルのChangeイベントというものを使えば1-2行ぼどのコードで実現します。しかしVBAでも、普通の課題をこなした後に学ぶ仕組みで、経験がすくないのに、使うと弊害も出ると思う。あえてコードを書かない。 しっかり勉強した後に考えるべきです。 素人がエクセルなどのソフトを使うと、しょっちゅう(というかほぼすべて)、出くわす機能(イベントドリブン)なので、簡単に思うかもしれにが、パソコンが出現する前は、個人の使用がメインではなかったので、大変な上級の機能だった。 それで、少なくともVBAの解説書でも読んでからにしたら、と思う。 どうしてもやるなら Gooleで「http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html 」 照会し http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_event.html などからはじめるとよい。

関連するQ&A

  • マクロの記録に入力規則設定セルの選択が記録されない

    "AAA"と"BBB"と言うExcelファイルがあり、"AAA"はsheet1のA2セルを入力規則で(1)~(4)まで選択できるようにしています(リスト"(1)~(4)"はA1~D1セルに入力)。この選択を行うことで、同シートにあるグラフが(1)~(4)のデータを切り替え表示するようにしています。又"BBB"のファイルにも、sheet1のA2セルを入力規則で、ア~オ(リスト"ア~オ"はAA1~AA5セル)まで選択できるようにしており、この選択切り替えで同シートにあるグラフがア~オのデータを表示するようにしています。 通常は、この9種のデータグラフを、入力規則を設定したセルの値を切り替えることで、状況確認を行っています。只、会議用の資料としては、毎回グラフを切り替え、9種類のグラフをコピーし、別のファイル"会議用データ"に図形の貼り付けて作成している状況です。 この一連の作業をExcelのマクロの記録で行わせようと思い、"会議用データ"ファイルのsheet1にボタンを用意し、sheet2に9種のデータグラフを図形貼りけする操作を記録させました。ところが、"AAA"と"BBB"の入力規則を設定したセルで値を切り替える作業がマクロに記録されず、旨く動作しません。どのようにすれば旨く動作するかご教授願います。私はVBは全く解りませんので、『記録されたマクロの何処の部分に、この命令文を追加しなさい!』等、補足説明入りでご教授いただければ助かります。

  • 空白セルのメッセージボックスでの知らせるマクロ

    はじめまして。下記のExcelについて教えてください。 セルA1からA10の間にデータが入力されているセル、入力されていないセルが混在している場合、データが入力されていないセルをメッセージボックスで知らせるマクロの作成の仕方を教えてください。 空白セルが2つある場合はメッセージボックスは2回表示されます。 ずっと考えていても、分からなくて。。。どうか教えてください。

  • 一つのリストを選択すると隣のセルに自動に入力される機能

    Excelで、次のことを行うにはどうしたら良いでしょうか。 シート セルA1 → a   セルB1 → 100 セルA2 → b   セルB2 → 200   セルA3 → c    セルB3 → 300 セルC1に「入力規則」の「リスト」機能を使用して、bを選択すると、自動的にセルD1に200が入力されるようにするには、どうしたら良いでしょうか。

  • セルの結合マクロについて

    セルの結合マクロについてご相談させてください。 セルのA2とA3を結合,B2とB3を結合。 セルのA4とA5を結合,B4とB5を結合。 セルのA6とA7を結合,B6とB7を結合。 というように、A2,A4,A6・・・、B2,B4,B6・・・にデータがあれば、結合するマクロを作成したいです(データがなければそこまでのデータを結合)。 例えば、A2とA3両方にデータがあった場合、A2の内容で表示されるようにしたいです(B2とB3についても同様)。 複雑でどのようにマクロを書けばよいのか困っていました。 恐れ入ります、どのようにすれば良いのかわかる方がいましたら教えていただけないでしょうか。

  • 検索結果をセルに表示させるマクロ

    こんにちは。 エクセルのマクロ初心者です。 シート1に作ったあるリストから、シート2のあるセルにキーワードを入力すると、隣のセルに検索結果を表示させるマクロと作りたいのですが…。 エクセルの検索機能を使って、キーワードを入力し、次を検索をクリックすると、シート1のリストの中の部分的に合致するセルをカーソルは選択しますよね? その選択したセル内容をシート2のセルに表示させる方法がわかりません…。 アドバイスいただけないでしょうか。

  • エクセルのマクロで特定セル(最終セルの1つ下)への移動方法を教えて下さい

    エクセルでデータの最終セルのもう1つ下のセルに移動する マクロを作れますか?  例えば、住所録をリストで作成していたとします。 マクロを実行したら、新規レコードを入力するセル (*が入ってるセルです)にアクティブセルを移動する ・・・というマクロです。 コードの方法は教えてもらったのですが、コードがわからない方に 教えてあげたいのですが、マクロの記録でも同じことができますでしょうか?  よろしくお願いします!!

  • エクセルのマクロでセルを自動的にクリアにする方法

    (休日登録)  A20~25セルを”休日”と定義  A20に9/3と入っているとします。 (シート)     A   B    C 1  日付  曜日  合計時間   2   9/1 (金)   8:30  3 9/2 (土)   8:00 ←この日が休日だとすると・・・ 4   9/3  休 ←自動で休みと入るようにしてあります。   このようなシート入力があるとして 休日を9/3と登録し、入力規則のユーザー設定で =COUNTIF(休日,A4)=0と入力し休日を判定して 休日のC4セルには入力不可に設定してあります。 ところが、9/2も休日だとあとで分かり、9/2もA21のセルに休日として追加したとします。 しかし、9/2のC3セルにはあらかじめ数字が入っているため、休日に変更しても 数字は残ってしまいます。 これをマクロの機能を使って、曜日欄が休日となったら 自動的にC3セルを自動クリアにするというような事は出来ませんか? それかマクロを使わなくても可能であれば宜しくお願いします。

  • セルの数字をマクロに

    os xp excel 03 Sub a() Range(" k7").Select    '----- カーソルをcell位置へ c = 8338     '<----- セルm7に入力した数字を表示したい With ActiveSheet     '----- 次の行で cell m6 に作成----- =RSS|'8338.T'!現在値 .Cells(6, 13).Formula = "=RSS|'" & Format$(c, "0000") & ".T'! 現在値 " End With Range(" k9").Select     '-----カーソルをcell位置へ End Sub 質問は  c = 8338     '<----- セルm7に入力した数字を表示したい (1) 都度マクロを開けて c = の処に数字を入力ではなくセルm7に入力した数字を表示したい

  • セルにデータが入ったらマクロを自動的に実行

    セルA1にデータが格納されたら自動的にメッセージボックスで表示するというマクロを作りたいんですが、データは定期的に入ってくるわけではないのでセルA1を常時監視させたいのです。 Worksheet_Changeイベント使用でセルA1に手打ちで入力すればできるのですが、入ってくるデータは手打ちでは無いのでマクロが動いてくれません。何は方法はありませんでしょうか?よろしくお願いします。

  • エクセルのあるセルに■表示が出たら、違うシートに移動することがしたい

    私はマクロは全然分からないのでマクロを使わないで 出来るやり方を教えて欲しい 内容は、セルに入力規則のリストで■と□が選択出来るようにしました。 □から■を選択しセル内の表示が■に変わった時点で、ある該当シートに移動したいのですが、そんなこと出来るでしょうか教えて欲しい

専門家に質問してみよう