[[20041025141709]] 『入力規制のリストの設定で1つ目のセルで...』(後藤) >>BOT

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『入力規制のリストの設定で1つ目のセルで...』(後藤)

[入力規制のリストの設定で1つ目のセルでリストから選んだら、自動で次のセルのリストを表示する方法を教えて下さい]


 Excelのバージョンは何ですか?
  (INA)


Excel2002です
  (後藤)


 横レス失礼します。
	 A	 B	 C
 1	5000		2000
 2			3000
 3			4000
 4			5000
 5			6000
 6			7000
 7			8000
 8			9000
 9			10000
 10			
 A2の入力規則=IF(A1="",(C1:C9),INDIRECT("C"&A1&":C9"))	 でしょうか。
 (川野鮎太郎)


 VBAのChangeイベントで  A1 のリストを選択したときに、B1のリストを表示する方法です。

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "A1" Then
        Range("B1").Select
        SendKeys "(%{DOWN})"
    End If
 End Sub

  (INA)


 ごめんなさい・・・。
 とんでもない勘違いのレスをしてたようです(TェT)
 (川野鮎太郎)


 (INA)さん、(川野鮎太郎)さんありがとうございます。
次から次にしたい場合はどのようにすればいいのですか?
VBAのChangeイベントはやった事がないので
できれば教えて下さい
 (後藤)


 私はこちらの後半のようなことかな、とおもったんですが・・・。
[[20040512192223]] 『入力規制のドロップダウンリスト』(じゃけ)
(みやほりん) 


 1.シートタブで右クリック→コードの表示
 2.開かれたコードウィンドウに、コードをコピペする。
 です。
  (INA)


 数式でやる場合の例です。
	 A	 B	 C
 1	5000		2000
 2	6000		3000
 3	7000		4000
 4	8000		5000
 5	9000		6000
 6	10000		7000
 7			8000
 8			9000
 9			10000

 A2=INDEX($C$1:$C$9,MATCH(A1,$C$1:$C$9,0)+1,1) 以下コピー
 A1のリストを選択するとそれ以降リストの値が下方に出るようにしてます。			
 (川野鮎太郎)


Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Address(0, 0) = "A1" Then
        Range("B1").Select
        SendKeys "(%{DOWN})"
    End If
 End Sub

これのやり方だとA1からB1でおわりですよね
そのままC1、D1、A2、B2、C2、D2、A3、B3・・・・・と
続けたいのですがお願いします


 条件を Target.Offset(0, -Target.Column + 1).Address = "$A$1"

 として 

 選択するセルを target.offset(0,1).select としてはどうでしょうか?

 (Null)


初心者なのでよくわかりません。

すみませんが、詳しく教えて頂けないでしょうか


[[20041025155753]]

 同時進行するのやめません? 

  (INA)

 すいません
 どっちですすめていけばいいですかぁ?

 (Null)


迷惑かけてすいません

僕も初めてで、よくわからないのでごちゃごちゃになってしまいました。

すみませんでしたm(__)m

こちらでお願いします


Private Sub Worksheet_Change(ByVal Target As Range)

    Select Case Target.Address(0, 0)
    Case "C1"
        Range("D1").Select

    Case "D1"
        Range("A2").Select

    Case "A2"
        Range("B2").Select

    End Select

    SendKeys "(%{DOWN})"
 End Sub

という風に地道に打っていくしかないのでしょうか?


いい方法を教えて下さい(後藤)


 if Target.Column > 4 then
    target.offset(0,Target.Column+1).select  'E列いこうはひとつしたの行のA列を選ぶ
 else
    target.offset(0,1).select 'そうでない場合は横にひとつづつづれていくぅぅ
 end if

 こんな方法もありますが・・・
 結構強引なんで(INA)さん の方法が確実だと思われます。

 (Null)

 VBAをよく分かっていないようだったので、分かりやすいサンプルを掲載しましたが
 「いい方法」ということであれば、Nullさんの書かれたように
 条件で判定するのがよいです。

 Private Sub Worksheet_Change(ByVal Target As Range)
   If Target.Count <> 1 Then Exit Sub
   If Target.Column >= 5 Then Exit Sub

    If Target.Column = 4 Then
       Cells(Target.Offset(1).Row, 1).Select
    Else
       Target.Offset(0, 1).Select
    End If

    SendKeys "(%{DOWN})"
 End Sub

  (INA)


Private Sub Worksheet_Change(ByVal Target As Range)

    Select Case Target.Address(0, 0)
    Case "C1"
        Range("D1").Select

    Case "D1"
        Range("A2").Select

    Case "A2"
        Range("B2").Select

    End Select

    SendKeys "(%{DOWN})"
 End Sub

