• ベストアンサー

エクセルでsheet2のデータ更新容易化のための処理

エクセルで次のことがしたいのですが、 (前提)sheet1のセルc6~C15のタテに“c6”~“c15”という名前が入っています。 またsheet2のセルB4~K4に、今度は横に“c6”~“c15”という名前が入っています。 Sheet1にコマンドボタンAを設けます。 (動作) (1)sheet1のコマンドボタンAが押されたら、そのときカーソルがc6~C15のどこかにあったとして 仮にc14のところにあった場合,sheet2のJ列のJ4セル――“c14”の表示されているセルにジャンプし (2)かつJ列から左右の領域(B列~I列)は非表示にしてA列とその列のみシートの左側に表示する。 (3)またsheet2のA1セル近辺にコマンドボタンBがあって、sheet2のデータを全表示にする。 つまりsheet2のA列は常に表示です。 (設問の意味) ある店(“c6”~“c15”という名前)に登録されている人についての変更履歴を、操作しやすく変更入力管理を容易くするため。sheet2のセルB4~K4の下にその登録されている人のデータがあるという意味です。 (お願い) (1),(2),(3)のどこでもいいのでマクロ等で実現することについてお知恵拝借します。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

以下のVBAをモジュールへ追加して sheet1のコマンドボタンAにSheet1マクロ sheet2のコマンドボタンBにSheet2マクロ を登録して下さい。 Sub Sheet1マクロ() Dim objSh1 As Worksheet Dim strSh1 As String Dim objSh2 As Worksheet Dim objRg2 As Range Set objSh1 = Worksheets("Sheet1") Set objSh2 = Worksheets("Sheet2") objSh1.Select strSh1 = Selection For Each objRg2 In Worksheets("Sheet2").Range("B4:K4") If strSh1 <> objRg2.Text Then objSh2.Select objRg2.EntireColumn.Hidden = True End If Next End Sub Sub Sheet2マクロ() Range("B4:K4").Select Selection.EntireColumn.Hidden = False Range("A4").Select Worksheets("Sheet1").Select End Sub こんな感じてどうでしょうか。 (複数のセル選択は出来ません。)

taktta
質問者

お礼

表現が簡潔でとても気に入りました。おかげで解決して、とてもうれしいです。どうもありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • pauNed
  • ベストアンサー率74% (129/173)
回答No.4

こんにちは。セル位置が固定なら、文字列で判断ではなく、単純に列指定できそうですね。 それに、 >左右の領域(B列~I列)は非表示にしてA列とその列のみシートの左側に表示 …『左右』という事は、もしかして~IV列という事でしょうか? '--------------------------------------------------------------------- Sub ボタンA用()   Dim n As Long   If Intersect(ActiveCell, Range("c6:c15")) Is Nothing Then Exit Sub   n = ActiveCell.Row - 4   With Sheets("sheet2")     Application.Goto .Cells(4, n)     .Columns("B:IV").Hidden = True     .Columns(n).Hidden = False   End With End Sub '--------------------------------------------------------------------- Sub ボタンB用()   Columns("B:IV").Hidden = False End Sub '---------------------------------------------------------------------

taktta
質問者

お礼

これからじっくりと理解するつもりですがとりあえずお礼します。 どうもありがとうございます。

すると、全ての回答が全文表示されます。
  • taocat
  • ベストアンサー率61% (191/310)
回答No.3

こんばんは。   コマンドボタンはコントロールツールボックスのCommandButtonを配置 (Sheet1のCommandButtonclickイベント) -------------------------------------------- Private Sub CommandButton1_Click()  Dim myCell As Range  Set myCell = Sheets("Sheet2").Range("B4:K4").Find(what:=ActiveCell)  If Not myCell Is Nothing Then    With Sheets("Sheet2")      .Select      .Range(.Range("B4"), myCell.Offset(, -1)).EntireColumn.Hidden = True    End With  Else    MsgBox ActiveCell.Value & " はSheet2にありません"  End If End Sub ---------------------------------------------- (Sheet2のCommandButtonClickイベント) ----------------------------------------------- Private Sub CommandButton1_Click()   Cells.EntireColumn.Hidden = False End Sub ---------------------------------------------- 以上です。  

taktta
質問者

お礼

NO2の人のを利用したらうまくいきました。taocatさんご回答どうもありがとうございました。

すると、全ての回答が全文表示されます。
  • miyuyu
  • ベストアンサー率61% (30/49)
回答No.1

マクロでしたいことを記録して、不足している部分を後から補うと楽です。 (3)に関しては下記を応用という事で Sub Macro1() Dim strVal As String Dim ActCol As Integer Dim i As Integer strVal = ActiveCell.Value Sheets("Sheet2").Select Rows("4:4").Select Rows.Find(strVal).Activate ActCol = ActiveCell.Column For i = 2 To 11 If i <> ActCol Then Columns(i).EntireColumn.Hidden = True Next i Cells(4, ActCol).Select End Sub

taktta
質問者

お礼

(3)はこれで解決しそうです。どうもありがとうございました

すると、全ての回答が全文表示されます。