- ベストアンサー
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列くらいあるので手動ではなかなかできません。 教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
A列は並べ替えて、セルB10000に =IF(A10000=A9999,B9999+0.1,0) を入れて、あとはセルB2までコピーすればVBA考えるより早いです。
その他の回答 (3)
- Ce_faci
- ベストアンサー率36% (46/127)
NO1です 返信遅れて、すいません。 どういう意味か分かりませんので、補足をお願い致します。 >B列のほうはすべて同じ値ではなくて0か1のランダムな値だったのです 同じ 0.11223 がA列にいくつかあった場合、B列には0もあれば1もあるという意味でしょうか?
お礼
0.11223 がA列にいくつかあった場合、その重複が0か1のどちらかということでした。 説明不足ですいません。 Ce_faci様に教えていただいた式とNo,2様におしえていただいた方法でできました。 ありがとうございました。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんには。 >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
お礼
ご教授ありがとうございます。 マクロを知りたかったので勉強になりました。
- cafe_au_lait
- ベストアンサー率51% (143/276)
こういうことでしょうか? 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でできるとおもいます。
お礼
ご教授ありがとうございます。 ほんとうにそうですね。B列がランダムであってもNo.1様の教えてくださった式を用いれば応用することができますね。 本当にありがとうございました。
お礼
ご教授ありがとうございます。Ce_faci様のやり方でできました。 しかし、実は私のほうの勘違いで、B列のほうはすべて同じ値ではなくて0か1のランダムな値だったのです。 その場合の方法を教えていただけないでしょうか。 重ね重ねよろしくお願いします。