• ベストアンサー

一部データの一致するセルを並べ替える

エクセル2000での質問です。以下の文字データが一列上に並んでいます。 あか☆あいうえお あか☆かきくけこ あさを☆さしすせそ あさを☆たちつてと あさを☆なにぬねの これを あか☆あいうえお,かきくけこ あさを☆さしすせそ,たちつてと,なにぬねの のように「☆以前が一致する」セルを行単位でまとめて行きます。 ※2列目以降の「***☆」はできれば排除したいです。 データ数は約1200行です。文字データ内の文字数は不定です。 よろしくお願い致します。

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

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.2

VBAでやってみます。 データがA1から下に途切れなく入っているものとします。 これをD1から下に「☆以前が一致する」セルを行単位でまとめて行くはずです。 標準モジュールに以下をコピペして実行してください。 Sub test01() Range("A1").Activate i = 1 Do Until ActiveCell.Value = "" If Cells(i, "D") = "" Then Cells(i, "D") = ActiveCell.Value End If If Left(ActiveCell.Value, InStr(ActiveCell.Value, "☆")) _ = Left(ActiveCell.Offset(1).Value, InStr(ActiveCell.Offset(1).Value, "☆")) Then Cells(i, "D") = Cells(i, "D") & "、" & Mid(ActiveCell.Offset(1).Value, InStr(ActiveCell.Offset(1).Value, "☆") + 1) Else i = i + 1 End If ActiveCell.Offset(1).Activate Loop End Sub

poolplayer
質問者

お礼

素晴らしいの一言です。 大変上手くいきました。 ありがとうございました。

その他の回答 (4)

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.5

条件 A列にデータが空白行が無く連続していること ☆で区切ってあること Sub Macro() Dim a As Range Dim b As Variant Dim i As Integer, ii As Integer [a1].Sort Key1:=Range("A1") For i = 1 To [a65336].End(xlUp).Row If InStr(Cells(i, 1), b) = 0 Or b = Empty Then Set a = Cells(i, 1) b = Left(a.Value, InStr(a.Value, "☆")) ii = 1 Else a.Offset(0, ii) = Right(Cells(i, 1), Len(Cells(i, 1)) - Len(b)) Cells(i, 1) = "" ii = ii + 1 End If Next i For i = [a65336].End(xlUp).Row To 2 Step -1 If Cells(i, 1) = "" Then Rows(Cells(i, 1).Row).Delete Next i End Sub 以上

poolplayer
質問者

お礼

2さんのやり方でやって見ました。 ありがとうございました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

質問の意味がわかりにくい。というか余りないタイプの質問だからだろうが。 言葉で言言い換えるならば、 先頭から☆印の手前までの文字列が等しい行は、後半をまとめて1行に組み変えるのかな。 こういう課題はVBAを使わないと難しい(式が複雑化するとか作業列が必要になる)。 難しさの原因は、何行(同じ☆印の手前までの文字列が等しい行が)あるか決まっていないからです。 ーーー 例データ  A-D列 ただしB-Dは関数式の結果です。 事情があって、元データは第2行目からにする。B1には=B2を入れておく。 A-D列 あか☆あいうえお あか あいうえお あか☆あいうえお あか☆かきくけこ あか かきくけこ あか☆あいうえおかきくけこ あさを☆さしすせそ あさを さしすせそ あさを☆さしすせそ あさを☆たちつてと あさを たちつてと あさを☆さしすせそたちつてと あさを☆なにぬねの あさを なにぬねの あさを☆さしすせそたちつてとなにぬねの B2の式 =LEFT(A2,FIND("☆",A2)-1) 式を下方向に複写 C2の式 =RIGHT(A2,LEN(A2)-FIND("☆",A2)) 式を下方向に複写 B、C列で☆の左右の文字列を分離したことになる。 ーー D2の式 =IF(COUNTIF($B$2:B2,B2)>1,D1&C2,A2) 式を下方向に複写 ーー 以上で☆印までが同じも行の最下行に望みのデータが出来ている。 それだけを取り出すために、E列に E2の式 =IF(B2=B3,"",MAX($E$1:E1)+1) 式を下方向に複写 これで連続番号の出た行のD列が望む文字列である。 これを別シートに取り出す方法は Mtach関数で取り出す行番号をE列で探し、そのD列を持ってくる。 WEB(Googeなど)で「imogasi方式」で照会すれば、抜き出し問題の質問が多数出てきて、その中の2,3少数個に当たってもらえれば、後半に似たことをやっている関数例が出てくるので参照のこと。 D-E列(参考) あか☆あいうえお あか☆あいうえおかきくけこ 1 あさを☆さしすせそ あさを☆さしすせそたちつてと あさを☆さしすせそたちつてとなにぬねの 2

poolplayer
質問者

お礼

ご丁寧にありがとうございました。

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.3

文字列のデータがA1セルからA1200セルまで入っていて、A列はあらかじめソートされているという条件で。 1)B1セル =A1 2)B2セル =IF(LEFT(FIND("☆",A2))=LEFT(FIND("☆",A1)),B1&","&RIGHT(A2,LEN(A2)-LEFT(FIND("☆",A2))),A2) ※下までコピー 3)C1セル =IF(ISERR(LEFT(FIND("☆",A2))),"←",IF( LEFT(FIND("☆",A2))=LEFT(FIND("☆",A1)),"","←")) ※下までコピー 4)オートフィルターでC列が ← のものだけ表示。 でいかがでしょうか。

poolplayer
質問者

お礼

1さんの回答に加え、2さんの関数も一部利用できました。 ありがとうございました。

poolplayer
質問者

補足

3さんの関数が正しいです。 ありがとうございました。

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

>あか☆あいうえお,かきくけこ >あさを☆さしすせそ,たちつてと,なにぬねの 1つのセルにこの様に並べるのかどうか、シートレイアウトを提示された方が宜しいかも。

poolplayer
質問者

お礼

ありがとうございました。

関連するQ&A