エクセルは良く使っていますが、レベルは初級の上です。
同一セル内に複数の重複データが入っていますが、重複しないものを抽出し
新しいセルに入れたいと思っています。
重複データの区切りは、セミコロン";" パイプ区切り"|",空白、改行が混在しています。
重複しないものを、新しいセルに入れたいのですが、どのようにしたら良いでしょうか?
新しいセルでのデータ区切りは、コンマ(又はパイプ区切り)にしたいと思っています。
例で説明します。
A列(番号) B列(元のデータ) C列(重複を除いたデータ)
1 タイ ベトナム 中国|タイ|タイ タイ,ベトナム,中国
2 インド ベトナム|インド タイ |インド 中国 インド,ベトナム,タイ,中国
※B列のデータを重複を除いて、C列に入れたいと思っています
※2行のデータを例にしましたが、実際には2万くらいデータがあります
※マクロは全くわからないので、多少の手作業があっても関数レベルで
やれると助かります。(いまから、マクロを勉強してもよいでしょうか??)
良い方法をアドバイスいただければ助かります。
No.3ベストアンサー
- 回答日時:
Sheet2 において、
1.セル A1 に次式を入力して、此れを下方にズズーッとドラッグ&ペースト
=SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!B1,CHAR(10)," "),"|"," "),";"," ")
2.列A全体を選択して、[コピー]→[値の貼り付け]を実行
3.列A全体を選択したままで、[データ]→[区切り位置]を実行
4.カンマやタブなどの…に区切られたデータ”に目玉を入れて、[次へ]
5.“スペース”および“連続した区切り文字…扱う”にチェックを入れて、[完了]
Sheet3 において、
6.セル A1 に次式を入力して、此れを下方および右方にズズーッとドラッグ&ペースト
=IF(COUNTIF(Sheet2!$A1:A1,Sheet2!A1)=1,Sheet2!A1,0)
何処まで右に?
全セルのデータが 0 になる列までネ(此処ではそれを仮に列Eとしておく)
7.列A~E全体を選択したままで、[編集]→[ジャンプ]→[セル選択]を実行
8.“数式”に目玉を入れ、かつ、その配下の“数値”だけにチェックを残して[OK]
9.数値 0 の全セルが選択状態になるので、そのままの状態で[編集]→[削除]を実行
10.“左方向にシフト”に目玉を入れて「エイヤッ!」と Enterキーを叩き付け
ありがとうございます。これなら操作の流れがわかりました。
操作手順10以下が途中で切れているように思えますが、
後は何とか、目的は果たせそうです。
特に6に相当する操作が思いつかなかったので、助かりました。
No.4
- 回答日時:
#3さんと同様にデータ/区切り位置で元データを複数列に分解します。
このデータがB列からG列にあるとします。H列は空にしておきます。
2行目の例では、I列に
=IF(H2="",C2,IF(ISERROR(FIND(C2,H2)),H2&","&C2,H2))
という式を入れて、右方、下方にずずっと、十分な数だけコピーします。多すぎても問題ありませんが、不足はNGです。
最終列にお望みのデータが得られると思います。ご参考まで。
なお、#1のkeithinさんと同様の方法で、但しユーザー定義式で無くてループを回して一発でやってみました。一旦配列に取り込む高速化の技は取り入れていますが、2万行を当方の環境(Core i5 3.2GHz,xl2010)で、600ミリ秒前後で処理できました。
要するにVBAを用いると、1秒かからずに処理できますよと、誘惑しています。
※replace関数を複数回用いる方法と、Midで切り出して、","に変換してMidで書き戻す方法を試してみましたが、replace関数を用いる方が高速でした。(これが検証してみたかっただけです...)
ありがとうございます。追加の工夫の部分、トライしてみます。
スキルがあると、VBAでは1秒弱でできるというのは、確かに誘惑です。
VBAを作るところに∞秒かかるので、先に進めず誘惑を味わえないのが残念です。
今回はありがとうございました。また、教えてください。
No.2
- 回答日時:
こんばんは!
>※マクロは全くわからないので、多少の手作業があっても関数レベルで
とありますが、関数で行うとしても結構厄介だと思います。
というコトでお望みでないVBAになってしまいますが、一例です。
データは2行目以降にあるとします。
画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)
Sub Sample1() 'この行から
Dim i As Long, k As Long, str As String, buf As String, myArray, tmp
Application.ScreenUpdating = False
For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row
tmp = Cells(i, "B")
For k = 1 To Len(tmp)
str = StrConv(Mid(tmp, k, 1), vbNarrow)
If str = " " Or str = "|" Then
tmp = WorksheetFunction.Replace(tmp, k, 1, "*")
End If
Next k
myArray = Split(tmp, "*")
For k = 0 To UBound(myArray)
If InStr(buf, myArray(k)) = 0 Then
buf = buf & myArray(k) & ","
End If
Next k
Cells(i, "C") = Left(buf, Len(buf) - 1)
buf = ""
Next i
Application.ScreenUpdating = True
End Sub 'この行まで
※ 関数で簡単にできる方法があればごめんなさいね。m(_ _)m
せっかく教えていただいたのです、VBAがわからず実行できません。
今回は期限があるので実行できませんが、早く理解できるように
なりたいと思いました。
実は初投稿で、こんなに教えていただけたので感激しています。
次回はよろしくお願いいたします
No.1
- 回答日時:
次の通りにするだけで出来ます。
手順:
ALT+F11を押す
現れた画面で挿入メニューから標準モジュールを挿入する
現れたシートに下記をコピー貼り付ける
function myf(target) as string
dim buf as string
dim a as variant, ax as variant
dim mydic as object
set mydic = createobject("Scripting.Dictionary")
on error resume next
’区切り文字を統一する
buf = replace(target, ";", ",")
buf = replace(buf, "|", ",")
buf = replace(buf, " ", " ")
buf = replace(buf, " ", ",")
a = split(buf, ",")
’重複を除いたデータを採取する
for each ax in a
if ax <> "" then mydic(ax) = 1
next
’結果を作成する
myf = join(mydic.keys, ",")
end function
ファイルメニューから終了してエクセルに戻る
好きな場所、たとえばB列に元データを準備する
てきとーなセル、たとえばC1に
=myf(B1)
と関数を記入する。
以下コピー。
VBAの基本的なところも説明いただいたのですが、残念ながら、
この説明でもまだVBAが理解できず、例題でも実行できませんでした。
VBAも必須だな、と思いました。これから勉強します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 3 2023/02/28 01:13
- Excel(エクセル) 【Excel】指定した文字列に該当する行を重複しないようにリスト 3 2022/03/30 12:27
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて RemoveDuplicatesを使 1 2023/02/27 22:21
- Visual Basic(VBA) vbaエクセルマクロ RemoveDuplicatesについて 重複したものがあれば行を削除するとい 1 2023/02/27 18:49
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- Excel(エクセル) 重複データの抽出について 2 2023/07/21 14:52
- Excel(エクセル) PowerQueryに詳しい方教えてください(Office365) 1 2022/07/24 21:11
- Visual Basic(VBA) Excel vbaについて知恵もしくは、コード教えて下さいm(__)m ① 表にあるデータをコピー、 2 2022/09/01 23:57
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Excel(エクセル) エクセルで重複データを行ごとに抽出したい 4 2022/12/05 08:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
タイ旅行で風俗に行った主人が...
-
アジア人って、なんで身体・容...
-
青い飯はなんでしょうか?
-
国際電話らしいのですが?最近...
-
中国につきものの、「アノ匂い...
-
外国に日本にあるようなインタ...
-
デヴィ夫人はなぜあんなに偉そ...
-
タイに日本米を持って行くこと...
-
メンズウエスト36とは何センチ...
-
マレーシアの法律について質問...
-
マレーシアでの電子ピアノの使...
-
ビール飲んだ後ドリアンは 何時...
-
タイ人の名前のファーストネー...
-
主人がタイに出張に行きました...
-
タイでの不倫は罪になりますか?
-
3位タイのタイってなんですか?
-
福岡県はアジアの玄関口と呼ば...
-
タイの女性にはまる人はなぜ?
-
スリランカ人の方にプレゼント
-
タイの電化製品を日本で用いる...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アジア人って、なんで身体・容...
-
タイ旅行で風俗に行った主人が...
-
国際電話らしいのですが?最近...
-
グーとパーをつきあわせるあい...
-
オセアニアではなぜアジアとの...
-
中国につきものの、「アノ匂い...
-
外国に日本にあるようなインタ...
-
デヴィ夫人はなぜあんなに偉そ...
-
不気味な着信 - 6から始まる番号
-
マレーシアの法律について質問...
-
主人がタイに出張に行きました...
-
日本でベトナム通貨(ドン)→日...
-
メンズウエスト36とは何センチ...
-
マレーシアの入国審査について
-
インドシナ半島とマレー半島の...
-
ベトナム人男性はみんなこんな...
-
タグホイヤーのCG-1111の取扱説...
-
インドは中東?アジア?
-
マレーシアの不法滞在の罰則
-
タイの女性にはまる人はなぜ?
おすすめ情報