彰化一整天的論壇

 找回密碼
 立即註冊
查看: 159|回復: 13

VBA矩陣問題

[複製鏈接]
發表於 2019-6-13 10:25:54 | 顯示全部樓層 |閱讀模式
老師你好
我有個問題有關於VBA矩陣問題,想請教老師如何撰寫

[size=13.3333px]問題如下圖所示,希望最後呈現結果如K欄與M欄,基本上問題就是
[size=13.3333px]利用B欄內的條件依序判斷,

[size=13.3333px]1.        B2=B3,則K2=A2 與 M2=A3
[size=13.3333px]2.        B2=B4,則K3=A2 與 M3=A4
[size=13.3333px]3.        B2=B5,則K4=A2 與 M4=A5
[size=13.3333px]4.        B2<>B6則往下跳至B3[size=13.3333px]儲存格[size=13.3333px]進行作業
[size=13.3333px]5.        B3=B4, 則K5=A3 與 M5=A4
[size=13.3333px]6.        B3=B5, 則K6=A3 與 M6=A5
7       [size=13.3333px]B3=B2, 則K7=A3 與 M6=A2
[size=13.3333px]8.        B3<>B6則往下跳至B4儲存格進行作業

測試.rar (6.96 KB, 下載次數: 16)
回復

使用道具 舉報

發表於 2019-6-13 14:12:46 | 顯示全部樓層
您好,
     您這個要用二個迴圈來解決,若已知筆數可以用for,未知筆數用while迴圈,
第二個迴圈就用if來判斷,您可試著寫看看,有問題可以再討論。
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2019-6-13 14:50:11 | 顯示全部樓層
老師:
初學者~~,有點困難~~
回復 支持 反對

使用道具 舉報

發表於 2019-6-13 16:07:53 | 顯示全部樓層
peter631114 發表於 2019-6-13 14:50
老師:
初學者~~,有點困難~~

您的第7點紅色的規則是什麼?
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2019-6-13 16:55:49 | 顯示全部樓層
謝謝老師的回覆,
我再重新描述問題,請參考如下
類別        判斷條件                判斷的方法               
A        0                               
B        0                B2=B2        不做動作       
C        0                B2=B3,則K2=A2與M2=A3               
D        0                B2=B4,則K3=A2與M3=A4               
F        1                B2=B5,則K4=A2與M4=A5               
G        1                                B2<>B6,則從B3儲存格開始判斷
H        1                B3=B2,則K5=A3,M5=A2               
I        1                B3=B3        不做動作       
J        2                B3=B4,則K6=A3,M6=A4               
K        2                B3=B5,則K7=A3,M7=A5               
L        2                                B3<>B6,則從B4儲存格開始判斷
                        B4=B2,則K8=A4,M8=A2               
                        B4=B3,則K8=A4,M8=A3               
                        B4-=B4        不做動作       
                        B4=B5,則K8=A4,M8=A5               
                                        B4<>B6,則從B5儲存格開始判斷
                               
回復 支持 反對

使用道具 舉報

 樓主| 發表於 2019-6-13 17:27:52 | 顯示全部樓層
Snap1.jpg
回復 支持 反對

使用道具 舉報

發表於 2019-6-13 17:43:12 | 顯示全部樓層
本帖最後由 imingho 於 2019-6-13 19:30 編輯

您好,
     我目前做到D是OK.F以後的規則,可以再說明一下.
excel_20190613_01.jpg

1.目前執行結果



  1. Private Sub cmdGo_Click()
  2.     Dim i As Integer, j As Integer
  3.     Dim n As Integer
  4.    
  5.     n = 2
  6.    
  7.     For i = 2 To 10
  8.         Debug.Assert i <> 6
  9.         For j = 2 To 10
  10.             If i <> j Then
  11.                 If Range("B" & i).Value = Range("B" & j).Value Then
  12.                     Range("K" & n).Value = Range("A" & i).Value
  13.                     Range("M" & n).Value = Range("A" & j).Value
  14.                     n = n + 1
  15.                 Else
  16.                     Exit For
  17.                 End If
  18.             End If
  19.         Next
  20.    
  21.     Next
  22. End Sub
