2017-01-24 36 views
0

我目前有一張工作表,允許最終用戶從一組區域中進行選擇,並將子區域與其投票強度一起填充。例如從另一張表格中的值生成表決計數表

區= 5

候選人= 3

街道

Subdistrict  Vote Strength 
    U     456 
    E     442 
    R     876 
    T     312 
    B     256 
    S     643 

我想創建一個按鈕,它可以讓最終用戶創建將填充基於關閉一個附加片的地區選擇中的價值觀。新創建的工作表將創建各種「投票」。在第一片材,他們會指示候選的數目和新的片材將填充類似於此

  U E R T B S 

候選人1
候選人2
候選3

最終用戶將輸入投票(0到4之間的一個數字),它將乘以表1中的投票強度,生成一個加權投票計算器,該計算器根據某個分區具有的小區數量來擴大或縮小。

邏輯將基本上是:

  • 創建一個新的片
  • 平鋪添加列標題對於每個街道在片材1和在片材添加行爲候選的總數1
  • 作爲原料票輸入表2中創建的表格中的鏡像表格,並以原始投票計算得出
+0

我100%肯定的解決方案是VBA - 而且由於我在VBA方面還沒有很多的經驗,所以對潛在解決方案的鏈接和信息也會很有用。我不介意研究,只需要指出去哪裏的正確方向。 – LearnWorkLearn

+0

District = 5是做什麼的?並且總是有6個分區? –

+0

這只是從最終用戶選擇的數據驗證列表填充的單元值。所有地區的街區數量都會有所不同。 – LearnWorkLearn

回答

1

更新循環以顯示公式,而不是斷碼從非工作代碼工作代碼:

For m = 2 To i + 2 

    Cells(CandidateCount + 1, m).Formula = _ 
    "=SUM(" & ActiveSheet.Range(ActiveSheet.Cells(2, m), ActiveSheet.Cells(CandidateStart, m)).Address(False, False) & ")" 

Next m 
+0

從技術上講,這隻能通過總結單元格的當前內容,而不是通過插入公式來動態地總結單元格內容以應對變化。試圖避免這種情況只需要一次性單擊並運行腳本以形成新的電子表格。有沒有辦法將實際公式注入單元格? – LearnWorkLearn

+0

我已經更新了代碼來顯示公式。 –

0

因此,感謝@VBA Pete讓我對正確的軌道,我設法創造了基本的功能。我現在被困在這一步

爲原料票數進入,從表2中創建的表鏡像表產生與計算

我需要完成兩件事情生投票多一步:

1.在For循環中爲列範圍創建數據驗證要求,該範圍不允許比實際存在的人計數更多的原始投票。我將它存儲在以下代碼中作爲MembersPresent的變量中。
2.在之後填入加權投票記錄最終用戶輸入。 這可以通過使用變量在For循環內的單元格中插入動態公式來實現。我下面分隔

Private Sub CommandButton1_Click() 
    ActiveWorkbook.Sheets.Add Before:=Worksheets(Worksheets.Count) 
    i = Sheet1.Cells(8, 6).Value 
    CandidateCount = Sheet1.Cells(11, 8).Value 
    CandidateState = CandidateCount + 1 
    SheetName = Sheet1.Cells(13, 8).Value 
    OrSheetName = Sheet1.Cells(13, 8).Value 
    v = 0 
    For Each Sheet In Worksheets 
     If SheetName = Sheet.Name Then 
      SheetName = OrSheetName & "_Ballot" & v 
      v = v + 1 
     End If 
    Next Sheet 
    ActiveSheet.Name = SheetName 
    For x = 1 To i 
    b = 15 + x 
     Subdistrict = Cells(b, 2).Value 
     MembersPresent = Cells(b, 6).Value 
     ActiveSheet.Cells(1, (x + 1)).Value = Subdistrict 
     For a = 2 To 6 
      ActiveSheet.Cells(a, x + 1).Value = 0 
      With ActiveSheet.Range(ActiveSheet.Cells(a, x + 1), ActiveSheet.Cells(a, x + 1)).Validation 
       .Add Type:=xlValidateWholeNumber, _ 
       AlertStyle:=xlValidAlertStop, _ 
       Operator:=xlBetween, Formula1:="0", Formula2:=MembersPresent 
       .InputTitle = "Integers" 
       .ErrorTitle = "Integers" 
       .InputMessage = "Enter an integer from 0 to " & MembersPresent 
       .ErrorMessage = "You must enter a number no less than 0 and no greater than the number of members in attendance: " & MembersPresent 
      End With 
     Next a 
    Next x 
    For b = 1 To CandidateCount 

     Named = "Candidate Name" & " " & b 
     ActiveSheet.Cells((b + 1), 1).Value = Named 
    Next b 
    ActiveSheet.Cells(CandidateCount + 1, 1).Value = "Raw Vote Totals" 

看起來像什麼,我想我要

For m = 2 To i + 2 
      SumRange = ActiveSheet.Range(ActiveSheet.Cells(2, m), ActiveSheet.Cells(CandidateStart, m)).Select 
      ActiveSheet.Cells(CandidateCount + 1, m).Formula = "=SUM(" & SumRange & ")" 
     Next m 
+1

你能舉兩個例子嗎? –

+0

查看修改,我更新了代碼並顯示了破損的代碼 – LearnWorkLearn

+0

剛發佈了一個答案。讓我知道如果修復你的代碼。 –

相關問題