[[20150520101922]] 『6つのシートの同じ場所の値でかぶらないように抽』(AAA) ページの最後に飛ぶ

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

 

『6つのシートの同じ場所の値でかぶらないように抽出』(AAA)

6つの同じフォーマットがあります。
T2:V2に項目名 W2に: X2:AH2に取引先名前
T:3V3に項目名  W3に: X3:AH3に住所
T4:V4に項目名 W4に: X4:AH4に取引先名前
T:5V5に項目名  W5に: X5:AH5に住所

が記載されています。
T2からの取引先の名前と
T4からの取引先の名前は1シート内では絶対に違うものになります。

それが計6シートあり
7シート目の
B26に項目名C26に6シート分の上記の取引先名を重複しないように抽出
住所も同様にB27に項目名C27に住所

上記の様な形で7シート目にB26から下に取引先名、住所、取引先名、住所・・・
と交互に重複しないものだけを抽出したいのですが
関数またはVBAどちらでも構わないので何か方法わかるかたがいたら回答よろしくお願いします。

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


手作業で、必要なデータを7シート目にコピーした後、「データ」−「重複の削除」してはいかがでしょう?
(???) 2015/05/20(水) 11:01

関数やVBAでは難しいでしょうか??
毎日作業があるので出来れば自動でと思っているのですが難しいでしょうか?
(AAA) 2015/05/20(水) 11:07

> 何か方法わかるかたがいたら回答よろしくお願いします。

この依頼の仕方が嫌いなんですよ。判るから簡単に解決できるだろう、という他力本願にしか見えない。
判るから回答しているのではなくて、時間をかけて調べて、コーディングして、試験して、そして回答するんですよ。
それなのに、質問者は元データの実例と、期待する出力の具体例すら書かない手抜き。試験データまで回答者に考えさせているわけです。

とりあえず、今回の場合、出力が特に判りません。1つの項目に、複数の取引先があった場合、どう出力したいのですか?
あと、W列のコロンも意味不明。無視で良いですか?

 (1)
	B	C
26	項目名1	取引先1
27	項目名1	住所1
28	項目名1	取引先2
29	項目名1	住所2

 (2)
	B	C	D
26	項目名1	取引先1	取引先2
27	項目名1	住所1	住所2

 (3)
	B	C
26	項目名1	取引先1、取引先2
27	項目名1	住所1、住所2

(???) 2015/05/20(水) 16:03


どの出力フォーマットなのかでコーディングは変わるわけですが、とりあえず(1)の場合で書いてみます。
違うなら、まずはご自分で直してみてください。

