[[20180808002550]] 『A列の値が変わったら改行してコピー』(WSぽこ) ページの最後に飛ぶ

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

 

『A列の値が変わったら改行してコピー』(WSぽこ)

こんばんは。
ご質問させてください。

  A B … AA AB AC
1 1 A 
2 1 B
3 2 A
4 2 A
5 2 X
6 3 B

というA,B列から成るデータがあり、
A列の値が変わるまで、AA1からAB1、AC1へ横にB列の内容をコピーします。

  A B … AA AB AC
1 1 A    A   B
2 1 B
3 2 C
4 2 D
5 2 E
6 3 F

A列の値が前行と変わっていたら改行し、AA2からAB2,AC2にまたB列の内容をコピーします。これをA列がNullになるまで繰り返します。

  A B … AA AB AC
1 1 A    A   B
2 1 B    C   D   E 
3 2 C    F   
4 2 D
5 2 E
6 3 F

頭の中ではやりたいことは浮かぶのですが、コードに起こすとなると難しく…
ご教授いただけないでしょうか。
よろしくお願いいたします。m(_ _)m

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


作業列を使う方法になりますが、理解しやすい方法はこんな感じ

C列、D列を作業列として利用するとして
C1に
=COUNTIF(A$1:A1,A1)
を入力して下方向にフィル
D1に
=A1&"_"&C1
を入力して下方向にフィル

AA1に
=IFERROR(INDEX($A:$D,MATCH(ROW(A1)&"_"&COLUMN(A1),$C:$C,0),2),"")
を入力して右下にフィル

で出来ると思います。フィルする大きさは
行数はA列の最大値 =MAX(A:A)
列数はA列の最大重複数 =MAX(C:C)
を参考にすると良いと思います。
(名無し) 2018/08/08(水) 08:40


Sub main()
    Dim r As Range, rr As Range
    Set r = Range("A1")
    Set rr = Range("AA1")
    Do While r.Value <> ""
        rr.Value = r.Offset(, 1).Value
        Set rr = IIf(r.Value = r.Offset(1).Value, rr.Offset(, 1), Range("AA" & rr.Offset(1).Row))
        Set r = r.Offset(1)
    Loop
End Sub
(mm) 2018/08/08(水) 09:20

 名無しさん、式の「$C:$C」は「$D:$D」では?
 また、
 =IFERROR(INDEX($B:$B,MATCH(ROW(A1)&"_"&COLUMN(A1),$D:$D,0)),"") 
 でも。
(ねむねむ) 2018/08/08(水) 16:41

ねむねむ様

最初はC1に=A1&"_"&COUNTIF(A$1:A1,A1) としていたのを、
あとから重複数確認も出来た方が良いかなとCとDに分割して直し忘れていたみたいです。

訂正ありがとうございます。
(名無し) 2018/08/08(水) 16:56


コメント返信:

[ 一覧(最新更新順) ]


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