- ベストアンサー
エクセルのセル移動
調べても分からなかったのでお願いします。 A列でリストを作成して「1」「2」「3」を選ばせるようにしたのですが 「1」を選んだ時にはH列までセルを移動させて「2」を選んだ時には O列までセルを移動させて「3」を選んだ時にはZ列までセルを移動させるようにしたいのですが これって Excel でできますか? 一応 2003です。 宜しくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
対象シートのWorksheet_Changeイベントに登録すれば可能だと思います。 ただし、複数セルで一度に値が変更された場合、一番最後のセルの移動が有効になります。 例:A1が1、A2が3に一度に変更された場合、Z2が選択される。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rOne As Range For Each rOne In Target '複数セルが変更された場合を考慮 If rOne.Cells.Column = 1 Then '1列目のみ処理 Select Case (rOne.Value) Case 1 Range("H" & rOne.Row).Select Case 2 Range("O" & rOne.Row).Select Case 3 Range("Z" & rOne.Row).Select Case Else '1,2,3以外のときの処理が必要ならここに End Select End If Next rOne End Sub
その他の回答 (3)
- mt2008
- ベストアンサー率52% (885/1701)
No.2です。 あのマクロはセルの値が変更された後の処理ですので、2行目以降で3が選択できないのは別な要因です。 何か入力規制をかけていませんか?
お礼
再登場 誠にありがとう御座います。 どうやら お察しの通り、リストの選択範囲に問題があったようです。 お騒がせして すみませんでした。。。 ご教示いただいたマクロで完璧に実施出来ました。 ありがとう御座いました!!
- imogasi
- ベストアンサー率27% (4737/17069)
似たようなことで、考えてみた。 ーー セルに名前をつけます。 H1,O1,z1にセルH1,セルO1、セルZ1とでも名前をつけます。 準備として、z1の場合はz1セルを選択しておいて、名前ボックスにZ1と入れます。O1,H1の場合も同じ。 名前ボックスもドロップダウンなので、セルZ1をクリックすると、z1セルに飛びます。 ーー こういうのは本来VBAのイベントという考えを勉強しないと、出来ない。VBAの中級の課題です。 これでやるなら Sheet1のシートタブで右クリック 「コードの表示」をクリック 出てきた画面に下記を貼り付け。 下記のように短く中身3行できる。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address <> "$A$1" Then Exit Sub X = Array("", "H1", "O1", "Z1") Range(X(Target)).Select End Sub シートのA1で1,2,3 を選択すると所定セルに飛ぶ。 上記コードは、それなりに経験が詰まっているので、コードを少なくする技法、イベントという考えを含め、初心者にはすぐ思いつくのは無理だ。
お礼
すみません。。。 「お礼」の欄に記入してるつもりで「補足」の欄に記入していました。。 ご回答ありがとう御座います。 そうなんですか。。。。 中級レベルですね。。どうりで僕には解決の方法が分からないはずだ。。。 ちょっとドキドキしながらVBAの方をイジってみましたが、初心者のため案の定上手く行きませんでした。 ちょっと疑問に思ったのですが セルに名前を付けたのは どの辺で反映されているのでしょうか。 >X = Array("", "H1", "O1", "Z1") ここの部分を「セルの名前」に変更しないといけないのでしょうか? その場合「全角のカタカナ」でもOKですか? お忙しい中 大変申し訳ありませんが 何卒宜しくお願い致します。
補足
ご回答ありがとう御座います。 そうなんですか。。。。 中級レベルですね。。どうりで僕には解決の方法が分からないはずだ。。。 ちょっとドキドキしながらVBAの方をイジってみましたが、初心者のため案の定上手く行きませんでした。 ちょっと疑問に思ったのですが セルに名前を付けたのは どの辺で反映されているのでしょうか。 >X = Array("", "H1", "O1", "Z1") ここの部分を「セルの名前」に変更しないといけないのでしょうか? その場合「全角のカタカナ」でもOKですか? お忙しい中 大変申し訳ありませんが 何卒宜しくお願い致します。
- marbin
- ベストアンサー率27% (636/2290)
隣のセルを使ってハイパーリンクを貼る方法です。 =IF(A1="","",HYPERLINK("#Sheet1!"&IF(A1=1,"H",IF(A1=2,"O","Z"))&1))
お礼
ご回答ありがとう御座います。 関数にもハイパーリンクってあるんですね。 でも この数式をコピペしても >#Sheet1!&1 というような文字列が出て来るだけで希望するセルにカーソルは飛んでくれませんでした。 何か解決方法をご存知でしたら再度ご回答をお願い致します。
お礼
ご回答ありがとう御座います!! ものの見事にカーソルが飛んでくれました!! ありがとう御座います!! ただ、1行目は上手く行ったのですが 2行目以降は反応してくれません。。。 >If rOne.Cells.Column = 1 Then '1列目のみ処理 >'1,2,3以外のときの処理が必要ならここに >End If この3行を消してしまったからでしょうか? 全くの初心者で申し訳ありません。 3000行全部に挿入したいのですが 常に一番したの「123のいずれか」が反映されればOKなんですけど、再度 ご教授いただけないでしょうか。 お忙しい中 大変 恐縮では御座いますが 何卒 宜しくお願い致します。
補足
度々すみません。 2行目以降も「1」と「2」は反応してくれてました。 でも「3」が選べない状態です。 リストでは123の全部表示されますが 3を選んでも2までしか表示されずに2の所にカーソルが移動して3を選んで3のセルには移動しない状況です。 ご教授の程 宜しくお願い致します。 ちなみに下記は自分で勝手に修正したコードです。 Private Sub Worksheet_Change(ByVal Target As Range) Dim rOne As Range For Each rOne In Target Select Case (rOne.Value) Case 1 Range("Q" & rOne.Row).Select Case 2 Range("Y" & rOne.Row).Select Case 3 Range("AA" & rOne.Row).Select Case Else End Select Next rOne End Sub 度々すみませんが何卒宜しくお願い致します。