結果をまとめるシートの、シートモジュール用マクロとして貼ってください。
(うまくいったら、ActiveXのボタンでも貼って、そっちに記述すると使いやすいでしょう)

 Sub test()
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim iR As Long
    Dim iw As Long

    iR = 26

    iw = Cells(Rows.Count, "C").End(xlUp).Row
    If iw < iR Then
        iw = iR
    End If
    Range("B26:C" & iw).ClearContents

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> Me.Name Then
            With Sheets(i)
                For j = 2 To .Cells(.Rows.Count, "T").End(xlUp).Row Step 2
                    For k = 26 To iR Step 2
                        If .Cells(j, "T").Value = Cells(k, "B").Value And _
                           .Cells(j, "X").Value = Cells(k, "C").Value Then
                            Exit For
                        End If
                    Next k
                    If iR < k Then
                        Cells(iR, "B").Value = .Cells(j, "T").Value
                        Cells(iR, "C").Value = .Cells(j, "X").Value
                        Cells(iR + 1, "B").Value = .Cells(j + 1, "T").Value
                        Cells(iR + 1, "C").Value = .Cells(j + 1, "X").Value
                        iR = iR + 2
                    End If
                Next j
            End With
        End If
    Next i

    Sort.SortFields.Clear
    Sort.SortFields.Add Key:=Range("B26:B" & iR - 1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("B26:C" & iR - 1)
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
 End Sub
(???) 2015/05/20(水) 17:31

(1)
    B C
26  取引先1 会社名
27  住所1 住所
28  取引先2 会社名
29  住所2 住所
   ・
   ・
   ・

であっています。

項目名は仮として今は
T2: V2に取引先1 W2に: X2: AH2に取引先名前
T:3V3に住所1  W3に: X3:AH3に住所
T4: V4に取引先2 W4に: X4: AH4に取引先名前
T:5V5に住所2  W5に: X5:AH5に住所

になっています。
同じフォーマットのsheetが6つあります。
取引先1と住所1でワンセットになっています。それを上記の場所に抽出したいです。

???さんのコードを試した結果です。
C列
2015/5/16
5/16/2015
取引先1
取引先1
取引先1
取引先1
住所1
住所1
住所1
住所1
住所1
住所2

C26セルから↓にこのようにでてしまいました。

(AAA) 2015/05/25(月) 10:13


(1)
    B C
26  取引先1 会社名
27  住所1 住所
28  取引先2 会社名
29  住所2 住所

いやいや、これ全然想定と違いますよ。だから元データの実例を、と言ってます。
このデータならソートできないので、Sortしている以降は全部削除してください。

あと、結果に日付っぽいのが含まれてますが、データの範囲は合ってますか? 含めてはいけないシートが存在しませんか?
(除外する指定は無かったので、自分のシート以外全部を対象とするコーディングになっています)

もっとも変なのが、T列とX列からデータを抜き出しているのに、結果が1列しかない事。正しい情報を教えてください。
または、とりあえずコーディング例は出しているので、これを元にご自身で修正してください。
(???) 2015/05/25(月) 11:55


祝日表というシートがあるのでここの日付けが反映されてしまっているみたいです。
T2: V2に取引先1 W2に: X2: AH2に取引先名前
T:3V3に住所1  W3に: X3:AH3に住所
T4: V4に取引先2 W4に: X4: AH4に取引先名前
T:5V5に住所2  W5に: X5:AH5に住所

をSheet1〜Sheet6まで

まとめシートに

    B列
26  取引先1 
27  住所1 
28  取引先2 
29  住所2 
30 取引先3
31 住所3
32 取引先4
33 住所4

が予め入力されていてC:E列に被らないように6つのシートから
取引先と住所のセットをとりだしたいです。

(AAA) 2015/05/25(月) 12:07


なに、B列は最初から入ってるわけです? そんな大事な事は最初に…。
あと、C:E列って、C列のことしか書いていなかったのに突然D,E列が登場。これは連結されたセルというだけですか?

で、B列が最初から入っているなら、話は簡単になるわけです。これならサンプルを元に、自力作成できるのでは?
(データ不明なので、動作確認していません)

 Sub test()
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim iw As Long

    iw = Cells(Rows.Count, "B").End(xlUp).Row
    If 26 <= iw Then
        Range("C26:C" & iw).ClearContents
    End If

    For i = 1 To Sheets.Count
        If Sheets(i).Name <> Me.Name And Sheets(i).Name <> "祝日表" Then
            With Sheets(i)
                For j = 2 To .Cells(.Rows.Count, "T").End(xlUp).Row Step 2
                    For k = 26 To iw Step 2
                        If .Cells(j, "T").Value = Cells(k, "B").Value And _
                           .Cells(j + 1, "T").Value = Cells(k + 1, "B").Value Then
                            Cells(k, "C").Value = .Cells(j, "X").Value
                            Cells(k + 1, "C").Value = .Cells(j + 1, "X").Value
                            Exit For
                        End If
                    Next k
                Next j
            End With
        End If
    Next i
 End Sub

(???) 2015/05/25(月) 13:04


説明不足ですみません。
VBAはちょっとずつ勉強しているのですが初心者なので
自作が厳しいと思い質問させていただきました。

B列は最初から入っていますが、各シートのT2:V2から↓に入っているものは
取引先2
住所2までしか用意していないので
項目名で一致はさせられず、困っていました。
C:Eは結合されています。
各6つのシートから被らない住所と取引先名を抽出したいです。
上記のコードですと結果的になにも表示されないままになってしまいました。

(AAA) 2015/05/25(月) 14:24


実例を挙げてください。レイアウトがさっぱり判らないのです。

項目名とは、実際には「取引先1」「住所1」等の文字列なのではないのですか? そしてそれは、各シートの
T列と完全一致しているのではないのですか? 一致していないのならば、B列ってなんのためにあるのですか?

データがどうであれ、全シート分をループさせる方法は提示しているのです。実例を明記できないのであれば、
あとはどのセルを見て、どのセルをコピーするのか、そこだけご自分で考えて、応用してください。
(???) 2015/05/25(月) 14:45


コメント返信:

[ 一覧(最新更新順) ]


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