エクセルを使った表で下記の様なデータがあります。
A列は番号、B列は来歴で、一番最後の文字(A0000の場合はB)の行が最新のデータになります。
例えばA0000の場合は始めのデータは「スニーカー」「サンダル」でしたが、A改定で「パンプス」が加わり、
更にB改定で「スニーカー」と「パンプス」が無くなったので、最終のデータは「サンダル」だけになります。
自動でこの表を結果の様に、夫々の番号で最終の来歴だけを残す方法を教えて下さい。
行は4000行程あり、来歴は無しの物からJ位まであります。
又番号によってデータの行数も異なります。D列以降にもデータは入っています。
A B C D E
1 A0000 - スニーカー
2 A0000 - サンダル
3 A0000 A スニーカー
4 A0000 A サンダル
5 A0000 A パンプス
6 A0000 B サンダル
7 B0000 - Tシャツ
8 C0000 - スーツ
9 C0000 A スーツ
10 C0000 A ドレス
11 C0000 A 着物
12 D0000 - 靴下
13 D0000 - ストッキング
:
:
結果(最終来歴だけのデータにする)
A B C D E
1 A0000 B サンダル
2 B0000 - Tシャツ
3 C0000 A スーツ
4 C0000 A ドレス
5 C0000 A 着物
6 D0000 - 靴下
7 D0000 - ストッキング
現在並び替えて手作業で削除していますので、是非良い知恵をご教授下さい。
No.5
- 回答日時:
No.1です。
既に解決済みかと思いますが、関数で来歴の集計方法がわかりましたのでご参考として紹介いたします。
A列に作業列を作り
A2 =IF(C2="","",IF(LEFT(B2,1)=LEFT(B3,1),"",LEFT(B2,1)))
*C列が空欄の時は空欄。B2の頭文字(A)がB3の頭文がと同一文字の場合は空欄、以外はB2の頭文字を表示。
G2 =VLOOKUP(F2,$A:$D,3,0)
*F列の文字を、A列~D列の表から検索しC列の文字を表示。
後は、前回紹介した作業と同じです。
今回は、値をsheet2に表示させてあります。
参考資料ですので、コメントは不要です。
No.4ベストアンサー
- 回答日時:
作業列を使わないでやる方法。
先ず、質問提示のサンプルでテストしてください。
見出し:1行目
データ:2行目以降
としてあります。
また、実際のデータで実行する場合は
当然ながらそれに応じてテーブル範囲など適宜修正のこと。
'--------------------------------------------------
Sub Test()
Dim myDic1, myDic2
Dim Akey1, Akey2
Dim Target As Range
Dim R As Long
Dim LastRow As Long
Set myDic1 = CreateObject("Scripting.Dictionary")
Set myDic2 = CreateObject("Scripting.dictionary")
LastRow = Cells(Rows.Count, "A").End(xlUp).Row
'▲▲必要ならソートのコードをここに挿入
For R = LastRow To 2 Step -1
Akey1 = Cells(R, "A").Value
Akey2 = Cells(R, "A").Value & "@" & Cells(R, "B").Value
If myDic1.exists(Akey1) = False Then
myDic1.Add Akey1, ""
myDic2.Add Akey2, ""
Else
If myDic2.exists(Akey2) = False Then
If Target Is Nothing Then
Set Target = Cells(R, "A")
Else
Set Target = Union(Target, Cells(R, "A"))
End If
End If
End If
Next R
Target.EntireRow.Delete xlUp
End Sub
'------------------------------------------------------
第1キー(A列)第2キー(B列)のソートが必要なら、
上記▲のところに、下記ソートコードを挿入すること。
'--------------------------------------------------
Range("A1:C" & LastRow).Sort _
Key1:=Range("A2"), Order1:=xlAscending, _
Key2:=Range("B2"), Order2:=xlAscending, _
Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom, SortMethod:=xlPinYin
'-------------------------------------------------------
以上です。
No.3
- 回答日時:
例データ
A,B、C列
A0000-スニーカー
A0000-サンダル
A0000Aスニーカー
A0000Aサンダル
A0000Aパンプス
A0000Bサンダル1
B0000-Tシャツ2
C0000-スーツ
C0000Aスーツ
C0000Aドレス
C0000A着物3
D0000-靴下
D0000-ストッキング4
D2に =IF(COUNTIF($A$2:A2,A2)=COUNTIF($A$2:$A$100,A2),MAX($D$1:D1)+1,"")
と式を入れて下方向に式を複写。仮にデータは第100行までと仮定した式。実際は多めの行数に変えること。
結果
上記D列
あとはGoogleで「imogasi方式」で照会してもらえれば私の回答が沢山出てくる。
Sheet2のA2に
=INDEX(Sheet1!$A$1:$C$100,MATCH(ROW()-1,Sheet1!$D$1:$D$100,0),COLUMN())
C2まで式複写。
A2:C2の式をA5:C5の行まで式複写。
結果
A0000Bサンダル
B0000-Tシャツ
C0000A着物
D0000-ストッキング
ーー
やっていることは上からその行までのA0000の数と、列全体でのA0000の数が等しい(最下行に当たる)行に、上から、連番を振ったもの。
Sheet2では連番に対応したSheet1の行をもってきている。
===
質問の文章部分は、「同じ顧客番号のうち最下行に位置する行のものだけを抜き出したい」と表現すれば読者に判りやすいのでは。
ーー
この回答への補足
ご回答ありがとうございます。
補足ですが今回導きたい答えは最終行では無く、最終来歴のデータ全て
なので、
C0000の場合は
C0000 A スーツ
C0000 A ドレス
C0000 A 着物
となって欲しいです。
imogasi方式での回答も是非知りたいので、再度ご回答頂けると嬉しいです。
よろしくお願い致します。
No.2
- 回答日時:
VBAを使う方法です
A列を一時的に作業列として使います
A列の前に1列挿入し、下記のVBAを実行すると
図の様に、A列に残す行に「@」が付きます
後は、フィルターで
1.「@」行を抽出して、別シートにコピー
又は
2.「空白セル」行を抽出して、行削除
します
終了後はA列を「非表示」又は「列削除」します
-----------------------------------
Sub Ts()
lp = Range("B" & Rows.Count).End(xlUp).Row
Cells(lp, "A") = "@"
ban = Cells(lp, "B")
rai = Cells(lp, "C")
Do Until lp < 2
If ban = Cells(lp - 1, "B") Then
If rai = Cells(lp - 1, "C") Then
Cells(lp - 1, "A") = "@"
End If
Else
Cells(lp - 1, "A") = "@"
ban = Cells(lp - 1, "B")
rai = Cells(lp - 1, "C")
End If
lp = lp - 1
Loop
End Sub
ご回答ありがとうございました。
データ4000行に一瞬で「@」マークが付き私の思う通りの結果になりました。
今までこの作業に毎回かなりの時間を費やしていましたので助かりました。
今後多いに活用させて頂きます。
No.1
- 回答日時:
ご参考程度で。
添付資料を参照ください。
「フィルタオプションの設定」を使うやり方です。
まず、項目をつけて表を作成する。
A列から 番号 来歴 商品名
次に、E、F列に検索データを入力
E列 Aから○○まで
F列 各番号の最終来歴を入力。
次に、データ→フィルタ→フィルタオプションの設定を選択。
抽出先 指定した範囲
リスト範囲 $A:$C
検索条件範囲 $E$1:$F$5
抽出範囲 $H$1
なお、重複するレコードは無視するにチャックは入れない。
F列の最終来歴を自動で表示する方法が思いつきませんので、ご参考とさせていただきます。
参考URL:http://www.eurus.dti.ne.jp/~yoneyama/Excel/filte …
早速のご回答ありがとうございました。
おっしゃる通りやりたかった事、すばりでは無かったのですが、今まで知らない機能なので
今後活用させて頂きたいと思います。
又参考URLもじっくり読ませて頂こうと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Visual Basic(VBA) 【VBA】データを入力後に,同一シート内に履歴として転記するVBAコードを教えていただきたいです。 3 2022/11/16 01:37
- Excel(エクセル) 【VBA】A列にある連続したデータの1番下に文字列を入力したい 1 2023/01/28 04:40
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- レディース ファッション 2 2022/09/11 21:16
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- シューズ・ブーツ 20歳女子です。 私は身長が170cmあり、自分自身のファッションに少し悩んでいます。 靴はいつもス 1 2022/10/06 18:32
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Excel(エクセル) Excel2007での条件付き書式について 6 2023/05/02 10:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセル初心者です 関数の入れ...
-
【関数】先頭だけにある、半角...
-
エクセル 白黒印刷で白線を印刷...
-
Excelのチェックボックスの使い...
-
【関数】適切な文字数の数字を...
-
Excelのpivotについて質問です
-
Excel ピボットテーブルで日付...
-
LOOKUP関数を使えばいいのでし...
-
エクセル関数を教えてください
-
エクセルのセルに同じ大きさの...
-
UNIQUE関数が使えないバージョ...
-
excelの不要な行の削除ができな...
-
エクセルで「-0.0」と表示さ...
-
時間によってファイル名が変わ...
-
WPS OFFICEでの縦書きについて
-
エクセルの関数について教えて...
-
Aというブックの1というシート...
-
【マクロ】シート名を取得する...
-
VBA Private Sub Worksheet_Cha...
-
VBA、Excelのworkbook.open に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel 2019 のピボットテーブル...
-
[関数得意な方]教えて下さい・...
-
Excelにてある膨大なデータを管...
-
[関数について]わかる方教えて...
-
Excel初心者です。 詳しい方、...
-
excelの不要な行の削除ができな...
-
エクセル関数に詳しい方教えて...
-
INDIRECTを使わず excelで複数...
-
[オートフィルタ]で抽出された...
-
エクセルの神よ、ご回答を! エ...
-
エクセル関数に詳しい方、教え...
-
各ページの1番上の表示について
-
Excelで写真のような表を作った...
-
エクセルで不等号記号(≠)が上に...
-
数学 Tan(θ)-1/Cos(θ)について...
-
Excel 2019 は、SPILL機能があ...
-
Excelで全角を半角にしたいので...
-
条件付き書式を教えてください
-
Excel フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報