[[20160525121104]] 『特定の文字を入力したら、特定の文字を表示させた』(エクセル超初心者) ページの最後に飛ぶ

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

 

『特定の文字を入力したら、特定の文字を表示させたい』(エクセル超初心者)

いつも過去ログなど拝見させていただいてお世話になっております。
検索して、自分がやりたいことと中々一致しなかったので、質問させてください。

Seet2に【図1】のようなベースのデータがA1〜D31まであり、
Seet1にある【図2】のような表のG列に、【図1】のA列の●●社と入力したら
【図1】のB2〜D3が【図2】のC列からE列に表示されるようにしたいです。
それと同じで、▲▲社、■■社、◆◆社・・・と、特定の文字を入力したら【図2】に反映されるようにしたいです。
VROOKUPとIFの関数を合わせてかなとおもったのですが、上手くいきません。
どうかご教授お願い致します。

やりたいことが上手く伝わってなかったらごめんなさい。

【図1】

    A        B        C        D
1  備考     区間       路線  交通費
2 ●●社  AA−BB   〇線     \140
3            BB−AA   〇線   \140
4  ▲▲社  AA−CC   〇線     \140
5            CC−DD   △線     \165
6            DD−FF   □線   \140
7            FF−GG     ◇線     \174
8            GG−FF   ◇線   \174
9            FF−DD   □線   \140
10           DD−CC   △線     \165
11           CC−AA   〇線     \140
12 ■■社  AA−BB   〇線     \140
13      BB−DD   △線     \174
14           DD−BB   〇線     \140
15           BB−AA   〇線     \140 
16 ◆◆社    AA−CC   □線     \174
17           CC−FF   〇線     \140
18           FF−AA   〇線     \195
     ・
   ・
   ・

【図2】

   A      B     C    D     E      F       G      H
1
2  2016年度
3     日付  区間  路線 交通費 その他 備考  領収書
4                                        ●●社
5                                        
6                    ◆◆社
7
      ・
   ・
   ・                    

< 使用 Excel:Excel2010、使用 OS:Windows8 >


まず、Sheet2が1で、Sheet1が2、という前提条件は勘違いしやすいだけなので、やめましょう。

次に、備考部分を別シートに転記するならば、キーとなる条件が必要です。
おそらく、図2でも区間と路線は入力されていて、備考だけ自動的に埋めたいということでしょうか?

そして、図1の表ですが、備考欄は上と同じ文字であっても、全部きっちり埋めておいてください。
空欄を許すと、もっと複雑で面倒な処理にしないといけませんので。

問題点ですが、区間と路線は入力されてるものとして、例えば「AA−BB」「〇線」に該当するものは2つあり、交通費部分も同じなので、特定できません。
こういう場合は、先に見つけた方で構わないならば、以下のような式になります。

=INDEX(Sheet2!$A:$A,MATCH(C4&D4,INDEX(Sheet2!$B:$B&Sheet2!$C:$C,0),0))
(???) 2016/05/25(水) 13:07


 >Seet1にある【図2】のような表のG列に、【図1】のA列の●●社と入力したら 
 >【図1】のB2〜D3が【図2】のC列からE列に表示されるようにしたいです。 
           ~~~~~~
 これからすると該当する会社の項目をすべて表示させたいようだが。

(ねむねむ) 2016/05/25(水) 13:13


うーん、前提条件がよく判りませんねぇ。入力するのは図1のA列らしいし、自動表示するのは図2のC:E列らしいし。
まぁ、回答待ちということで。
(???) 2016/05/25(水) 13:23

Sheet1のC4=IF(COUNTA(INDIRECT("Sheet2!A2:A" & MATCH($G$4,Sheet2!$A:$A,0)+ROW()-4))=1,INDEX(Sheet2!B:B,MATCH($G$4,Sheet2!$A:$A,0)+ROW()-4),"")
として、右列(E列迄)と下行にコピー
Sheet1のG4 = "●●社"
(mm) 2016/05/25(水) 13:37

