[[20160323041330]] 『二つの連動する表のコピーの方法』(manami) ページの最後に飛ぶ

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

 

『二つの連動する表のコピーの方法』(manami)

A商品

  A B C D E
a 3 0 0 0 0
b 0 0 2 0 0
c 0 1 0 0 0
d 2 0 0 0 0
e 0 0 0 0 2

上記の様な表1があり,

A商品の a-A 3
    a-B 0
    a-C 0

         .
         .
    b-A 0
    b-B 0       
    b-C 2
     .
     .

別に、このような表2があります。
表2の3の部分のセルは、表1のa-Aに対応するように=でセル指定しています。
表1の数字を入れ替えた時に表2の数字も変わるように作りたいのですが、表2の数字部分のセルに=で表1の該当部分のセル指定していくと膨大な回数しなくてないけません。
表1のa行を、表2の数字列に対応する所までは手で入力しましたが、表2のb、c、d、e、と続きを表1のb,c,d,eに対応するようにコピーする方法はないでしょうか?
わかりづらい説明で申し訳ありませんが、宜しくお願いします。

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


 交通整理だけ。

 レイアウトは以下でよろしいですか?
 それとも、A商品 といったセルがどこかにあるのですか?

 表1

    |[A]|[B]|[C]|[D]|[E]|[F]
 [1]|   |A  |B  |C  |D  |E  
 [2]|a  |  3|  0|  0|  0|  0
 [3]|b  |  0|  0|  2|  0|  0
 [4]|c  |  0|  1|  0|  0|  0
 [5]|d  |  2|  0|  0|  0|  0
 [6]|e  |  0|  0|  0|  0|  2

 表2 (以下のいずれか だとすると、後者がいいと思いますが)

    |[A]|[B]
 [1]|a-A|  3
 [2]|a-B|  0
 [3]|a-C|  0
 [4]|a-D|  0
 [5]|a-E|  0
 [6]|b-A|  0
 [7]|b-B|  0
 [8]|b-C|  2

    |[A]|[B]|[C]
 [1]|a  |A  |  3
 [2]|a  |B  |  0
 [3]|a  |C  |  0
 [4]|a  |D  |  0
 [5]|a  |E  |  0
 [6]|b  |A  |  0
 [7]|b  |B  |  0
 [8]|b  |C  |  2

 あと、 a は この行、C はこの列という決めつけありですか?
 それとも、表1 を検索して、行がどこか列がどこかを取得する必要有り?

(β) 2016/03/23(水) 07:14


おはようございます。
表2を仮にH列、I列に作るとして

H1=IFERROR(INDEX(($A$2:$A$6&"-"&$B$1:$F$1),MOD(ROW(A1)-1,COUNTA($A:$A))+1,INT((ROW(A1)-1)/COUNTA($A:$A))+1),"")

I列は2つの内どっちでも良いです。
I1=IFERROR(INDEX($B$2:$F$6,MOD(ROW(C1)-1,COUNTA($A:$A))+1,INT((ROW(C1)-1)/COUNTA($A:$A))+1),"")

I1=IFERROR(INDEX($A$1:$F$6,MATCH(LEFT(H1,1),$A:$A,0),MATCH(RIGHT(H1,1),$1:$1,0)),"")

H1とI1を選択して、下にフィルコピー
(sy) 2016/03/23(水) 07:31


すいません。
表示順番逆でした。

H1=IFERROR(INDEX(($A$2:$A$6&"-"&$B$1:$F$1),INT((ROW(A1)-1)/COUNTA($A:$A))+1,MOD((ROW(A1)-1),COUNTA($A:$A))+1),"")

I1=IFERROR(INDEX($B$2:$F$6,INT((ROW(C1)-1)/COUNTA($A:$A))+1,MOD((ROW(C1)-1),COUNTA($A:$A))+1),"")
もしくは
I1=IFERROR(INDEX($A$1:$F$6,MATCH(LEFT(H1,1),$A:$A,0),MATCH(RIGHT(H1,1),$1:$1,0)),"")

でした。
(sy) 2016/03/23(水) 07:37


Sub main()
    Dim rg1 As Range, rg2 As Range, c As Range
    Set rg1 = Sheets("Sheet1").Range("A1") '表1
    Set rg2 = Sheets("Sheet2").Range("A1") '表2
        For Each c In rg1.CurrentRegion.Cells
            If c.Row <> 1 And c.Column <> 1 Then
            rg2.Value = c.Offset(, 1 - c.Column) & "-" & c.Offset(1 - c.Row)
            rg2.Offset(, 1).Value = c.Value
            Set rg2 = rg2.Offset(1)
            End If
        Next c
End Sub
(mm) 2016/03/23(水) 11:33

SYさん
回答有難うございます。私には少し難しいですが、勉強しながらトライさせていただきます。
(manami) 2016/03/23(水) 11:42

βさん
回答有難うございます。
レイアウトはその通りです。表2も後者の方です。
正確には他の表の都合上、
表1
    |[O|[P]|[Q]|[R]|[S]|[T]
 [4]|   |A  |B  |C  |D  |E  
 [5]|a  |  3|  0|  0|  0|  0
 [6]|b  |  0|  0|  2|  0|  0
 [7]|c  |  0|  1|  0|  0|  0
 [8]|d  |  2|  0|  0|  0|  0
 [9]|e  |  0|  0|  0|  0|  2

表2

    |[B]|[C]|[J]
 [48]|a  |A  |  3
 [49||a  |B  |  0
 [50]|a  |C  |  0
 [51]|a  |D  |  0
 [52]|a  |E  |  0
 [53]|b  |A  |  0
 [54]|b  |B  |  0
 [55]|b  |C  |  2

のようになっており、表1のP5xE9に数字を入力すると、表2のJ列の対応する部分に同じ数字が反映するように作成希望です。
現在抱えている問題は、J48=P5, J49=Q5,J50=R5という風に手打ちしたのですが、残りをフィルコピーできない事です。
表2 B列がa,b,cと変わる毎に、表1ではP5,P6,P7と行が増えていくだけなのですが、単純なフィルコピーでは期待通りのコピーができません。良い方法があれば教えて頂けますか?
(manami) 2016/03/23(水) 12:24


フィルコピーのような方法で簡単に表示させるのは難しいと思います。
(出来るのかも知れませんが私は分かりません。)

VLOOKUPとCODEの方がINDEXとMATCHより簡単かも?

J48=VLOOKUP(J48,$O$5:$T$9,CODE(K48)-63,0)
下にフィルコピー

で求められます。

CODE関数は文字コードを返す関数です。
Aなら65を返すので-63すれば2になるので、
VLOOKUP(J48,$O$5:$T$9,2,0)
と同じ意味になります。
Bならば66を返すので-63すれば3になり、
VLOOKUP(J49,$O$5:$T$9,3,0)
と同じ意味になります。

VLOOKUPは分かりますか?

(sy) 2016/03/23(水) 22:55


コメント返信:

[ 一覧(最新更新順) ]


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