0

私の州のすべての代表者を1つの列にリストし、彼らが代表する郡を別の列にリストするワークシートがあります。それらのいくつかは1つの郡を表しますが、他のセルには複数の郡があります(一部のセルには「AおよびB」と表示され、その他のセルには「A、B、およびC」が表示されます)。

別のワークシートに、1つの列にすべての郡のリストがあり、2番目の列には特定の病気と診断された人の数、3番目の列にはその病気で生活しているその郡の合計人の数があります。

基本的に、これらをマージして、次のようなものにすることができるようにしたいと思います。

列1:ジョンスミス

列2:CountyX、CountyY、およびCounty Z

列3:389(診断された数の2番目のワークシートで見つかった3つの郡の値すべてを合計)

列4:4392(2番目のワークシートで見つかった3つの郡の値の合計)

最初のワークシート(各代表者が表す国)の2番目の列を利用して、2番目のワークシートの値を自動的に参照し、それらを合計して、各代表者にその下のケースの総数を与える方法はありますか?

もちろん、手動で行うこともできます。ただ、来年も簡単に交換できるようにしたいと思います。

4

1 に答える 1

0

私の直感は、VBAを使用して列2を取得し、リストを展開し、ワークシート2で列2から取得した値を検索し、列3で数式を作成して、シート2にある値を参照することです。列4についても同じです。お気に入り:

Sub Stuff()
    Dim numberOfReps As Integer
    Dim numberOfCounties As Integer
    numberOfReps = 20
    numberOfCounties = 25

    Dim i As Integer
    Dim counties As String
    Dim diagnosedEquation As String
    Dim livingEquation As String
    Dim rawVal As String

    For i = 1 To numberOfReps
        rawCounties = Sheets("Sheet1").cells(i, 2).Value
        countiesArray = Split(rawCounties, ", ")

        For j = 1 To numberOfCounties
            rawVal = Sheets("Sheet2").cells(j, 1).Value
            If (ListContains(rawVal, countiesArray)) Then
                If (livingEquation = "") Then
                    livingEquation = "=SUM(Sheet2!C" & j
                Else
                    livingEquation = livingEquation & "+Sheet2!C" & j
                End If
                If (diagnosedEquation = "") Then
                    diagnosedEquation = "=SUM(Sheet2!B" & j
                Else
                    diagnosedEquation = diagnosedEquation & "+Sheet2!B" & j
                End If
            End If
        Next j

        If (Not diagnosedEquation = "") Then diagnosedEquation = diagnosedEquation & ")"
        If (Not livingEquation = "") Then livingEquation = livingEquation & ")"

        Sheets("Sheet1").cells(i, 3).Value = diagnosedEquation
        Sheets("Sheet1").cells(i, 4).Value = livingEquation
        diagnosedEquation = ""
        livingEquation = ""
    Next i
End Sub

Private Function ListContains(needle As String, haystack As Variant)
    For Each straw In haystack
        If (needle = straw) Then ListContains = True
    Next straw
End Function

私はこれをテストしました、そしてそれはものを要約します。シート名(またはインデックス)など、セットアップに合わせて少し調整する必要があります。

于 2013-02-02T04:29:38.300 に答える