複製代碼


測試1.xls

37 KB, 下載次數: 1

售價: 1 金錢  [記錄]  [購買]

回復 支持 反對

使用道具 舉報

發表於 2019-6-13 20:03:19 | 顯示全部樓層

底下是我依您的規則所做出來的結果
excel20190613_01.jpg




  1. Private Sub cmdGo_Click()
  2.     Dim i As Integer, j As Integer, k As Integer
  3.     Dim n As Integer
  4.    
  5.     n = 2
  6.    
  7.     k = 2
  8.    
  9.     m = 12  '資料最多列號
  10.    
  11.    
  12.    
  13.     For i = 2 To m
  14.         If Range("B" & i).Value <> Range("B" & i - 1) Then
  15.             k = i
  16.         End If
  17.         For j = k To m
  18.             If i <> j Then
  19.                 If Range("B" & i).Value = Range("B" & j).Value Then
  20.                     Range("K" & n).Value = Range("A" & i).Value
  21.                     Range("M" & n).Value = Range("A" & j).Value
  22.                     n = n + 1
  23.                 Else
  24.                     Exit For
  25.                 End If
  26.             End If
  27.         Next

  28.     Next
  29. End Sub
複製代碼



測試1.xls

38.5 KB, 下載次數: 1

售價: 1 金錢  [記錄]

回復 支持 反對

使用道具 舉報

 樓主| 發表於 2019-6-14 13:56:30 | 顯示全部樓層
Dear老師
謝謝~~我去執行程式,基本上是正常的,目前資料最多列(m=12),若我希望程式自動判斷A欄位並讓
M=A欄位總數,請問該如何修改
目前是用COUTA方式,先去計算,然後再填入,請參考附件 0614_程式OK1.rar (127.94 KB, 下載次數: 14)
回復 支持 反對

使用道具 舉報

發表於 2019-6-14 18:37:05 | 顯示全部樓層
peter631114 發表於 2019-6-14 13:56
Dear老師
謝謝~~我去執行程式,基本上是正常的,目前資料最多列(m=12),若我希望程式自動判斷A欄位並讓
M=A欄 ...

程式碼修改如下
  1. Private Sub cmdGo_Click()

  2.     Dim i As Integer, j As Integer, k As Integer
  3.     Dim n As Integer
  4.     Dim x As Integer
  5.    
  6.    ' x = InputBox("請輸入欄位數")
  7.    
  8.     n = 2
  9.    
  10.     k = 2
  11.    
  12.     m = Excel.Application.WorksheetFunction.CountA(Range("A:A"))
  13.    
  14.    
  15.    
  16.     For i = 2 To m
  17.         If Range("B" & i).Value <> Range("B" & i - 1) Then
  18.             k = i
  19.         End If
  20.         For j = k To m
  21.             If i <> j Then
  22.                 If Range("B" & i).Value = Range("B" & j).Value Then
  23.                     Range("K" & n).Value = Range("A" & i).Value
  24.                     Range("M" & n).Value = Range("A" & j).Value
  25.                     n = n + 1
  26.                 Else
  27.                     Exit For
  28.                 End If
  29.             End If
  30.         Next

  31.     Next
  32. End Sub
複製代碼


0614_程式OK11.xls

498.5 KB, 下載次數: 1

售價: 1 金錢  [記錄]

回復 支持 反對

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即註冊

本版積分規則

 ㄚ母滴雞湯
 員林香純滴雞精

Archiver|手機版|小黑屋|彰化一整天的論壇(Excel,Office)  |网站地图

GMT+8, 2019-7-21 12:16 , Processed in 0.124157 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表