Excel VBA質問箱 IV

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

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


7124 / 76732 ←次へ | 前へ→

【75199】Re:複数の異なる値を取り込んで、順に処理したいです
発言  kanabun  - 14/1/7(火) 14:56 -

引用なし
パスワード
   ▼初心者M さん:

 A列  B列
>5100 A
>7600 イ
>6800 イ
>
>などのようなデータが数行に渡って存在する表で、同じ「イ」なら大きい数の7600に合わせる、というような処理をしたいです。
>「A」や「イ」などの記号は、無作為に数パターン存在します。

>参考までに、記号が無作為でなく、「A」と決め打ちであれば、下のコードで動きます。
その考え方でいいとおもいますよ。

簡単のため、表は A列、B列だけの構成と考えます。

以下は、「A」だけでなく、複数のキーワードに対応するために、
Dictionaryオブジェクトを使って複数キーワードを登録できるように
したものです。
あるキーワードがまだ辞書に登録されていなければ、そのキーワードと
その行のA列の数値を「組データ」として登録しておきます。
すでに登録済みのキーワードが出てきたら、その行のA列の数値を 現在登録
されている数値と比較して、これより大きいときだけ、そのキーの数値を更新
します。
これを最後の行まで繰り返すと、キーワードごとに数値の最大値の入った配列
ができますので、
最後にもとのA列をこの配列で上書きしてやります。

Sub test()
  Dim a, b
  Dim i As Long
  Dim r As Range
  Dim dic As Object
  Set dic = CreateObject("Scripting.Dictionary")
  
  Set r = Range("A6", Range("A6").End(xlDown))
  a = r.Value       'A列の値
  b = r.Offset(, 1).Value 'B列の値
  For i = 1 To UBound(b)
    If Not dic.Exists(b(i, 1)) Then
      dic(b(i, 1)) = a(i, 1)
    ElseIf dic(b(i, 1)) > a(i, 1) Then
      dic(b(i, 1)) = a(i, 1)
    End If
  Next
  For i = 1 To UBound(b)
    a(i, 1) = dic(b(i, 1))
  Next
  r.Value = a
  
End Sub
265 hits

【75198】複数の異なる値を取り込んで、順に処理したいです 初心者M 14/1/7(火) 10:38 質問
【75199】Re:複数の異なる値を取り込んで、順に処理... kanabun 14/1/7(火) 14:56 発言
【75201】Re:複数の異なる値を取り込んで、順に処理... 初心者M 14/1/7(火) 15:29 お礼
【75202】Re:複数の異なる値を取り込んで、順に処理... 初心者M 14/1/7(火) 15:54 お礼
【75203】Re:複数の異なる値を取り込んで、順に処理... kanabun 14/1/7(火) 17:05 発言
【75204】Re:複数の異なる値を取り込んで、順に処理... 初心者M 14/1/7(火) 17:28 お礼

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