No.1ベストアンサー
- 回答日時:
こんばんは!
↓の画像のように元データはSheet1にあり、Sheet2に表示するとします。
今回も作業用の列を設けるのが簡単だと思います。
画像ではSheet1の作業列G2セルに
=IF(COUNTIFS(A:A,C2,B:B,D2),ROW(),"")
という数式を入れフィルハンドルでこれ以上データはない!というくらいまで下へコピーしておきます。
Sheet2のA2セルに
=IFERROR(INDEX(Sheet1!C:C,SMALL(Sheet1!$G:$G,ROW(A1))),"")
という数式を入れ、列・行方向にフィル&コピー!
これで画像のような感じになります。
※ B列は好みの表示形式で!
尚、作業列が目障りであれば遠く離れた列にするか
非表示にしてください。m(_ _)m
No.5
- 回答日時:
No.1・4です。
関数・マクロ両方とも30行程度しか表示されない!というコトですが・・・
A&B列データとC&D列データで一致するものが実際にはその程度しかない!というコトしか考えられないのですが。
(見た目は同じように見えても何らかの違いがある。)
VBAの場合、C&D列でA&B列と一致するものが複数存在する場合は、エラーになるはずですし
関数の場合、複数存在しても作業列にすべての行番号が表示されるはずなので
表示されている行番号のデータはSheet2に表示されるはずです。
こちらで考えられる原因としてはこの程度しか思いつきません。m(_ _)m
この回答へのお礼
お礼日時:2020/02/14 00:57
元のdateから見直してみました。ご指摘の通り、dateの並び替えの時点でずれていたようです。お陰様で助かりました。
心より感謝します。
No.4
- 回答日時:
No.1です。
>ちなみにA,B列は約1000行、C,D列は50000行、E列以降のデータが多く、EM列くらいまで・・・
相当量のデータなのですね。
関数では荷が重いかも。
VBAでやってみました。
元データはSheet1にあり、1行目が項目行で最終列まで項目名が入っているとします。
そして、Sheet2にC列以降のデータを表示するようにしてみました。
標準モジュールにしてください。
Sub Sample1()
Dim myDic1 As Object, myDic2 As Object
Dim i As Long, j As Long
Dim lastRow As Long, lastCol As Long
Dim buf As String, myStr As String
Dim wS As Worksheet
Dim myKey, myItem, myR, myAry1, myAry2
Set myDic1 = CreateObject("Scripting.Dictionary")
Set myDic2 = CreateObject("Scripting.Dictionary")
Set wS = Worksheets("Sheet2")
wS.Cells.ClearContents
With Worksheets("Sheet1")
lastCol = .Cells(1, Columns.Count).End(xlToLeft).Column
wS.Range(Cells(1, "A"), Cells(1, lastCol - 2)).Value = Range(.Cells(1, "C"), .Cells(1, lastCol)).Value
lastRow = .Cells(Rows.Count, "A").End(xlUp).Row
myR = Range(.Cells(2, "A"), .Cells(lastRow, "B"))
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) & "_" & myR(i, 2)
If Not myDic1.exists(myStr) Then
myDic1.Add myStr, ""
End If
Next i
lastRow = .Cells(Rows.Count, "C").End(xlUp).Row
myR = Range(.Cells(2, "C"), .Cells(lastRow, lastCol))
For i = 1 To UBound(myR, 1)
myStr = myR(i, 1) & "_" & myR(i, 2)
If myDic1.exists(myStr) Then
For j = 3 To lastCol - 2
buf = buf & myR(i, j) & "_"
Next j
myDic2.Add myStr, Left(buf, Len(buf) - 1)
End If
buf = ""
Next i
End With
myKey = myDic2.keys
myItem = myDic2.items
myR = Range(wS.Cells(2, "A"), wS.Cells(UBound(myKey) + 2, lastCol))
For i = 0 To UBound(myKey)
myAry1 = Split(myKey(i), "_")
myR(i + 1, 1) = myAry1(0)
myR(i + 1, 2) = myAry1(1)
myAry2 = Split(myItem(i), "_")
For j = 0 To UBound(myAry2)
myR(i + 1, j + 3) = myAry2(j)
Next j
Next i
Range(wS.Cells(2, "A"), wS.Cells(UBound(myKey) + 2, lastCol)) = myR
Set myDic1 = Nothing
Set myDic2 = Nothing
wS.Activate
MsgBox "完了"
End Sub
こんな感じではどうでしょうか?m(_ _)m
No.3
- 回答日時:
「フィルターオプション」が簡単かと。
「データ」タブの「並べ替えとフィルタ」から「詳細設定」をクリックしてみて下さい。
フィルタというと条件外の行を非表示にするイメージがありますが、抽出先のオプションで「指定した範囲」を指定することにより、任意の位置に取り出すことも可能です。
No.2
- 回答日時:
手作業で行う手順をそのまま再現するだけで良いですよ。
「ID」と「日付」を見て、一致するデータにマークを付けて、マークが付いている行のデータを拾い上げる。
…って事をしませんか。
一致するかは「COUNTIF」「COUNTIFS」関数を使って比較できます。
マークは、上から順に連番にすれば便利。マークを1から順に拾えば良いんです。
あとはXLOOMUP関数や、MATCH関数とINDEX関数の組み合わせ、などでデータ参照させるだけです。
(このやり方はインターネット上を検索すれば図解入りの解説付きで説明されているサイトを見つけられると思いますので、そちらを探して参照してください)
・・・
すでにこの手順の回答が返っていますが、この考え方を理解できていないのであれば、
回答を真似るのではなく、まずは自身で作ってみましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) エクセルで沢山のレコードの最後に追記するには? 7 2023/04/10 13:27
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 3 2022/06/12 11:17
- Excel(エクセル) エクセル 自動計算 1 2023/01/30 13:28
- Visual Basic(VBA) vba 等間隔の列に対しての計算 6 2022/05/17 20:15
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Excel(エクセル) [オートフィルター]機能について 3 2023/02/04 14:32
- 会計ソフト・業務用ソフト 同じデータの入ったセルの統合の方法 1 2022/10/04 12:29
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel元に戻す方法を教えてくだ...
-
お店に入るために行列に並んで...
-
VBAで文字列を数値に変換したい
-
Excelの行、列の左方向シフト、...
-
オートフィルターをかけ、#N/A...
-
エクセル(勝手に太字になる)
-
エクセルで二つの数字の小さい...
-
ExcelのVBAで連番を振る。
-
PowerPointで表の1つの列だけ...
-
エクセルで2列のセルを連続して...
-
A列がない・・・A列が非表示に...
-
エクセルで、列の空欄に隣の列...
-
【エクセルの並び替え】末尾の...
-
2つのエクセルのデータを同じよ...
-
テーマパークでの列を途中で抜...
-
エクセルの並び変えで、空白セ...
-
文字列に数字を含むセルを調べたい
-
文字列になっている時間をVBAで...
-
関数を教えて下さい。
-
VBAで特定の文字を探して隣のセ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
2つのエクセルのデータを同じよ...
-
エクセル(勝手に太字になる)
-
「B列が日曜の場合」C列に/...
-
エクセル 文字数 多い順 並...
-
EXCELで 一桁の数値を二桁に
-
エクセル 同じ値を探して隣の...
-
VBAで文字列を数値に変換したい
-
エクセルの並び変えで、空白セ...
-
Excelで半角の文字を含むセルを...
-
エクセルで文字が混じった数字...
-
Excel、市から登録している住所...
-
A列がない・・・A列が非表示に...
-
エクセルの表から正の数、負の...
-
[関数得意な方]教えて下さい・...
-
エクセルの項目軸を左寄せにしたい
-
エクセル 時間帯の重複の有無
-
Excelにてある膨大なデータを管...
おすすめ情報
tom04さん
ありがとうございます。
求めているものはまさにこれなのですが、なぜかsheet 2で30行分くらいしか出てきません…。
ちなみにA,B列は約1000行、C,D列は50000行、E列以降のデータが多く、EM列くらいまであるのですが、関係あるでしょうか?