• ベストアンサー

エクセルで自動的にデータをマッチングさせたいです

エクセルの下記のような状態のデータを、 ↓印下のように自動的にマッチングさせて並べ替えることは可能でしょうか。 アルファベットの大文字、小文字は区別しないようにしたいです。  A    B 88246 88246 98265 99253 A0026 A0026 A4298 a4298 B2265 b2425 B3321 B3321 ↓ セルA セルB 88246 88246 98265      99253 A0026 A0026 A4298 a4298 B2265      b2425 B3321 B3321

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! VBAになってしまいますが、一例です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) 尚、データは1行目からあるとしています。 Sub Sample1() 'この行から Dim i As Long Application.ScreenUpdating = False For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1 'A列最終行から1行目まで If StrConv(Cells(i, 1), vbProperCase) <> StrConv(Cells(i, 2), vbProperCase) Then Cells(i + 1, 1).Resize(1, 2).Insert shift:=xlDown Cells(i, 2).Cut Cells(i + 1, 2) End If Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 途中に空白セルはないという前提です。 ※ 一旦マクロを実行すると元に戻せませんので別Sheetでマクロを試してみてください。m(_ _)m

mosv
質問者

お礼

うわぁぁぁぁ 出来ました!! 本当に有難うございます。!!! 棚卸のデータ整理なのでめちゃくちゃ助かりました(嬉涙)

その他の回答 (3)

noname#204879
noname#204879
回答No.4

並べ替えする前の元データにおいて、両方の列に存在するデータは必ず同じ行にある(つまり左右隣り合わせ)、と理解してよろしいのですか? それともアレはタマタマであって、各列のデータは昇順/降順でなくランダムに並んでいるとか桁数もマチマチだし、左端の文字数も大文字/小文字も全角/半角もテンデンバラバラとか?

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

NO.2です! たびたびごめんなさい。 質問ではたまたまかもしれませんが、最初の1文字だけがアルファベットですので 前回のコードでもOKだと思いますが、 実際のデータは2文字目以降もアルファベットがあるかもしれません。 その場合は、対処できませんので、 前回のコード内の >If StrConv(Cells(i, 1), vbProperCase) <> StrConv(Cells(i, 2), vbProperCase) Then の行を >If StrConv(Cells(i, 1), vbUpperCase) <> StrConv(Cells(i, 2), vbUpperCase) Then に変更してください。 何度も失礼しました。m(_ _)m

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

作業列を設けて対応するのが計算に負担のかからない方法としてお勧めです。 最初にお示しの表がシート1に有って1行目は項目名などでA,B列の2行目から下方にデータが入力されているとします。 そこでC2セルには次の式を入力してD2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(AND($A2="",$B2=""),"",IF(ASC($A2)=ASC($B2),IF(COLUMN(A1)=1,MAX($C$1:$D1)+1,OFFSET(C2,0,-1)),IF(ASC($A2)<>ASC($B2),IF(COLUMN(A1)=1,MAX($C$1:$D1)+1,OFFSET(C2,0,-1)+1),""))) その後にお求めの表をシート2に作成するとしてA2セルには次の式を入力してB2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF(COLUMN(A1)=1,IF(COUNTIF(Sheet1!$C:$C,ROW(A1))=0,"",INDEX(Sheet1!$A:$A,MATCH(ROW(A1),Sheet1!$C:$C,0))),IF(COUNTIF(Sheet1!$D:$D,ROW(A1))=0,"",INDEX(Sheet1!$B:$B,MATCH(ROW(A1),Sheet1!$D:$D,0))))

関連するQ&A