- ベストアンサー
エクセルでの文字列の検索と追加表示していきたい。
A B C 1 い 2 ろ 3 い 1 4 に 5 ほ 6 い 1、3 7 と 8 ろ 2 9 り 10 に 4 11 い 1,3、6 12 ろ 2、8 文字列A内で重複するものの行の番号を上のように追加していきたいのですが、可能でしょうか? 自分でいろりろ試してみましたが、ダメでした。 この方法を教えてください!
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
かなり強引な方法ですが、作業列を使えば、数式でもできなくはないです。 各列1行目を B列:作業列1 =COUNTIF($A$1:A1,A1) C列:作業列2 =A1&"【"&B1 D列:作業列3 =IF(B1=1,"",MATCH(A1&"【"&(B1-1),$C$1:C1,0)-1) E列:結果列 =IF(B1=1,"",IF(B1=2,"",OFFSET($E$1,D1,0)&",")&ROW(OFFSET($E$1,D1,0))) として、以下末行までフィル。 "【"のところは、「4番目の413」と「34番目の41」を区別するための区切記号なので、A列の末尾にこない文字ならば何でもOKです。 0~999までのランダムな整数15,000行についてテストしてみましたが、職場のノート(CeleronM 1.4G)で2分弱、自宅のデスクトップ(Pentium 4G)でも70秒ほど要しました。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんばんは。 本来、1つの語だけの検索なら、配列数式で出来ますが、複数ある場合、VBAのユーザー定義関数のようなものにするか、並べ替えなどを使わなければ不可能だと思います。以下は、ワークシートの配列数式と同じ考え方です。 これは、もしかしたら、Excel 2000 以下で、大量のデータですと、支障があるかもしれません。 '<標準モジュール> Function FindValueRows(myRange As Range, arg2 As Range) As String Dim RangeAddress As String Dim buf As String Dim RowCount As Long Dim Ar() As Variant Dim i As Long If IsEmpty(arg2) Or IsError(arg2) Then Exit Function RangeAddress = myRange.Cells(1).Resize(Application.Caller().Row - myRange.Cells(1).Row + 1).Address If Application.Caller().Row - myRange.Cells(1).Row = 0 Then Exit Function Ar() = Evaluate(RangeAddress & "=" & arg2.Address) For i = LBound(Ar(), 1) To UBound(Ar(), 1) - 1 If Not IsError(Ar(i, 1)) Then If Ar(i, 1) Then buf = buf & "," & i End If End If Next i FindValueRows = Mid$(buf, 2) End Function 私の方の使い方は、FindValueRows(検索範囲,検索文字セル) =FindValueRows($A$1:$A$12,A1) 式をドラッグして、フィルダウンコピーします。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
'標準モジュールに以下のような関数を定義する '指定した範囲で指定した値がある位置をカンマ区切りの文字列で返す Public Function dupPos(r As Range, v As String) As String Dim ret As String, x As Range, pos As Long ret = "" pos = 0 For Each x In r pos = pos + 1 If x.Value = v Then ret = ret & pos & "," End If Next If ret = "" Then dupPos = "" Else dupPos = Left(ret, Len(ret) - 1) End If End Function A列にA1からデータが入っている時 B2に =JIS(dupPos($A$1:A1,A2)) の式をいれ下にフィル(コピー)する
お礼
できました。御礼が遅くなってしまって申し訳ありません。 VBAは理解不能でした~(涙