• ベストアンサー

セル値が指定行のセル値とマッチしたら先頭列へ移動

エクセルを開いたらA1セルの値が5だったら2行目のA1セル値とマッチしたG2 5の値の列が先頭列へ移動するようにしたいのですがVBAコードが解る方宜しくお願いします。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>エクセルを開いたらA1セルの値が5だったら2行目のA1セル値とマッチしたG2 5の値の列が先頭列へ移動するようにしたい という事は、「A1セルの値とマッチした値が入力されているセルが存在している列が先頭列になる様にする」という処理を行うのは、Excelbookを開いた時のみであり、Excelbookが既に開いた状態となっている時には、特定のシートを開いただけでは何も起こらない様にすると考えれば良いのでしょうか?  又、「A1セルの値とマッチした値が入力されているセルが存在している列が先頭列になる様にする」という処理を行うのはExcelbookを開いた時に最初に表示されるシートのみで、他のシートに対してはその様な処理を行わないと考えても宜しいのでしょうか?  もしそれで宜しければ以下のVBAを、"標準モジュールではなく"、ブックモジュールに記述されると良いと思います。  尚、「Microsoft Visual Basic」ウィンドウにおいて「プロジェクト - VBAProject」画面の中にある「Thisbook」と記されている箇所をダブルクリックしてから、「プロジェクト - VBAProject」画面の右隣のVBAの構文の記入欄の左上にある「(General)」と記されている欄をクリックし、現れた選択肢の中にある「Workbook」を選択する事で、VBAを記述するモジュールがブックモジュールに切り替わります。 【参考URL】  Excel VBA 入門講座 > 第4章 ワークブックの操作 / 5.ワークブックのイベントプロシージャ   http://excelvba.pc-users.net/fol4/4_5.html Private Sub Workbook_Open() 'QNo.8962735 セル値が指定行のセル値とマッチしたら先頭列へ移動 Dim myValue, myCell As Variant myValue = Range("A1").Value If myValue = "" Then Exit Sub Set myCell = Range("B2", Cells(2, Columns.Count)).Find(What:=myValue, _ LookIn:=xlValues, Lookat:=xlWhole, MatchByte:=False, MatchCase:=False) If myCell Is Nothing Then Exit Sub ActiveWindow.FreezePanes = False Columns("C").Select ActiveWindow.FreezePanes = True ActiveWindow.SmallScroll ToRight:=myCell.Column - Selection.Column End Sub

その他の回答 (2)

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

例データ Sheet1 A1 セルに 6 第2行目に(B列から) 1 3 6 5 4 6 コード ThisWorkbookのイベントの Workbook_Open()のイベントを選んで Private Sub Workbook_Open() x = Worksheets("Sheet1").Range("A1") MsgBox "A1 の値は" & x '-- For j = 1 To 25 If Cells(2, j) = x Then MsgBox j & "列にありました" y = Chr(64 + j - 1) MsgBox Chr(64 + j - 1) & "まで非表示にします" Columns("B:" & y).Hidden = True End End If Next j MsgBox "一致する列はありません" End Sub ーー このブックを開くと ADEFG列が見えて 6 6 5 4 6 列非表示でやりましたが、「折り畳み」でもできるかも。 WEBで検索 「エクセル 折り畳み 」で検索 http://hamachan.info/excel/group.htmlなど ーー For j = 1 To 25 の25はy = Chr(64 + j - 1)の関係で、AA,AB列以右になるとうまく行かないので、AAより右の列が ある場合は別途考えてください。”A:E”をColumns("1:5”).Hidden = TRUEのような表現に持ち込むと うまく行くでしょう。 エクセル2013でテスト。

kuma0220
質問者

お礼

有難うございます。

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.1

それなら、VBAとVBとは別物なのでExcelカテにした方が良いかと思います。 新しく質問する前に必ずこの質問を締め切るなどしてくださいね。

kuma0220
質問者

お礼

有難うございます。