エクセルでセル内の重複する文字列を削除する方法を教えてください。


例えばA1のセルに次のような文字列があります

斎藤(18)
武田(21)
稲葉(41)
田中(3)
斎藤(18)
金子(8)
田中(3)

この中で重複している文字列(斎藤(18)田中(3))を削除し、以下のようにしたいと思います。

斎藤(18)
武田(21)
稲葉(41)
田中(3)
金子(8)

区切り位置にはカンマやスペースは入ってません。
(改行コードは入ってます)
わかる方おられましたら教えていただけますと幸いです。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (7件)

A1セル以下、A列にデータがあるとして、変換結果をB列に書き出します。


連想配列のキーの配列をまとめるのに、Joinが使ってみたかっただけです。
重複チェックするデータ数が今回程度では、速度上のメリットもないかもしれませんが、ご参考まで。
Sub test()
Dim myCell As Range, targetRange As Range
Dim buf As Variant
Dim i As Long
Dim myDic As Object

Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
With ActiveSheet
Set targetRange = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp))
End With
Set myDic = CreateObject("Scripting.Dictionary")
For Each myCell In targetRange.Cells
buf = Split(myCell.Value, vbLf)
For i = LBound(buf) To UBound(buf)
If Not myDic.Exists(buf(i)) Then myDic.Add buf(i), ""
Next i
myCell.Offset(0, 1).Value = Join(myDic.keys, vbLf)
myDic.RemoveAll
Next myCell
Set myDic = Nothing
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
End Sub
    • good
    • 0
この回答へのお礼

できました!
ありがとうございます!

お礼日時:2012/06/30 11:31

No.5です。


>実は同じようなセルが300行以上あるんです。。。
ということなので、もう一度コードを載せてみます。

A列データは1行目からあるとします。
前回同様B列を作業用の列として使用していますので、B列は何もない!ということだとして・・・


Sub test2() 'この行から
Dim i, k As Long
Dim str As String
Dim myArray As Variant
Application.ScreenUpdating = False
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
myArray = Split(Cells(i, 1), vbLf)
For k = 0 To UBound(myArray)
Cells(k + 1, 2) = myArray(k)
Next k
For k = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1
If WorksheetFunction.CountIf(Columns(2), Cells(k, 2)) > 1 Then
Cells(k, 2).Delete (xlUp)
End If
Next k
For k = 1 To Cells(Rows.Count, 2).End(xlUp).Row
str = str & Cells(k, 2) & vbCrLf
Next k
Cells(i, 1) = Left(str, Len(str) - 1)
str = ""
Columns(2).Clear
Next i
Application.ScreenUpdating = True
End Sub 'この行まで

※ 操作方法は前回同様です。
こんな感じではどうでしょうか?m(_ _)m
    • good
    • 0
この回答へのお礼

新しい方法をお教えくださりありがとうございます!
ただ、こちらのエクセル知識が乏しいので、A1セルじゃない時にどこをいじればいいのかがわからなくなってしまいました。。。
せっかく教えていただいたのに使いこなせなくて申し訳ありません。

お礼日時:2012/06/30 11:36

こんにちは!


VBAでの一例です。
B列を作業用の列で使用していますので、B列にデータはない!という前提です。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim k As Long
Dim str As String
Dim myArray As Variant
myArray = Split(Cells(1, 1), vbLf)
Application.ScreenUpdating = False
For k = 0 To UBound(myArray)
Cells(k + 1, 2) = myArray(k)
Next k
For k = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1
If WorksheetFunction.CountIf(Range(Cells(1, 2), Cells(k, 2)), Cells(k, 2)) > 1 Then
Cells(k, 2).Delete (xlUp)
End If
Next k
For k = 1 To Cells(Rows.Count, 2).End(xlUp).Row
str = str & Cells(k, 2) & vbCrLf
Next k
Cells(1, 1) = Left(str, Len(str) - 1)
Columns(2).ClearContents
Application.ScreenUpdating = True
End Sub 'この行まで

※ 一旦マクロを実行すると元に戻せませんので、
別Sheetでマクロを試してみてください。m(_ _)m
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
実は同じようなセルが300行以上あるんです。。。
こういう場合はマクロの方がいいかもしれませんね。

お礼日時:2012/06/29 10:02

step1)


