返回列表 上一主題 發帖

[發問] 在方陣或矩陣中,以旋轉方式填入值

本帖最後由 no3-taco 於 2015-10-25 19:34 編輯

沒有寫得很精實,但是結果是一樣的
ps:需先點選一個足夠填滿的儲存格
  1. Sub testarr()  '從這裡執行
  2. arrX 7, 1  '7階 ,數列初始值
  3. End Sub

  4. Sub arrX(numX&, k&)
  5. Dim cx&, cy&
  6. arr = Array(0, 1, 0, -1, 0, 1)
  7. If numX <> 1 Then
  8. arrX numX - 2, k
  9.     p = (numX - 1) / 2
  10.     For i = 1 To 4
  11.         For j = 0 To numX - 2
  12.             k = k + 1
  13.             cx = ActiveCell.Row + p * arr(i - 1) + arr(i) * j - arr(i) * (p - 1)
  14.             cy = ActiveCell.Column + p * arr(i) + arr(i + 1) * j - arr(i + 1) * (p - 1)
  15.             Cells(cx, cy) = k
  16.         Next j
  17.     Next i
  18.     p = p + 1
  19. Else
  20.     ActiveCell = k
  21. End If
  22. End Sub
複製代碼
2

評分人數

TOP

回復 6# 准提部林

p = p + 1 '修改時忘記拿掉

我不是老手,只是剛剛練習寫正好有寫出來

TOP

回復 8# 准提部林

沒有寫得很好,一開始就只考慮到對稱性
但是還是有符合題目需求,貼上來讓大家指導順便修正哪裡還有問題
  1. Sub testarrX2()  '這裡執行
  2. Cells.Clear
  3. Dim n&: n = 15        '只能奇數
  4. Cells(11, 8).Select    '=>足夠填充的位置
  5. arrX2 n, n, 0         '奇數方陣 ,固定值 ,(0=>符號表式,大於0數字=>序列表示)
  6. End Sub

  7. Sub arrX2(numX&, n&, k&)
  8. Dim cx&, cy&, arr, arr2, arr3
  9. arr = Array(0, 1, 0, -1, 0, 1)
  10. arr2 = Array("┐", "┘", "└", "┌", "●")
  11. arr3 = Array("", "↓", "←", "↑", "→")

  12. If numX <> 1 Then
  13.     arrX2 numX - 2, n, k
  14.     p = (numX - 1) / 2  '(增量)位移量
  15.     For i = 1 To 4
  16.         For j = 0 To numX - 2   
  17.             cx = ActiveCell.Column + p * arr(i) + arr(i + 1) * (j - p + 1)
  18.             cy = ActiveCell.Row + p * arr(i - 1) + arr(i) * (j - p + 1)
  19.             If k = 0 Then
  20.                 If i = 1 And j = 0 Then
  21.                     Cells(cy, cx) = arr2(0)
  22.                 ElseIf i < 4 And j = numX - 2 Then
  23.                     Cells(cy, cx) = arr2(i)
  24.                 ElseIf j = numX - 2 And numX = n Then
  25.                     Cells(cy, cx) = arr2(i)
  26.                 Else
  27.                     Cells(cy, cx) = arr3(i)
  28.                 End If
  29.             Else
  30.                 k = k + 1
  31.                 Cells(cy, cx) = k
  32.             End If
  33.         Next j
  34.     Next i
  35. Else
  36.     ActiveCell = IIf(k > 0, k, "◎")
  37. End If
  38. End Sub
複製代碼
1

評分人數

TOP

        靜思自在 : 真正的愛心,是照顧好自己的這顆心。
返回列表 上一主題