(???)様>Sheet2が1で、Sheet1が2、という前提条件は勘違いしやすいだけなので、やめましょう
ご指摘ありがとうございます。以後、気を付けます。

(ねむねむ)様の言う通り、備考部分の該当する会社の項目を、会社の名前を入力したら、
その会社の区間、路線、交通費を【図2】のC〜Eに表示させたいのです。
【図2】は毎月空欄から入力するものです。
【図1】は、会社ごとの区間、路線、交通費のベースです。

(エクセル超初心者) 2016/05/25(水) 13:38


(mm)様
試してみましたが、●●社とG列に入力して反映出来ましたが・・・
やりたいことは、各会社ごとで、ベースを元に表示させたいのです・・・
本当に説明下手ですみません・・・
(エクセル超初心者) 2016/05/25(水) 13:48

図1には入力しないということですね。図1のA列を埋める件はOKでしょうか?

図2の、例えばG4セルに「●●社」と入力すると、2行分の区間、路線、交通費を転記する、と。
図2のG6セルにある「◆◆社」というのはどういう事でしょう? 「●●社」を入力すると2行分転記されるから、引き続き6行目に「◆◆社」を入力(3行分追加転記)、ということ?

ほとんど全ての行を転記するくらいならば、図1のどこかに削除フラグ列でも用意して、オートフィルタで削除していない一覧に絞ってからコピペするだけの方が、入力が簡単な気がするのですが?
(???) 2016/05/25(水) 13:56


全線分の転記をして、それをどう利用するのか判りませんが、とりあえず、Sheet1のマクロ例なぞ。
図1のA列は埋まっている前提です。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wkB As Worksheet
    Dim i As Long
    Dim iR As Long
    Dim iMax As Long

    If Intersect(Target, Range("G:G")) Is Nothing Then Exit Sub
    If Target.Count <> 1 Then Exit Sub
    If Target.Row < 4 Then Exit Sub

    Set wkB = Sheets("Sheet2")
    iMax = wkB.Cells(wkB.Rows.Count, "B").End(xlUp).Row

    If Target.Value <> "" Then
        Application.EnableEvents = False

        iR = Target.Row
        For i = 2 To iMax
            If wkB.Cells(i, "A").Value = Target.Value Then
                Cells(iR, "G").Value = wkB.Cells(i, "A").Value
                wkB.Range(wkB.Cells(i, "B"), wkB.Cells(i, "D")).Copy Cells(iR, "C")
                iR = iR + 1
            End If
        Next i

        Application.EnableEvents = True
    End If
 End Sub
(???) 2016/05/25(水) 14:37

(???)様
図1のA列を埋める件はOKでしょうか?

図1のA列は会社名なので埋まらないです。

図2の、例えばG4セルに「●●社」と入力すると、2行分の区間、路線、交通費を転記する、と。 図2のG6セルにある「◆◆社」というのはどういう事でしょう?

図2のG列は、会社名のどれかを入力した際に、
●●社は2行分、▲▲社は8行分、■■社は4行分、◆◆社は3行分・・・
と、図1のB〜D列が図2のC〜E列に表示される感じです。

本当の図1のベースは下記で、7社分あります。

【図1】

    A        B        C        D