という風に地道に打っていってるのですが
 数が多くて途中で

 コンパイルエラー:プロシャージが大きすぎます
 と、出てくるのですがいい方法はありますか?


 規則性があるならINAさん、NULLさんの方法で、
 ないならということで。
 (ramrun)

 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim n As Long
 Dim cl As Variant

 cl = Array( _
    "C1", "D1", "A2", "B2", _
    "G5", "H10", "E9", "F3", _
    "K4", "L7", "I6", "J8" _
    )

 For n = 0 To UBound(cl)
    If Target.Address(0, 0) = cl(n) Then
        If UBound(cl) = n Then
            Range(cl(0)).Select
        Else
            Range(cl(n + 1)).Select
        End If
        SendKeys "(%{DOWN})"
        Exit For
    End If
 Next n
 End Sub


 (ramrun)さんありがとうございます
 数を増やすとエラーになってしまうのですが
 どのように増やせばいいのですか?(後藤)


 cl = Array("C1", "D1", "A2", "B2", "G5", "H10", "E9", "F3", "K4", "L7", "I6", "J8")

 ↑を区切るのに _を使います。

 cl = Array("C1", "D1", "A2", "B2", _
            "G5", "H10", "E9", "F3", "K4", "L7", "I6", "J8")

 また区切るとこうなります。

 cl = Array("C1", "D1", "A2", "B2", _
            "G5", "H10", "E9", "F3", _
            "K4", "L7", "I6", "J8")

 あんまり _で区切りすぎると数が多いときはやはりエラーが出るので
 区切らない方がいいかも(汗)。
 (ramrun)

 (ramrun)さんたびたびすいません
 数がたくさんありますので入れてもエラーになってしまいます
 (後藤)


 みなさんおっしゃってますように、行と列に規則性があれば、For Nextでループさせたほうが良いような・・・。
 (川野鮎太郎)


 (川野鮎太郎)さんありがとうございます
 For Nextって何でしょうか?初心者的質問ですいません
 (後藤)


 具体的にどのセルに入れていくのか判りませんので、考え方だけ・・・。
 C1、D1,E1
 C2,D2、E2
 C3,D3、E3 と順番に入れるとすれば、
 C1を基準にNullさん、INAさんが書いておられるOFFSET関数との組み合わせで、
 オフセットさせる行と列を増やしていく方法です。

 ※数が多いとのことですが、列がどこからどこまで、行がどこからどこまでかを提示されれば、
 具体的な解決策が出やすいと思います。
 (川野鮎太郎)


(川野鮎太郎)さんありがとうございます
 D8〜AH8までいったらD9〜AH9という風に
 371までやりたいのですが
 ご指導宜しくお願いします


 鮎太郎さん、フォローありがとうございます。
 とりあえずシート2のA1から↓のように入力しておいて

    A     B
 1  C1
 2  D1
 3  A2
 4  B2
 5  G5
 6  H10
 7  E9
 8  F3
 9  K4
 10 L7
 11 I6
 12 J8

 シート1で↓のコード。

 Private Sub Worksheet_Change(ByVal Target As Range)
 Dim n As Long, ep As Long
 Dim cl As Variant

 ep = Sheet2.Range("A1").CurrentRegion.Count
 Set cl = Sheet2.Range("A1").CurrentRegion

 For n = 1 To ep
    If Target.Address(0, 0) = cl(n) Then
        If ep = n Then
            Range(cl(1)).Select
        Else
            Range(cl(n + 1)).Select
        End If
        SendKeys "(%{DOWN})"
        Exit For
    End If
 Next n
 End Sub

 (ramrun)でどうでっしゃろ。

 とあげたら衝突、規則性があるんですね(汗)。
 一応記念にあげときまっさ。


 INAさんのやつ。(ramrun)

 Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count <> 1 Then Exit Sub
    If Target.Column < 4 Then Exit Sub
    If Target.Column > 34 Then Exit Sub
    If Target.Row < 8 Then Exit Sub
    If Target.Row > 371 Then Exit Sub

    If Target.Column = 34 Then
        Cells(Target.Offset(1).Row, 4).Select
    Else
        Target.Offset(0, 1).Select
    End If

    SendKeys "(%{DOWN})"
 End Sub


 今はじめて気づきました(^_^A;
 これって次々にセルの入力規則を表示させるんですね( ̄ー ̄;A アセアセ・・・

 てっきり入力規則に設定してあるリストを最初のセルで選んだら、
 自動的に値が順番に入力されていくものかと思ってました(^_^A;
 それでFor Nextって提案してしまいました_/ ̄|○ il||li
 (川野鮎太郎)


 みなさんありがとうございました。
 僕の言葉がへたくそなのでみなさんにご迷惑をかけてしまいすみませんでした。
 皆さんのおかげでどうにかできました。
 (後藤)

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.