アプリ版:「スタンプのみでお礼する」機能のリリースについて

普通、セルA1に入力して確定すると、B2がアクティブになりますが
A1に『A』と入力すると、セルD5がアクティブになる
A1に『B』と入力すると、セルE5がアクティブになる
このような設定って、できますか?教えてください。

A 回答 (8件)

こんにちは。



ExcelのVBAを使います。新規ブックで試して下さい。
シート名のタブを右クリックして「コードの表示」
出てきた画面に貼り付けます。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim r As Range
 For Each r In Target
 If r.Address = "$A$1" Then
   Select Case r.Value
   Case "A"
   r.Offset(4, 3).Select
   Case "B"
   r.Offset(4, 4).Select
   End Select
   Exit For
 End If
Next r
End Sub
    • good
    • 0
この回答へのお礼

ありがとうございました。
色々と試していたので、すっかり、お礼のお返事が遅くなってしまい
申し訳ありません。
思い通りの動作に、思わず感動しました。
本当にありがとうございました。

お礼日時:2002/10/13 21:17

#5から#1さんへ


>「A」を入れてCtrlを押しながらEnterしたような場合
そんな入力方もあるんですね!
普段使わないので、頭にありませんでした。
ご指摘ありがとうございます。
そうすると、やはりFor Eachで回さないといけないみたいですね。
    • good
    • 0

#5から#1さんへ


>「A」を入れてCtrlを押しながらEnterしたような場合
そんな入力方もあるんですね!
普段使わないので、頭にありませんでした。
ご指摘ありがとうございます。
そうすると、やはりFor Eachで回さないといけないみたいですね。
    • good
    • 0

#1です。

#5さんへ

TargetはRangeなので複数のセル、複数エリアのセルが渡される事があります。

A1:F10 を選択し、ActiveCellに「A」を入れてCtrlを押しながらEnterしたような場合でも、A1を含んでいたら反応させるには、For Each で回すのが手っ取り早いと思ってます。
含んでいるかだけの判断なら Intersect で出来ますが、値の判定を伴うので、、、

仕様の問題なので、複数セル、複数エリアを選択しての操作をしないなら For Each は不要でしょうね。
    • good
    • 0

No.2~No.5の方の方法は、A1セルに"A"(又は"B")が入力されていると


どのセルで入力しても、D5(又はE5)に飛んでしまうと思います。
この方法は、"A"も"a"も飛ぶようになっています。

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Target.Address = "$A$1" Then
Select Case UCase(Target.Value)
Case "A"
Range("D5").Activate
Case "B"
Range("E5").Activate
End Select
End If
End Sub

Targetはchangeイベントが実行された時に選択されているセルが入っています。
ちょっと試したのですが、範囲を選択してから入力しても入力セルのアドレスしか
戻ってないようなので、No.1の方のようにFor Each ... Nextを使用しないでみました。
もし、問題があれば教えてください。
    • good
    • 0
この回答へのお礼

ありがとうございました。
Targetはchangeイベント・・・の文章
勉強不足の私には、意味がわからなくて
でも、そういう事がわかるようになりたい!って本気で思いました。
今までも、ちょっとだけ、VBAを勉強した事があるのですが
(本当にちょっとだけで・・・)
今回の事で、もっとがんばってみよう!って思いました。

お礼日時:2002/10/13 21:43

#2のものです。

申し訳ありません。題意を少し取り違えていました。2行ほど変更させてください。
Private Sub Worksheet_Change(ByVal Target As Range)
a = Array("", "a", "b", "c", "d")
b = Array("", "$F$1", "$D$2", "$G$3", "$C$4")
For i = 1 To UBound(a)
If Cells(1, 1).Value = a(i) Then
Worksheets("sheet1").Range(b(i)).Select
Exit Sub
End If
Next i
End Sub
Cells(1,1)をTargetにするのも場合によると意味があるかもしれません。
    • good
    • 0
この回答へのお礼

最初、No2の方法を試した時に
動作しなかったので、あれ?って思っていたのですが
上記の通りにやったら、動作しました。
ありがとうございました。

お礼日時:2002/10/13 21:33

操作による設定を目指しましたが思いつかずVBAにしました。


Private Sub Worksheet_Change(ByVal Target As Range)
a = Array("", "$A$1", "$A$2", "$A$3", "$A$4")
b = Array("", "$F$1", "$D$2", "$G$3", "$C$4")
For i = 1 To UBound(a)
If Target.Address = a(i) Then
Worksheets("sheet1").Range(b(i)).Select
Exit Sub
End If
Next i
End Sub
aとbのArrayは対になっています。セルアドレス$A$1-->$F$1の対応です。もっと増やせます。この例では同行に飛ぶようにしていますが、異行でも差支えありません。
もう一段ForNextを増やすと、$A$1-->$F$1-->$A$2のように連続でつながるように出来そうです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
今回の希望した動作とは、ちょっと違ったのですが
入力後にアクティブセルを移動する時に使えそうですよね。
自分でこんな風にBVAを組めるように、勉強してみようと思いました。

お礼日時:2002/10/13 21:30

はじめまして。


マクロを組めば、簡単にできると思います。サンプルマクロを組んでみましたので、参考にしてみて下さい。

Private Sub Worksheet_Change(ByVal Target As Range)

Select Case Range("A1").Value

case "A"
Range("D5").Select
case "B"
Range("E5").Select

End Select

End sub

1.新規ブックを開き、ALT+F11キーを押してVBE画面を開く
2.画面左上のVBAProject徒書いてある下のSheet1をダブルクリックし、右側の白い部分へ上のコードをコピー・ペーストする。
3.ALT+F11キーを押してエクセルの画面にもどり、シート1のA1に適当な値を入力する

あなた様のおやりになりたいことが実現していると思います。
もし、私でよろしければ、あなた様がおやりになりたいことを自動でできるマクロを一緒に作成してみたいと思っております。ご希望の節は、お知らせ下さい。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!