1  備考     区間       路線  交通費
2 ●●社  AA−BB   〇線     \140
3            BB−AA   〇線   \140
4  ▲▲社  AA−CC   〇線     \140
5            CC−DD   □線     \165
6            DD−FF   □線   \165
7            FF−DD     〇線     \140
8            DD−CC   □線   \140
9            CC−AA   〇線   \140
10 ■■社    AA−BB   〇線     \140
11           BB−CC   ◇線     \165
12         CC−DD   〇線     \140
13      DD−CC   〇線     \140
14           CC−BB   ◇線     \165
15           BB−AA   〇線     \140 
16 ◆◆社    AA−CC   △線     \174
17           CC−AA   △線     \174
18 ▼▼社    AA−FF   〇線     \195
19      FF−GG   ▽線   \165
20           GG−FF     ▽線   \165
21           FF−AA     〇線     \195
22 〇〇社  AA−DD   〇線    \174
23          DD−AA   〇線     \174
24 △△社  AA−CC   〇線     \165
25          BB−CC   ◇線     \140
26         CC−DD   〇線     \140
27      DD−EE   □線     \165
28           EE−DD   □線     \165
29           DD−CC   〇線     \140 
30      CC−BB   ◇線     \140
31           BB−AA     〇線   \140

これがベースのデータです。
この7社(A列尾行欄の特定の文字)のどれかを図2のG列に入力したら、
図1のB〜Cの列が図2のC〜F列に、その会社の分が出るようにしたいのです。

(エクセル超初心者) 2016/05/25(水) 16:32


 > 図1のA列は会社名なので埋まらないです。
埋まらない、ではなく、埋めてください、と言ってます。
A列に空欄があるのは、データベースとして考えると変なのですよ。
例えば、運賃順にソートすると、空欄がごっちゃになって、破綻しますよね?

かたくなに元データを変えたくないようなので、ロジックの方を少し複雑にして対応した例を書きます。
空欄ありだと、数式での対応は難しいと思いますから。

前回同様、Sheet1のシートモジュールとして貼ってください。

 Private Sub Worksheet_Change(ByVal Target As Range)
    Dim wkB As Worksheet
    Dim i As Long
    Dim j As Long
    Dim iR As Long
    Dim iMax As Long

    If Intersect(Target, Range("G:G")) Is Nothing Then Exit Sub
    If Target.Count <> 1 Then Exit Sub
    If Target.Row < 4 Then Exit Sub

    Set wkB = Sheets("Sheet2")
    iMax = wkB.Cells(wkB.Rows.Count, "B").End(xlUp).Row

    If Target.Value <> "" Then
        Application.EnableEvents = False

        iR = Target.Row
        For i = 2 To iMax
            If wkB.Cells(i, "A").Value = Target.Value Then
                For j = i To iMax
                    If wkB.Cells(j, "A").Value = Target.Value Or wkB.Cells(j, "A").Value = "" Then
                        Cells(iR, "G").Value = wkB.Cells(j, "A").Value
                        wkB.Range(wkB.Cells(j, "B"), wkB.Cells(j, "D")).Copy Cells(iR, "C")
                        iR = iR + 1
                    Else
                        Exit For
                    End If
                Next j
            End If
        Next i

        Application.EnableEvents = True
    End If
 End Sub
(???) 2016/05/25(水) 17:33

(???)様
私の会社ごとの表の作り方が良くなかったのでしょうか??・・・すみません。

ですが、上げて頂いたコードでできました!!!
が、■■社だけ表記されません・・・
どうしたらよろしいでしょうか?

今日はPCを動かせなくなるため、ご返信を頂いたら明日まで返信できません。
宜しくお願い致します。
(エクセル超初心者) 2016/05/25(水) 17:59


特定の会社名だけ反応しないようなロジックではないので、会社名がベースに書かれたものと一致していないのではないかと思います。空欄や、大文字小文字、全角半角の違いを確認してみてください。

対応案ですが、現状G列は手入力との事ですが、これを「データの入力規則」を使って、選択式にしてはどうでしょうか?
(???) 2016/05/26(木) 10:50


その通りでした!!!!先程確認してたら、Seet1の■■社の文字入力が間違っていました!
申し訳ございませんでした。
ドロップダウンリストにしていたので、修正して、今やりたいことが完璧に出来ました。
本当に有難うございました!!!!
(エクセル超初心者) 2016/05/26(木) 10:54

コメント返信:

[ 一覧(最新更新順) ]


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