A1セルを選ぶ
データメニュー(データタブ)から「区切り位置」を開始する
「カンマやタブで区切られた…」で次へ行き
区切り文字として「その他」にチェックを入れ,その右隣のボックスの中でCtrl+j(コントロールキーを押しながらJのキーを押す)を記入し
完了するとA1からG1に展開される。


step2)
A2に
=IF(MATCH(A1,1:1,0)=COLUMN(A1),A1&CHAR(10),"")&B2
と記入し,G2までコピー貼り付ける


step3)
A2をコピーし,形式を選んで貼り付けで値のみ貼り付けて値化する。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
同じようなセルが300行以上あるのですが、その場合もこの方法は有効でしょうか。

お礼日時:2012/06/29 10:02

[No.2]の誤謬訂正



> 4.セル C3、B4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。
> 5.セル B3 を下方にズズーッとドラッグ&ペースト。

を次のように訂正します。失礼しましたm(__)m

 4.セル C3、C4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。
 5.セル C4 を下方にズズーッとドラッグ&ペースト。
    • good
    • 0

「セル内の重複する文字列を削除」でなく、(添付図の範囲 A3:A9 から範囲 B3:B7 を得るような)「列内の重複する文字列を削除」ならお出来になるとしてハナシを進めます。

(Excel 2002 で試しました)

1.[データ]→[区切り位置]の機能で、セル A1 の内容を分解して範囲 A2:G2 を得る。
2.[形式を選択して貼り付け]の“行列を入れ替える”機能で、範囲 A3:A9 を得る。
3.列内の重複する文字列を削除」して、範囲 B3:B7 を得る。
4.セル C3、B4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。
5.セル B3 を下方にズズーッとドラッグ&ペースト。
6.セル C7 を[コピー]して、それをセル B1 に[値の貼り付け]。
ちなみに、範囲 A1:B1 は“折り返して全体を表示する”に書式設定しています。
「エクセル セル内の重複する文字列を削除す」の回答画像2
    • good
    • 0
この回答へのお礼

画像までつけてくださりありがとうございました!
期待した成果は得られましたが、実は同じようなセルが300行以上あるんです。。。

お礼日時:2012/06/29 10:00

Excel 2003では


▼操作方法:重複データを削除する
(A1セルにフィールド見出し、A2:A10セルに9個のデータが入力されているときに、重複データを削除した新たなリストをC列に作成する例)

メニュー[データ]-[フィルタ]-[フィルタオプションの設定]をクリック
 ↓
[フィルタオプションの設定]ダイアログで
 [抽出先]欄で[指定した範囲]オプションボタンをOnに
 [リスト範囲]欄で「A1:A10」セルを
 [抽出範囲]欄で「C1」セルを
 [重複するレコードは無視する]チェックボックスをOnに
設定
 ↓
[フィルタオプションの設定]ダイアログ-[OK]ボタンをクリック

厳密な言い方をすれば重複データを削除するのではなく、元のデータを残したまま重複データを除いた新たなリストを作成する方法です。


Excel 2007では重複データを削除するための、専用のコマンドが新たに作られています。

▼操作手順:重複データを削除する
データベース内の任意の一つのセルを選択
 ↓
[データ]タブ
 -[データツール]グループ
  -[重複の削除]ボタンをクリック
 ↓
[重複の削除]ダイアログで、
 削除したいデータの含まれるフィールドのチェックボックスのみOnに
 ↓
[重複の削除]ダイアログ-[OK]ボタンをクリック

上記の操作を行い、
データの削除が行われると、
「重複する××個の値が見つかり、削除されました。一意の値が○○個残っています。」
というメッセージが表示され、
重複データがなく削除されなかった場合、
「重複する値は見つかりませんでした。」
というメッセージが表示されます。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。
列方向だったせいか期待した成果にはなりませんでした。。。

お礼日時:2012/06/29 09:58

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qエクセルのセル内の重複文字列処理について

よろしくお願いいたします。
セル内にスペースで区切られた文字列(単語)があり、文字列の数は不確定です。
その文字列の中で重複する文字列があり、それらを1つにまとめたいという要望です。
セルの行数は約6000ほどあります。



A1セル:リンゴ リンゴ みかん
B1セル:リンゴ みかん
A2セル:みかん バナナ みかん バナナ みかん
B2セル:みかん バナナ
・・・

