Excel VBA質問箱 IV

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

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


23045 / 76738 ←次へ | 前へ→

【59064】Re:数値を大きい順に順位を割り当てる方法について
発言  Hirofumi  - 08/11/25(火) 21:21 -

引用なし
パスワード
   「数値を大きい順に順位を割り当てる方法に」?とは、
もしかすると、Rankを割り当てる此方の方?

Option Explicit

Sub Main_2()

  Dim vntA As Variant
  Dim vntB As Variant
  Dim vntC As Variant
  Dim vntD As Variant

  vntA = 1
  vntB = 2
  vntC = 2
  vntD = 4

  MsgBox GetRank(vntA, vntB, vntC, vntD)

End Sub

Private Function GetRank(ParamArray vntData() As Variant) As String

  Dim i As Long
  Dim strData As String
  Dim vntSort As Variant
  Dim lngIndex() As Long
  Dim lngRank As Long
  
  vntSort = vntData
  
  ReDim lngIndex(UBound(vntData))
  For i = 0 To UBound(vntData)
    lngIndex(i) = i
  Next i
  
  ShellSort vntSort, lngIndex
  
  lngRank = 1
  vntSort(lngIndex(0)) = lngRank
  For i = 1 To UBound(vntSort)
    If vntData(lngIndex(i)) <> vntData(lngIndex(i - 1)) Then
      lngRank = i + 1
    End If
    vntSort(lngIndex(i)) = lngRank
  Next i
  
  For i = 0 To UBound(vntSort)
    If strData <> "" Then
      strData = strData & "&"
    End If
    strData = strData & vntSort(i)
  Next i

  GetRank = strData
 
End Function

Private Sub ShellSort(vntList As Variant, _
          lngIndex() As Long)

  Dim i As Long
  Dim j As Long
  Dim lngGap As Long
  Dim lngTmp As Long
  Dim lngTop As Long
  Dim lngEnd As Long
  
  lngTop = LBound(lngIndex, 1)
  lngEnd = UBound(lngIndex, 1)
  
  lngGap = 1
  Do While lngGap < (lngEnd - lngTop + 1) \ 3
    lngGap = 3 * lngGap + 1
  Loop
  
  Do Until lngGap <= 0
    For i = lngGap + lngTop To lngEnd
      For j = i To lngGap + lngTop Step -lngGap
        If vntList(lngIndex(j - lngGap)) <= vntList(lngIndex(j)) Then
          lngTmp = lngIndex(j - lngGap)
          lngIndex(j - lngGap) = lngIndex(j)
          lngIndex(j) = lngTmp
        Else
          Exit For
        End If
      Next j
    Next i
    lngGap = lngGap \ 3
  Loop

End Sub

0 hits

【59047】数値を大きい順に順位を割り当てる方法について まさる 08/11/24(月) 21:06 質問
【59050】Re:数値を大きい順に順位を割り当てる方法... かみちゃん 08/11/24(月) 22:33 発言
【59051】Re:数値を大きい順に順位を割り当てる方法... ponpon 08/11/24(月) 22:39 発言
【59052】Re:数値を大きい順に順位を割り当てる方法... aaa 08/11/24(月) 22:40 発言
【59061】Re:数値を大きい順に順位を割り当てる方法... Hirofumi 08/11/25(火) 19:55 発言
【59064】Re:数値を大きい順に順位を割り当てる方法... Hirofumi 08/11/25(火) 21:21 発言
【59065】Re:数値を大きい順に順位を割り当てる方法... まさる 08/11/26(水) 1:46 お礼
【59077】Re:数値を大きい順に順位を割り当てる方法... まさる 08/11/26(水) 22:04 質問
【59078】Re:数値を大きい順に順位を割り当てる方法... かみちゃん 08/11/26(水) 22:28 発言
【59079】Re:数値を大きい順に順位を割り当てる方法... Hirofumi 08/11/26(水) 22:43 回答
【59080】Re:数値を大きい順に順位を割り当てる方法... まさる 08/11/26(水) 23:08 お礼

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