[[20220628092532]] 『どちらかのセルを入力すると指定セルに値が反映す』(NIJ) ページの最後に飛ぶ

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

 

『どちらかのセルを入力すると指定セルに値が反映するようにしたい』(NIJ)

A列に商品名、B列に商品番号、C列に単価
A列かB列のどちらかを入力するとC列に単価を反映するにはどうすればいいですか?
商品名、商品番号、単価のリストは作成済みです。

理想としてはA列を入力するとと商品番号、単価が出てくる、
B列を入力すると商品名、単価が出てくるようにしたいです。

< 使用 Excel:unknown、使用 OS:unknown >


リストの格納情報について詳しく。
リスト無いものを入力した場合は?
(ag) 2022/06/28(火) 09:35

A、B列はデータの入力規則でリストにあるものだけ入力できるようにし、
リストなしの場合は反映できないようにしたいです。
(NIJ) 2022/06/28(火) 09:38

>商品名、商品番号、単価のリストは作成済み

なんというシートのどの列に入っているのか教えてください。
(通りすがり) 2022/06/28(火) 10:04


リストシートの中にA列は商品名、B列は商品番号、C列は単価として入れています。
(NIJ) 2022/06/28(火) 10:12

VLOOKUP関数でいかがでしょうか、使い方は以下の通りです。

VLOOKUP("検索値","範囲",列番号)

今回のケースでは入力するシートを以下のようなイメージだとすると、
A       :B  :C
商品名(手入力):関数1:関数2

以下のように設定し、関数1,2の箇所にそれぞれ記載すると、
A列を入力すると自動的にB,Cに入力されると思います。

・"検索値"->商品名(手入力)セル
・"範囲"->リストシート全体
・"列番号"->関数1は2,関数2は3

(rn) 2022/06/28(火) 13:22


 要望はA←→Bの双方向なので関数では不可能かと思います。
 マクロでチェンジイベント組むしかないと思いますが、マクロ可なのでしょうか?
(.:*.ゆ ゅ) 2022/06/28(火) 13:46

 対象となるシートのシートモジュールに入れてみてください。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Datas, i As Long
    Application.EnableEvents = False
    With Sheets("リスト")
        Datas = .Range("A1", .Range("C" & .Rows.Count).End(xlUp)).Value
    End With
    With ActiveSheet
        For i = 1 To UBound(Datas)
            Select Case Target.Column
                Case 1
                    If Datas(i, 1) = Target.Value Then
                        .Range("B" & Target.Row).Value = Datas(i, 2)
                        .Range("C" & Target.Row).Value = Datas(i, 3)
                        Exit For
                    End If
                Case 2
                    If Datas(i, 2) = Target.Value Then
                        .Range("A" & Target.Row).Value = Datas(i, 1)
                        .Range("C" & Target.Row).Value = Datas(i, 3)
                        Exit For
                    End If

            End Select
        Next
    End With
    Application.EnableEvents = True
 End Sub
(通りすがり) 2022/06/28(火) 16:35

 シートモジュール

 Private Sub Worksheet_Change(ByVal Target As Range)
    Application.EnableEvents = False
    Dim rngList As Range
    Set rngList = Sheets("リスト").Cells(1, 1).CurrentRegion

    Dim rng As Range, c As Range, m As Long
    Set rng = Intersect(Target, Columns("A"))
    If Not rng Is Nothing Then
        For Each c In rng
            If c.Text = "" Then
                c.Offset(, 1).Resize(, 2).Value = ""
            Else
                m = 0
                On Error Resume Next
                m = WorksheetFunction.Match(c.Value, rngList.Columns("A"), 0)
                On Error GoTo 0
                If m = 0 Then
                    c.Offset(, 1).Resize(, 2).Value = ""
                Else
                    c.Resize(, 3).Value = rngList.Rows(m).Value
                End If
            End If
        Next
    End If
    Set rng = Intersect(Target, Columns("B"))
    If Not rng Is Nothing Then
        For Each c In rng
            If c.Text = "" Then
                c.Offset(, -1).Value = ""
                c.Offset(, 1).Value = ""
            Else
                m = 0
                On Error Resume Next
                m = WorksheetFunction.Match(c.Value, rngList.Columns("B"), 0)
                On Error GoTo 0
                If m = 0 Then
                    c.Offset(, -1).Value = ""
                    c.Offset(, 1).Value = ""
                Else
                    c.Offset(, -1).Resize(, 3).Value = rngList.Rows(m).Value
                End If
            End If
        Next
    End If
    Application.EnableEvents = True
 End Sub

(hatena) 2022/06/29(水) 00:49


コメント返信:

[ 一覧(最新更新順) ]


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