• ベストアンサー

 EXCEL VBAで2列のデータでの重複抽出プログラムについて教えてください

2列のエクセルデータ(A列とB列)で、A列はA2からA10000ほどの列です。 B列はA列と1対1で対応していて、A列と同じ数だけ列があります。 A列は6桁ほどの小数ですが、頻繁に連続した重複があります。 B列はすべて0(同じ値なら0じゃなくても可)です。 教えてほしいのは、A列で連続して同じ値が続くときにそれに対応するB列に0.1ずつ加算していくプログラムです。 つまり以下のようです  A列   B列       0.11111  0         0.11182 0 0.11223   0 0.11223   0 0.11223   0 0.12373   0 0.13422  0 0.13422   0 0.13422   0 0.13422   0 0.15563   0 ↓マクロ実行後  A列     B列 0.11111 0 0.11182 0 0.11223 0 0.11223 0.1 0.11223 0.2 0.12373 0 0.13422 0 0.13422 0.1 0.13422 0.2 0.13422 0.3 0.15563 0 こんな感じにできるマクロはEXCELVBAでどうすればいいでしょうか? 列が10000列くらいあるので手動ではなかなかできません。 教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ce_faci
  • ベストアンサー率36% (46/127)
回答No.1

A列は並べ替えて、セルB10000に =IF(A10000=A9999,B9999+0.1,0) を入れて、あとはセルB2までコピーすればVBA考えるより早いです。

tahara123
質問者

お礼

ご教授ありがとうございます。Ce_faci様のやり方でできました。 しかし、実は私のほうの勘違いで、B列のほうはすべて同じ値ではなくて0か1のランダムな値だったのです。 その場合の方法を教えていただけないでしょうか。 重ね重ねよろしくお願いします。

その他の回答 (3)

  • Ce_faci
  • ベストアンサー率36% (46/127)
回答No.4

NO1です 返信遅れて、すいません。 どういう意味か分かりませんので、補足をお願い致します。 >B列のほうはすべて同じ値ではなくて0か1のランダムな値だったのです 同じ 0.11223 がA列にいくつかあった場合、B列には0もあれば1もあるという意味でしょうか?

tahara123
質問者

お礼

0.11223 がA列にいくつかあった場合、その重複が0か1のどちらかということでした。 説明不足ですいません。 Ce_faci様に教えていただいた式とNo,2様におしえていただいた方法でできました。 ありがとうございました。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.3

こんには。 >A列で連続して同じ値が続くときにそれに対応するB列に0.1ずつ加算していくプログラムです。 質問がよく分かりませんが、小数のみの加算ですか? これは、数式でも良いような気がしますが……。 #2 さんの方式のマクロ Sub TestAddFig() Dim i As Long Dim j As Long Const ADD As Double = 0.1 Application.ScreenUpdating = False With Range("A1", Range("A65536").End(xlUp))  For i = 2 To .Rows.Count   If .Cells(i - 1).Value = .Cells(i, 1).Value Then     j = j + 1    .Cells(i, 2).Value = .Cells(i, 2).Value + ADD * j  Else     j = 0   End If  Next i End With Application.ScreenUpdating = True End Sub

tahara123
質問者

お礼

ご教授ありがとうございます。 マクロを知りたかったので勉強になりました。

回答No.2

こういうことでしょうか?  A列     B列 0.11111 0 0.11182 1 0.11223 0 0.11223 0.1 0.11223 1.2 0.12373 0 0.13422 1 0.13422 0.1 0.13422 1.2 0.13422 0.3 0.15563 0 でしたら、No.1さんの式をC列に書いて(BをCにします)、C1:C10000を選択してコピー、右クリック→形式を選択して貼り付け→加算にチェック→OKでできるとおもいます。

tahara123
質問者

お礼

ご教授ありがとうございます。 ほんとうにそうですね。B列がランダムであってもNo.1様の教えてくださった式を用いれば応用することができますね。 本当にありがとうございました。

関連するQ&A