同じ文字の入ったセルを確認して、別セルの文字を一つにまとめたいのですが可能でしょうか?
関数では無理でしょうか?無理であればマクロでも構いませんので構文をご教授お願い致します。
例として下記データ(文字は例として挙げただけなので、文字数とかばらばらです)があります。
D列 E列 F列
3 あああ a
4 いいい b
5 あああ c
6 ううう d
7 いいい e
8 いいい f
9 あああ g
10 えええ h
D列で同じ文字がある場合、同じ文字ごとにE列の文字をF列に[,]区切りでまとめたいです。
D列 E列 F列
3 あああ a a,c,g
4 いいい b b,e,f
5 あああ c a,c,g
6 ううう d d
7 いいい e b,e,f
8 いいい f b,e,f
9 あああ g a,c,g
10 えええ h h
分かりにくくて申し訳ございません。
No.11
- 回答日時:
以下でどうなりますか
Public Sub Samp1()
Dim dic As Object
Dim vA As Variant
Dim i As Long
Set dic = CreateObject("Scripting.Dictionary")
With Range("D3", Cells(Rows.Count, "D").End(xlUp))
vA = .Resize(, 2).Value
For i = 1 To UBound(vA)
If (Not dic.Exists(vA(i, 1))) Then
dic.Add vA(i, 1), CreateObject("Scripting.Dictionary")
End If
dic(vA(i, 1))(vA(i, 2)) = Empty
Next
For i = 1 To UBound(vA)
vA(i, 1) = Join(dic(vA(i, 1)).Keys, ",")
Next
.EntireRow.Columns("F").Value = vA
End With
Set dic = Nothing
End Sub
No.10
- 回答日時:
No.9です。
数式でも良かったのですね?作業列を使っても良いですか?もし、良いのであればこんな感じです。次の数式を設定して、下へオートフィルしてください。ちなみに、1000行までしか対応していません。
【F3セル】=VLOOKUP(D3,D:G,4,FALSE)
【G3セル】=IFERROR(IF(COUNTIFS(D4:D$1000,D3,E4:E$1000,E3)=0,E3&",","")&VLOOKUP(D3,D4:G$1000,4,FALSE),E3)
No.9
- 回答日時:
こんなので、どうでしょう。
Sub sample()
Dim myRng As Range
Dim r As Range
Set myRng = Range("F3:F" & Cells(Rows.Count, "D").End(xlUp).Row)
myRng.Formula = "=IFERROR(IF(COUNTIFS(D4:D$1000,D3,E4:E$1000,E3)=0,E3&"","","""")&VLOOKUP(D3,D4:F$1000,3,FALSE),E3)"
For Each r In myRng
r.Value = WorksheetFunction.VLookup(r.Offset(0, -2).Value, Range("D:F"), 3, False)
Next r
End Sub
No.8
- 回答日時:
こんにちは
すでに回答は出ているようですが、別法でのVBAです。
文字の連結は出現順(=行番号が小さい方から)におこないます。
(補足でご例示の「e,f」は「f,e」の順になります)
Sub Sample()
Dim rng As Range, c As Range
Dim ct As Range, cu As Range
Dim s As String
Set rng = Range(Cells(3, 4), Cells(Rows.Count, 4).End(xlUp))
rng.Offset(, 2).FormulaLocal = "=IF(COUNTIFS($D$3:D3,D3,$E$3:E3,E3)=1,1,"""")"
For Each c In rng
If c.Offset(, 2).HasFormula Then
s = ""
Set ct = rng.Find(c.Value, lookat:=xlWhole)
Set ct = c
Set cu = c.Offset(, 2)
Do
If ct.Offset(, 2).Value = 1 Then s = s & "," & ct.Offset(, 1).Value
Set cu = Union(cu, ct.Offset(, 2))
Set ct = rng.FindNext(ct)
Loop While ct.Row > c.Row
cu.Value = Mid(s, 2)
End If
Next c
End Sub
No.7ベストアンサー
- 回答日時:
No.1・5・6です。
No.6の最後に記載した、「注意点」も考慮してみました。
No.6のコードは消去し、↓のコードにしてみてください。
Sub Sample3()
Dim myDic As Object
Dim i As Long, k As Long, lastRow As Long
Dim myFlg As Boolean
Dim myR, myAry
Set myDic = CreateObject("Scripting.Dictionary")
lastRow = Cells(Rows.Count, "D").End(xlUp).Row
myR = Range(Cells(3, "D"), Cells(lastRow, "F"))
For i = 1 To UBound(myR, 1)
If Not myDic.exists(myR(i, 1)) Then
myDic.Add myR(i, 1), myR(i, 2)
Else
myAry = Split(myDic(myR(i, 1)), ",")
For k = 0 To UBound(myAry)
If myAry(k) = myR(i, 2) Then
myFlg = True
Exit For
End If
Next k
If myFlg = False Then
myDic(myR(i, 1)) = myDic(myR(i, 1)) & "," & myR(i, 2)
End If
End If
myFlg = False
Next i
For i = 1 To UBound(myR, 1)
If myDic.exists(myR(i, 1)) Then
myR(i, 3) = myDic(myR(i, 1))
End If
Next i
Range(Cells(3, "D"), Cells(lastRow, "F")) = myR
Set myDic = Nothing
Range("F:F").Columns.AutoFit
MsgBox "完了"
End Sub
おそらく、E列の文字数に関係なく重複分も処理されると思います。m(_ _)m
No.6
- 回答日時:
No.1・5です。
投稿後・・・
もしかしてこういうコトをご希望なのかな?と思ってコードを考えてみました。
Sub Sample2()
Dim myDic As Object
Dim i As Long, lastRow As Long
Dim myR
Set myDic = CreateObject("Scripting.Dictionary")
lastRow = Cells(Rows.Count, "D").End(xlUp).Row
myR = Range(Cells(3, "D"), Cells(lastRow, "F"))
For i = 1 To UBound(myR, 1)
If Not myDic.exists(myR(i, 1)) Then
myDic.Add myR(i, 1), myR(i, 2)
Else
If InStr(myDic(myR(i, 1)), myR(i, 2)) = 0 Then
myDic(myR(i, 1)) = myDic(myR(i, 1)) & "," & myR(i, 2)
End If
End If
Next i
For i = 1 To UBound(myR, 1)
If myDic.exists(myR(i, 1)) Then
myR(i, 3) = myDic(myR(i, 1))
End If
Next i
Range(Cells(3, "D"), Cells(lastRow, "F")) = myR
Set myDic = Nothing
Range("F:F").Columns.AutoFit
MsgBox "完了"
End Sub
こんな感じですかね?
※ 注意点として ※
E列に万一 「af」 や 「a」 があり、
文字数が多いデータが上側にある場合、「a」はすでに登録済みだというコトになり、
「a」は無視されてしまいます。
その場合はもう一手間かける必要があります。
(E列の文字数の少ない順に並び替えをし、その後マクロを実行する)
といった具合になるかと・・・m(_ _)m
No.4
- 回答日時:
[No.2お礼]へのコメント、
》 最初の下記の次式はどれになるでしょうか?
失礼しました、下記間違いと書き漏らしがありました。
「Sheet1 において」の「Sheet1」は「Sheet2」の間違い。
その直下の行の「次式」は
=IFERROR(INDEX(Sheet1!$E:$E,SMALL(IF(Sheet1!$D$3:$D$10=Sheet1!$D3,ROW(Sheet1!D$3:D$10)),COLUMN(Sheet1!A1))),"")
で、この式は必ず配列数式として入力してください。
「配列数式として入力」の方法はご存知ですか?
それから、貴方の「補足日時:2019/05/16 20:16」の「No.1の回答に寄せられた補足コメント」は一切読んでおりません。
No.2
- 回答日時:
添付図参照
Sheet1 において、
次式を入力したセル D3 を右方7列下方7行オートフィル
Sheet3 において、C列は空白行として放置プレー
式 =C3&" "&Sheet2!D3 を入力したセル D3 を右方7列下方7行オートフィル
Sheet1 に戻って、
次式を入力したセル F3 を下方にズズーッとオートフィル
=SUBSTITUTE(TRIM(LOOKUP("黑",Sheet3!3:3))," ",",")
ありがとうございます。
最初の下記の次式はどれになるでしょうか?
あと、Sheet1ではなくSheet2でしょうか?
Sheet1 において、
次式を入力したセル D3 を右方7列下方7行オートフィル
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/15 08:30
- Excel(エクセル) エクセルでA列セル内で折り返すことなく、文字列を、B列C列・・・側に一行に 2 2022/07/23 02:02
- Excel(エクセル) Excelの文字列を数字に変換する方法について 6 2023/07/31 21:18
- Excel(エクセル) エクセルの書式設定の表示形式で設定した文字を文字列としてコピーしたい 1 2022/12/21 10:41
- Word(ワード) Wordの表中の文字を選択した時の白黒反転の違い 1 2023/04/25 12:13
- Excel(エクセル) Excelについて質問です(ver2019) 1 2023/06/30 21:20
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- Excel(エクセル) Excelに文字データのみを貼り付けたい 8 2023/05/03 15:38
関連するカテゴリから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 フィルターを掛けた状態...
-
[オートフィルタ]の適用範囲の...
おすすめ情報
ありがとうございます。
すみません。大事な事を書くのを忘れていました。
E列に重複データがある場合があります。
それはひとつで表示したいです。
申し訳ございません。
例
D列 E列 F列
3 あああ a
4 いいい f
5 あああ a
6 ううう d
7 いいい e
8 いいい f
9 あああ g
10 えええ h
↓
D列 E列 F列
3 あああ a a,g
4 いいい b e,f
5 あああ c a,g
6 ううう d d
7 いいい e e,f
8 いいい f e,f
9 あああ g a,g
10 えええ h h