返回列表 上一主題 發帖

[發問] 保留沒有重複的欄位

謝謝大家
太感動了
luhpro 大大的程式我一開始就有試過
是完全沒問題的
只是他的程式太難~我無法消化
...
ssooi 發表於 2020-12-3 20:54

太難...... O.O
我(業餘者)的程式大都是陽春型的,
很少牽扯到簡化程式碼的部分呢.

要了解程式怎麼跑的,
有個滿不錯的功能:檢視->區域變數視窗,
善用單步模式(F8)
並把左邊有+的都點一下打開觀察每個指令對其成員及內含值的變化,
再搭配底下 即時運算視窗 用 ?變數名 來取值做確認.

Dictionary 不是太難的東西,
它有兩個部分 Item 與 key
Item=vD(key) ' 內含值 = vD(鍵值)

Cells 則是 儲存格的表示形式之一,
Range("B5")=Cells(5, 2) ' Range("儲存格位址")=Cells(列號, 欄號)

IsEmpty 函數則是檢查括弧內的值是否為空,
希望對你有所幫助.

TOP

隨意窩 "EXCEL迷"  blog  或 http://blog.xuite.net/hcm19522/twblog[img][/img]
已收集7000篇 EXCEL函數

TOP

回復 8# luhpro


我習慣用 GOTO , 它可簡化或減少些判斷,
例如:
IF A=1 AND B=2 AND C=3 THEN
  執行動作
END IF
依常理, 它要同時判斷3個, 都符合了才執行,

若分開判斷
IF A<>1 THEN GOTO 100 '這條件成立, 跳至下個迴圈, 而不須再進行B及C的判斷
IF B<>2 THEN GOTO 100
IF C<>3 THEN GOTO 100

當然也可用OR
IF A<>1 OR B<>2 OR C<>3 THEN GOTO 100
但這不確定是否要ABC都判斷完了才跳出

程式寫法, 大家都會養成個人習慣, 只要不影響程式運行效率, 大都能接受吧!!!

TOP

回復  luhpro


我習慣用 GOTO , 它可簡化或減少些判斷,
例如:
IF A=1 AND B=2 AND C=3 THEN
  執行 ...
准提部林 發表於 2020-12-4 17:23

以你所舉的例子在結構化程式會是這樣的形式:
  For ...
    If A<>1 Then  '這條件成立, 跳至下個迴圈, 而不須再進行B及C的判斷
      If B<>2 Then
        If C<>3 Then
          ......
       End If
     End If
   End If  
...
  Next

程式寫法, 大家都會養成個人習慣, 只要不影響程式運行效率, 大都能接受吧!!!

嗯......
是的, 使用適合自己的方式就可以了.

TOP

本帖最後由 n7822123 於 2020-12-5 16:04 編輯

回復 14# luhpro

如果VBA能有 VB.Net的 Continue [For | Do]  語法,一般人可能也不會用到Goto

其實我認為Goto才是最基本的語法,有學過組合語言 的人都知道,很多組合語言都沒有For、Do 迴圈

都是利用標籤跳行執行,來達成迴圈功能,我利用VBA語法來模擬組合語言寫For 、 Do迴圈的邏輯

如下程式 參考



Sub ADD100Sum()
'計算1加到100的累加值
I = 0
N = 100
迴圈:
I = I + 1
S = S + I
If I < N Then GoTo 迴圈
MsgBox "1加到" & N & "的總合= " & S
End Sub

Sub ADDTo30000up()
'計算1加到N的累加值,直到超過30000
'回傳N值
I = 0
Target = 30000
迴圈:
I = I + 1
S = S + I
If S < Target Then GoTo 迴圈
MsgBox "1加到'" & I & "'的累加值=" & S & ",剛過30000 "
End Sub
1

評分人數

程式是依需求寫的,需求表達不清楚
或者沒有上傳附件,愛莫能助

TOP

本帖最後由 luhpro 於 2020-12-8 01:58 編輯

回復 15# n7822123
一般經歷過5.25"磁碟片的人應該也都知道組合語言吧.(總覺得那些遊戲程式又小又超好玩的)
還記得那時侯瘋狂的買組合語言和Basic的書邊看邊學,(一台PC要7萬多,那時還看不到中文呢)
但我也只能算是解析過知道位元移位是甚麼概念罷了,
真要說程式設計還是有很多要學的,
這網站上可挖的寶太多了,學不完阿......

Goto 當然是最早期的基本指令.
它的應用彈性與範圍非常大,
卻也容易因為非預期運算子帶入邏輯條件而走入誤區,
所以後來高階語言才會設計出專有的迴圈指令.

像我一般都是先打好外圍成對指令再在裡面加指令, 即:
先打 Do ... While  或是 For...Next 亦或是 With...End With等,
再在中間加上指令,
好處是作用範圍不會錯,
也不會發生對應不到或不小心交錯成對指令(例 :  For ...  For...  Next...  Next)的情形.

結構化程式是較易解析判讀對想學習的人也較適合.
當然,各種方式與指令只要能善用都是很好的.

你的例子用 Do...Loop Until 迴圈就可以完成的喔:
  1. Do
  2.   I = I + 1
  3.   S = S + I
  4. Loop Until Not (I < N)
複製代碼
當然, While...Wend 迴圈也是沒問題的:
  1. While I < N
  2.   I = I + 1
  3.   S = S + I
  4. Wend
複製代碼

TOP

謝謝各位前輩
學習到非常多
謝謝

TOP

        靜思自在 : 發脾氣是短暫的發瘋。
返回列表 上一主題