よろしくお願いいたします。

Windows7 HomePremium
Office2010

Aベストアンサー

こんばんは!
VBAになってしまいますが、一例です。

データは1行目からあるとします。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i As Long
Dim k As Long
Dim tmp As Variant
Dim myArray As Variant
Application.ScreenUpdating = False
Columns(2).ClearContents
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
tmp = WorksheetFunction.Substitute(Cells(i, 1), " ", " ")
If InStr(tmp, " ") > 0 Then
myArray = Split(tmp, " ")
For k = 0 To UBound(myArray)
If InStr(Cells(i, 2), myArray(k)) = 0 Then
Cells(i, 2) = Cells(i, 2) & myArray(k) & " "
End If
Next k
Else
Cells(i, 2) = Cells(i, 1)
End If
Next i
Application.ScreenUpdating = True
End Sub 'この行まで

こんな感じではどうでしょうか?m(_ _)m

こんばんは!
VBAになってしまいますが、一例です。

データは1行目からあるとします。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i As Long
Dim k As Long
Dim tmp As Variant
Dim myArray As Variant
Application.ScreenUpdating = False
Columns(2).ClearContents
For i = 1 To Cells(Rows.Cou...続きを読む

Q同一セル内での重複削除

同一セル内での重複削除

今手元にとあるデータがあります。
そのデータは同一セル内に「○○株式会社/■■印刷/▼▼株式会社/○○株式会社」のように、スラッシュ区切りで会社名が入っています。
このデータから、重複している会社名を削除したいと考えています。上記の例ですと「○○株式会社」が重複していますので、これを削除し「○○株式会社/■■印刷/▼▼株式会社」としたいです。
データが大量にあるので、関数を使用するよりも、マクロを使用した方が時間的にも作業量的にも楽だと思うのですが、いまいちどうやって良いか分かりません。

要約しますと、同一セル内にある重複データを削除するマクロを作れるのか、作れるならばどのようなものか、ということを教えていただきたいと思います。
また、もし削除した際に「・・・・・/」と末尾がスラッシュになった場合、最後のスラッシュだけを削除する方法も教えていただければうれしいです。
ちなみに、会社名の順序に意味はありませんので、重複したデータの1つめを削除するのか、2つめを削除するのかは気にしていません。

どなたかお願いいたします。

同一セル内での重複削除

今手元にとあるデータがあります。
そのデータは同一セル内に「○○株式会社/■■印刷/▼▼株式会社/○○株式会社」のように、スラッシュ区切りで会社名が入っています。
このデータから、重複している会社名を削除したいと考えています。上記の例ですと「○○株式会社」が重複していますので、これを削除し「○○株式会社/■■印刷/▼▼株式会社」としたいです。
データが大量にあるので、関数を使用するよりも、マクロを使用した方が時間的にも作業量的にも楽だと思うのですが、いまいちどうやって...続きを読む

Aベストアンサー

お邪魔します。

ワークシート用を兼ねた関数です。
標準モジュールに貼り付けます。

シートからは、数式として、
 =myfFiltUniq(A1,"/")
のように書きます。
 もし、
 "ABC/abc/ABC/abc"を第一引数に渡して、"ABC"だけ(最左だけ)を返す場合は、
 =myfFiltUniq(A1,"/",1)
 とします。
 第三引数を省略(規定値は0)すると"ABC/abc/ABC/abc"が返ります。
(VBAでの扱いも殆ど同じですし、むしろ易しいはずです。)
(エラーを出そうと思って使うならバグが無いでもないですが対策は省きます。)

方法は色々あると思いますが、パフォーマンス云々は抜きにして、
用途に合った-Filter()関数の使い方-をメインにした、レス、です。
(使う機会がなかなか無い↑ので、、、ここぞとばかり(^^;)

Function myfFiltUniq(ByVal Source As String, Delimiter As String, _
    Optional Compare As VbCompareMethod = vbBinaryCompare)
  Dim vArr As Variant
  Dim sTmp As String
  vArr = Split(Source, Delimiter)
  If UBound(vArr) < 1 Then
    myfFiltUniq = Source
    Exit Function
  End If
  Do
    If vArr(0) = "" Then
      vArr(0) = vbNullString
    Else
      sTmp = sTmp & Delimiter & vArr(0)
    End If
      vArr = Filter(vArr, vArr(0), False, Compare)
  Loop While -1 < UBound(vArr)
  myfFiltUniq = Mid$(sTmp, 2)
End Function


===============================================================================

お邪魔します。

ワークシート用を兼ねた関数です。
標準モジュールに貼り付けます。

シートからは、数式として、
 =myfFiltUniq(A1,"/")
のように書きます。
 もし、
 "ABC/abc/ABC/abc"を第一引数に渡して、"ABC"だけ(最左だけ)を返す場合は、
 =myfFiltUniq(A1,"/",1)
 とします。
 第三引数を省略(規定値は0)すると"ABC/abc/ABC/abc"が返ります。
(VBAでの扱いも殆ど同じですし、むしろ易しいはずです。)
(エラーを出そうと思って使うならバグが無いでもないです...続きを読む

Qエクセルで重複しているデータの抽出のしかたを教えてください。

エクセルで重複しているデータを抽出したいのですが・・。なにぶん初心者なもので簡単な方法があればよいのですが・・。
A列に日付 B列に企業名このデータが300件ほどあります。

 Å列      B列
1月 1日    AAAA社
1月 4日   BBBB社
1月 8日   CCCC社
2月 1日   BBBB社
2月20日    DDDD社
3月 2日   AAAA社

と、あるとしてB列の企業名が重複しているものを抽出したいのですが・・・。この場合 AAAA社とBBBB社ですが。
これを簡単に抽出する方法はないでしょうか?
教えてください お願いいたします。

Aベストアンサー

企業名がセルB2からセルB300まで入力されていると仮定します。
セルC2に IF(COUNTIF($B$2:B2,B2)>1,"*","") を入力し、セルC300までコピーして下さい。すると重複したデータの二番目以降に "*" のマークが付きます。
(注) 数式を下のセルまでコピーするため、COUNTIF($B$2 は絶対参照にして下さい。

QExcelで複数行にわたる一つのセルの中にある共通した文字を削除したい

Excelで複数行にわたる一つのセルの中にある共通した文字を削除したいです。どうすればよいでしょうか??

Aベストアンサー

「編集」→「置換」
検索する文字列:「削除したい文字」
置換後の文字列:「」(何も入力しない)
シート全体で削除するなら。「すべて置換」ボタンを押す。
一部のセルや行又は列の場合は範囲を選択し、反転させてから「すべて置換」

Qある範囲のセルから任意の値を検索して、その隣のセルの値を取得するという関数はありますか?

Excelの関数について質問します。
ある範囲のせるを検索して、その隣のセルの値を取得するという関数を探しています。
なければユーザー定義で作りたいと思っています。
VLOOKUP関数では一番左端が検索されますが、
それをある範囲まで拡張して、
その右隣の値を取得できるようにしたいのです。
どうかお知恵をお貸しください。

Aベストアンサー

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場合によっては、IFをかぶせてCOUNTIFで確認した方が良いかもしれません。
 ex. =IF(COUNTIF(A1:F200,X1)=1,【上記数式】,"えらー")

ちなみに、VBAでやるならこんな感じになるかと。

動作の概要
 【検査範囲】から【検査値】を探し、
 最初にHITしたセルについて、右隣のセルの値を返す。
 ex. =Sample(X1,A1:F200)

'--------------------------↓ココカラ↓--------------------------
Function Sample(ByVal 検査値 As Variant,ByVal 検査範囲 As Range)
 For Each セル In 検査範囲
  If セル = 検査値 Then Exit For
 Next セル
 Sample = セル.Offset(0, 1)
End Function
'--------------------------↑ココマデ↑--------------------------

いずれもExcel2003で動作確認済。
以上ご参考まで。

●X1セルの値を範囲A1:F200の中から探して、その右隣のセルの値を返す

 =OFFSET(A1,SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1))-1,SUMPRODUCT(COLUMN(A1:F200)*(A1:F200=X1)))

※最初のA1はワークシートの左上隅を示すものなので、検索範囲に関わらずA1固定
※SUMPRODUCT(ROW(A1:F200)*(A1:F200=X1)) ⇒ A1:F200で値がX1と一致するセルの行番号

>その「ある範囲」の中には検索したい値が入っているセルは1つしかありません。
というのが前提です。複数のセルがHITすると関係ないセルの値が返るので、
場...続きを読む

Q【エクセル】1列内に複数ある同項目を、各項目一つずつに絞る方法

お世話になります。

アクセスで各商品コードごとに、「各施設の価格一覧」
集計をとるための下準備(各コード、重複なく一つずつに
絞られたテーブルを作りたいです)として、
エクセルシート内で無秩序に複数ある各商品コードから、
それぞれ一つずつだけ列挙されたシートを作りたいです。

1万行を超えているので、「集計」でまとめても
意味がないだろうし、この場合の対応策について
皆目思い浮かばないのですが、
よろしければアドバイスいただけないでしょうか。

よろしくお願い致します。

Aベストアンサー

こんばんは。

Accessを使うのも結構なのですが、Excelでは、フィルタオプションを使います。

メニューから
[データ]-[フィルタ]-[フィルタオプションの設定]

 指定した範囲(O)
 リスト範囲(L) に範囲を入力
 抽出範囲は、適当に1つのセルを選択し、

 □重複するレコードは無視する(R)にチェック

 OK

で、ユニーク・データが取れます。

これは、ユニーク・データを取るためのExcelのデータベース機能です。

Q文字列(セル)から一部の文字だけ削除する方法

質問させて頂きます。

エクセル等で下記のような編集をしたいと考えております。

A列      A列
12345     123
67890     678
01234  ⇒  012
56789     567
98765     987

ようは、右側の2文字などを指定して削除をする方法です。

少し説明が分かり辛いかもしれませんが、もし、分かりましたら、ご教授いただければ、幸いです。

どうぞ、宜しくお願い致します。

Aベストアンサー

右側の2文字を削除するなら、セルA1に文字が入っているとき
=LEFT(A1,LEN(A1)-2)
とすれば、取り出せます。
「LEFT」関数は文字列の左側から指定文字数分取り出す関数。
「LEN」関数は、指定文字列の長さを計算してくれる関数です。
なので、左側から「文字数-2」文字取り出せば質問のとおりになります。

Qエクセルで条件に一致したセルの隣のセルを取得したい

下のような「得点」という名前のシートがあります。
(「田中」のセルがA1です。)

 [ 田中 ][ 10 ][ 200 ]
 [ 山田 ][ 21 ][ 150 ]
 [ 佐藤 ][ 76 ][ 250 ]
 [ 鈴木 ][ 53 ][ 350 ]

別のシートのA1セルに、「佐藤」と入力すると、

 [ 佐藤 ]

「得点」シートから「佐藤」の列を見つけて、B1、C1に

 [ 佐藤 ][ 76 ][ 250 ]

のように表示させたいのですが、B1、C1にはどのような式を書けば良いのでしょうか。
「得点」シートでは氏名が重複する事はありません。
IF文を使うと思うのですが、いまいち良く分かりませんでした。

よろしくおねがい致します。

Aベストアンサー

こんにちは!
VLOOKUP関数で対応できます。
IF関数と併用すればエラー処理が可能です。

Excel2007以降のバージョンであれば
B1セルに
=IFERROR(VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0),"")
としてC1セルまでオートフィルでコピー!
そのまま下へコピーすると行が2行目以降でも対応できます。

Excel2003までの場合は
=IF($A1="","",VLOOKUP($A1,得点!$A:$C,COLUMN(B1),0))

としてみてください、m(_ _)m

Qエクセルで、条件に一致した行を別のセルに抜き出す方法

エクセルで、指定した条件に一致するセルを含む行をすべて抜き出す方法が知りたいです。

たとえば、

<A列> <B列> <C列>
7/1 りんご 100円
7/2 ぶどう 200円
7/2 すいか 300円
7/3 みかん 100円

このような表があって、100円を含む行をそのままの形で、
別のセル(同じシート内)に抜き出したいのですが。

7/1 りんご 100円
7/3 みかん 100円

抽出するだけならオートフィルターでもできますが、
抽出結果を自動的に、別の場所に、常に表示させておきたいのです。

初歩的な質問だと思いますが、検索しても分からなかったので、よろしくお願いします。

Aベストアンサー

同じ質問が結構よく出てますが、そんなに初歩的でもありません
別シートのA1セルに「100円」と入力し、そのシートの任意のセルに以下の式を貼り付けて下さい。後は、下方向、右方向にコピー。
日付のセル書式は「日付」形式に再設定してください

=IF(COUNTIF(Sheet1!$C:$C,$A$1)>=ROW(A1),INDEX(Sheet1!A:A,LARGE(INDEX((Sheet1!$C$1:$C$500=$A$1)*ROW(Sheet1!$C$1:$C$500),),COUNTIF(Sheet1!$C:$C,$A$1)-ROW(A1)+1)),"")

データ範囲は500行までとしていますが、必要に応じて変更して下さい

QエクセルVBAで文字列の重複を削除する方法?

VBAでの質問でしゅ。エクセルは2000です。
変数MyStrに全角カンマで区切られた文字列データが10種類程度あります。
現在、ある条件のもとに、MyStr=MyStr & Cell(i,2) & "、"のように取り込んで、最後にMyStr=Left(MyStr, Len(MyStr) - 1) で一番最後の「、」を削除しています。

例えば、MyStrの中身は、

OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、OK建設株式会社、CC工業合資会社、DD商事有限会社、EE合名会社、株式会社BB企画

のような感じです。この中には重複したデータがある可能性があります。(例ではOK建設株式会社と株式会社BB企画)

これを重複を排除し、変数MyStrの中身を、

OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、CC工業合資会社、DD商事有限会社、EE合名会社 

と変える方法はないでしょうか?
あるいは、変数 MyStrにデータを取り込む際にすでにMyStrに入っているデータは除くような方法でもかまいません。

お知恵をお貸しくださいませ。 (o。_。)oペコッ.

VBAでの質問でしゅ。エクセルは2000です。
変数MyStrに全角カンマで区切られた文字列データが10種類程度あります。
現在、ある条件のもとに、MyStr=MyStr & Cell(i,2) & "、"のように取り込んで、最後にMyStr=Left(MyStr, Len(MyStr) - 1) で一番最後の「、」を削除しています。

例えば、MyStrの中身は、

OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、OK建設株式会社、CC工業合資会社、DD商事有限会社、EE合名会社、株式会社BB企画

のような感じです。この中には...続きを読む

Aベストアンサー

こんにちは。

#2 さんの
>素直に配列かなんかを使って重複除去プログラムをまじめに作ったほうがいいかも?

私もそうは思ったのですが、ここの掲示板では、あまりそういう雰囲気にないということと、Excel VBAでは、こういう場合は、本来、AdvancedFilter を使ってしまいます。

あえて、後学のためにこんなコードを披露しておきます。以下のコードは、いろんなコードを十分に検討していればよいのですが、これしかないというようなコードではありません。

なお、本来、Dictionary オブジェクトにセルの値から直接入れればよいです。
今回は、文字列として出来上がっているという条件の下で書きました。

Sub DictionaryMethod()
Dim objDic As Object
Dim myText As String
Dim arData As Variant
Dim i As Long
Dim v As Variant
Dim arOut As Variant
'本来はセルから取る
Const strText = "OK建設株式会社、Goo工業合資会社、MM商事有限会社、AA合名会社、株式会社BB企画、OK建設株式会社、CC工業合資会社、DD商事有限会社、EE合名会社、株式会社BB企画"
 Set objDic = CreateObject("Scripting.Dictionary")
 
 myText = WorksheetFunction.Substitute(strText, " ", "") '半角空白抜き
 arData = Split(myText, "、") 
 i = 1
 For Each v In arData
   If objDic.Exists(v) = False Then
    objDic.Add v, i 'i はダミーです。
    i = i + 1  
   End If
 Next v
 arOut = objDic.Keys
 
 '出力する方法
 Range("A1").Resize(objDic.Count).Value = WorksheetFunction.Transpose(arOut)
 Set objDic = Nothing
End Sub

こんにちは。

#2 さんの
>素直に配列かなんかを使って重複除去プログラムをまじめに作ったほうがいいかも?

私もそうは思ったのですが、ここの掲示板では、あまりそういう雰囲気にないということと、Excel VBAでは、こういう場合は、本来、AdvancedFilter を使ってしまいます。

あえて、後学のためにこんなコードを披露しておきます。以下のコードは、いろんなコードを十分に検討していればよいのですが、これしかないというようなコードではありません。

なお、本来、Dictionary オブジェクトにセル...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング