Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


6071 / 13645 ツリー ←次へ | 前へ→

【47337】重複文字の削除 なた 07/3/8(木) 10:43 質問[未読]
【47338】Re:重複文字の削除 neptune 07/3/8(木) 12:18 発言[未読]
【47340】Re:重複文字の削除 なた 07/3/8(木) 13:41 発言[未読]
【47342】Re:重複文字の削除 ウッシ 07/3/8(木) 15:21 回答[未読]
【47377】Re:重複文字の削除 なた 07/3/9(金) 10:34 お礼[未読]

【47337】重複文字の削除
質問  なた E-MAIL  - 07/3/8(木) 10:43 -

引用なし
パスワード
   いつもお世話になっております。

是非アドバイスを頂きたく投稿させて頂きました。
内容を見ていただければわかるように素人です。
やりたいことは重複文字の削除です。

例)
文字A→ N10,N20,N50,N10,N100,N10,N20
文字B→ N50,N100,N10,N20


上記のような文字列Aがある場合、
N10が3つ存在し、N20が2つ存在ています。
この時に最後のN10とN20だけを残して、
文字Bを完成させたいのです。
(半角文字限定です)

素人コード的に考えるとMID関数やループを使って文字を
ちょこちょこ取得していくような方法しか考え付きません。
もっと容易に出来るようなコードはないでしょうか?。

是非アドバイスお願いいたします。

【47338】Re:重複文字の削除
発言  neptune  - 07/3/8(木) 12:18 -

引用なし
パスワード
   ▼なた さん:
こんにちは

>素人コード的に考えるとMID関数やループを使って文字を
>ちょこちょこ取得していくような方法しか考え付きません。
その方法で既に出来るということですか?
昔はその方法も珍しくなかったと思います。

>もっと容易に出来るようなコードはないでしょうか?。
コードはあるものではありません。考えて書くものです誤解のないように。

Collection,dictionary等を利用して、重複のないデータを作成する事が
できます。このサイトにも沢山利用例があると思いますので、
検索してみては?

【47340】Re:重複文字の削除
発言  なた E-MAIL  - 07/3/8(木) 13:41 -

引用なし
パスワード
   お返事ありがとうございます。

▼neptune さん:


>▼なた さん:
>こんにちは
>
>>素人コード的に考えるとMID関数やループを使って文字を
>>ちょこちょこ取得していくような方法しか考え付きません。
>その方法で既に出来るということですか?
出来ているわけではありません。
ただ、そういうやり方なら出来るだろうなあと思っていましたが、
この方法でも実業務の合間に数日間、調べてみましたが、
全然進みませんでした。恥ずかしいですけど。

>昔はその方法も珍しくなかったと思います。
>
>>もっと容易に出来るようなコードはないでしょうか?。
>コードはあるものではありません。考えて書くものです誤解のないように。
>
>Collection,dictionary等を利用して、重複のないデータを作成する事が
>できます。このサイトにも沢山利用例があると思いますので、
>検索してみては?

了解しました。
もう少しがんばって勉強してみたいと思います。

【47342】Re:重複文字の削除
回答  ウッシ  - 07/3/8(木) 15:21 -

引用なし
パスワード
   こんにちは

「最後のN10、N20を残して」という事は順番も重要なのでしょうか?
「JOIN」だと順番が狂うようなので、文字連結で誤魔化すと、
Sub test()
  Dim v   As Variant
  Dim A   As String
  Dim B   As String
  Dim i   As Long
  Dim m1Dic As Object
  
  A = "N10,N20,N50,N10,N100,N10,N20"
  v = Split(A, ",")
  If IsEmpty(v) Then Exit Sub
  Set m1Dic = CreateObject("Scripting.Dictionary")
  For i = UBound(v) To LBound(v) Step -1
    If Not IsEmpty(v(i)) Then
      If Not m1Dic.Exists(v(i)) Then
        B = v(i) & "," & B
        m1Dic(v(i)) = v(i)
      End If
    End If
  Next
  MsgBox Left(B, Len(B) - 1)
  Set m1Dic = Nothing
End Sub

「JOIN」版
Sub test1()
  Dim v   As Variant
  Dim A   As String
  Dim B   As String
  Dim i   As Long
  Dim m1Dic As Object
  A = "N10,N20,N50,N10,N100,N10,N20"
  v = Split(A, ",")
  Set m1Dic = CreateObject("Scripting.Dictionary")
  
  For i = UBound(v) To LBound(v) Step -1
    m1Dic(v(i)) = v(i)
  Next
  MsgBox Join(m1Dic.items, ",")
  Set m1Dic = Nothing
End Sub

【47377】Re:重複文字の削除
お礼  なた E-MAIL  - 07/3/9(金) 10:34 -

引用なし
パスワード
   ▼neptuneさん:
▼ウッシ さん:

アドバイスありがとうございました。
教えていただいた内容を2日かけて自分的に理解し、
やりたいことが出来ました。

本当にお世話になりました。

>こんにちは
>
>「最後のN10、N20を残して」という事は順番も重要なのでしょうか?
>「JOIN」だと順番が狂うようなので、文字連結で誤魔化すと、
>Sub test()
>  Dim v   As Variant
>  Dim A   As String
>  Dim B   As String
>  Dim i   As Long
>  Dim m1Dic As Object
>  
>  A = "N10,N20,N50,N10,N100,N10,N20"
>  v = Split(A, ",")
>  If IsEmpty(v) Then Exit Sub
>  Set m1Dic = CreateObject("Scripting.Dictionary")
>  For i = UBound(v) To LBound(v) Step -1
>    If Not IsEmpty(v(i)) Then
>      If Not m1Dic.Exists(v(i)) Then
>        B = v(i) & "," & B
>        m1Dic(v(i)) = v(i)
>      End If
>    End If
>  Next
>  MsgBox Left(B, Len(B) - 1)
>  Set m1Dic = Nothing
>End Sub
>
>「JOIN」版
>Sub test1()
>  Dim v   As Variant
>  Dim A   As String
>  Dim B   As String
>  Dim i   As Long
>  Dim m1Dic As Object
>  A = "N10,N20,N50,N10,N100,N10,N20"
>  v = Split(A, ",")
>  Set m1Dic = CreateObject("Scripting.Dictionary")
>  
>  For i = UBound(v) To LBound(v) Step -1
>    m1Dic(v(i)) = v(i)
>  Next
>  MsgBox Join(m1Dic.items, ",")
>  Set m1Dic = Nothing
>End Sub

6071 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free