質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.51%

  • VBA

    1798questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

VBAを使い、表よりデータを抽出して重複を削除したい

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 210

yuusu

score 4

 前提・実現したいこと

はじめまして、VBAに関してご質問いたします。
素人なのでへんな質問でしたら申し訳ございません。

EXCEL表よりA列B列の値を抽出してA列をキーにして
キーの重複を排除して、B列の値を追記していきたいのですが
やり方が全く分かりません。
ちなみにやりたいことは以下のようなことです

KEY    DATE     
りんご    10
みかん    12
もも    8
ぶどう    11
みかん    9
ぶどう    14
もも    7
りんご    13

りんご 10,13
みかん 12,9
もも 8,7
ぶどう 11,14 

ヒントだけでもお教え願えませんでしょうか
申し訳ありませんがよろしくお願いします。

 試したこと

インターネットで検索いたしましたが全く分かりませんでした

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • sazi

    2018/06/24 14:01

    エクセルのバージョンは何ですか?

    キャンセル

  • yuusu

    2018/06/24 17:54

    2013です

    キャンセル

回答 3

checkベストアンサー

+1

VBAて重複排除をする場合は、Dictionaryオブジェクトを使うのが定番ですね。

出力先が不明ですか、同じシートのD列E列に出力するとして、下記のような感じでどうですか。

Public Sub Test()
    Dim dic As Object, r(), i As Long

    Set dic = CreateObject("Scripting.Dictionary")
    r = Range("A1").CurrentRegion.Value '元データを配列に格納

    For i = 1 To UBound(r)
        If dic.Exists(r(i, 1)) Then
            dic(r(i, 1)) = dic(r(i, 1)) & "," & r(i, 2)
        Else
            dic(r(i, 1)) = r(i, 2)
        End If
    Next

    Range("D1").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.Keys)
    Range("E1").Resize(dic.Count, 1).Value = WorksheetFunction.Transpose(dic.Items)
End Sub

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/24 17:50

    ご回答ありがとうございます。
    出力に関してもう一点ご質問がございます。
    出力先をC列の同じセルとして前後に文字列を入れたいと思っています

    今年の”りんご”は”10,13”です

    このように文字列+変数1+文字列+変数2+文字列のようにできますでしょうか

    キャンセル

  • 2018/06/24 19:33

    ご回答ありがとうございました。
    上の質問は何とかなりそうなので気にしないでください。
    ソースコードを参考にいたします。

    キャンセル

0

アウトプットのレイアウト詳細もほしいですね。
例えば、
|A列|B列|
|KEY|DATE|
|りんご|10|
|りんご|13|
の場合は重複対象だと思うのですが、
B列の10及び13はどういうレイアウトで出力しようとしているのでしょうか。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/24 17:18

    アウトプットは
    |KEY|DATE|
    |りんご|10|りんご 10,13
    |りんご|13|みかん 12,9
    |みかん|12|
    |みかん|9|
    .
    .
    .

    のようにC列のセル内に出力したいと思っています

    キャンセル

  • 2018/06/24 17:39

    でしたら下記のhatena19さんの回答ソースから、出力先セルいじればいけちゃいますね頑張ってください。

    キャンセル

0

VBAなど不要。そう、シェル芸ならね!

$ cat list
りんご 10
みかん 12
もも 8
ぶどう 11
みかん 9
ぶどう 14
もも 7
りんご 13
$ cat list|awk 'a[$1]{$2=","$2}{a[$1]=a[$1]$2}END{for(i in a){print i,a[i]}}'
みかん 12,9
もも 8,7
ぶどう 11,14
りんご 10,13

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/24 17:20

    ご回答ありがとうございます。
    今回はVBAで作成しようと思いますので、
    シェルで作成する際は参考にさせていただきます。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.51%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    【VBA】ファイルの読み込み、ファイルの名前取得

    23歳OLです。プログラミング初心者です。 ご質問させていただきます。 ▼やりたいこと ======================== ・選択したファイルの中身を一行ずつ取り

  • 解決済

    VBA 画像のセル内中央挿入

    画像挿入を 指定セル内&中央揃え にしたいです。 こちらのコードでセル内の左揃えになります。 こちらを中央揃えにするにはどうすればよいのでしょう。 教えていただけたら幸いです。よ

  • 解決済

    input type text へ文字列を入れる

    Private Sub CommandButton2_Click()     Dim ie As InternetExplorer     Dim txtInput As HTM

  • 受付中

    PowerPoint ファイルの結合方法

    フォルダの中にある多数のPPTファイルについて、各PPTファイルの全てのスライドを結合して新しいPPTファイルを作成したいと考えています。 色々とWEB上で探して、下記サイトが参

  • 受付中

    VBAを使ってDir関数の入れ子作業をしたい

    AとBというフォルダには複数のエクセルファイルが入っていて、それぞれのファイルは A1,A2,A3,A4,... B1,B2,B3,B4,... のようになっています。フォルダAと

  • 解決済

    Excel vbaの振り分けについての質問

    excelのvbaに関しての質問です。 以下は、A列の要素を4つに適当に分け、B列〜E列に表示するプログラムです。 このプログラムを、 ・B10〜Cells(Rows.Count

  • 受付中

    ExcelVBA、データの抽出方法

    Excel VBA初心者です。 施設コード人名    識別種類    2015/7/1    2015/7/2    2015/7/3     K1        a    9:

  • 解決済

    vbaで、エクセル上の入力データを集計し、配列にしたいです。

    現在エクセルのVBAを勉強をしています。 エクセル上に入力された情報を集計し、配列に入れたいです。 A列が担当者コード、B列が4月のある数値データーで、tanという担当者配列と、a

同じタグがついた質問を見る

  • VBA

    1798questions

    VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。