2021-9-20 第二次更新
2015年11月19日 星期四
2015年11月16日 星期一
2015年11月14日 星期六
Excel VBA抓取儲存格內不同顏色部分字串
搜尋顏色標為紅色的字串,並將抓取字串相加後存在另一個表
PS:
Sub CHECK_CONTENT_LENGTH_SEPERATE()
--這個sub 是將同一個儲存格抓到的連續字串次數 逐次 複製在 另一個表的幾個欄位
諸位使用以下便可
Sub CHECK_CONTENT_LENGTH_TOGETHER()
(智慧財產權, 轉用者請獲得原作者同意後方可使用,
並標注出處 與 本文超連結)
'''''程式碼如下
''程序
''將鼠標點擊域搜尋的工作表(worksheet)
''由 sub 新增工作表執行
'''
'''***************************************************************
Sub 新增工作表()
Dim 可新增 As Boolean
''判斷新增工作表是否存在, 無則增加
可新增 = True
'MsgBox "原始可新增=" & 可新增
新增工作表名稱 = "不用新增"
MsgBox "目前工作表 " & ActiveSheet.Name
目前工作表 = ActiveSheet.Name
For k = 1 To Worksheets.Count
If Worksheets(k).Name = ActiveSheet.Name & "(簡化)" Then
可新增 = False
End If
'MsgBox k & " ws.Name=" & Worksheets(k).Name
'MsgBox "結果=" & 可新增
Next k
If 可新增 = True Then
新增工作表名稱 = ActiveSheet.Name & "(簡化)"
Set NewSheet = Worksheets.Add
NewSheet.Name = 新增工作表名稱
Worksheets(目前工作表).Activate
End If
MsgBox "新增工作表名稱=" & 新增工作表名稱
'''MsgBox 新增工作表
Call CHECK_CONTENT_LENGTH_TOGETHER
End Sub
Sub CHECK_CONTENT_LENGTH_TOGETHER() ' 判斷儲存格字元數,並累加紅色字串
Dim 字串長度 As Long
Dim 連續紅色字串 As String
Dim 相對列位 As Integer
Dim 可新增 As Boolean
Dim 新增工作表 As String
新增工作表 = ActiveSheet.Name & "(簡化)"
原工作表 = ActiveSheet.Name
連續紅色字串 = ""
字串數 = 0
'
''K是欄位 號
For j = 1 To 20 ''''' 列編號 外圈 用以一列掃描完 後 換下一列
For k = 1 To 6 ''''欄編號 偵測是否有在那個欄位
字串長度 = 0
'MsgBox "儲存格" & j & " : " & K & " : " & 字串長度 & ActiveCell.Text
'MsgBox "字串長度=" & 字串長度
字串長度 = Len(Worksheets(原工作表).Cells(j, k))
Worksheets(原工作表).Cells(j, k).Activate
Debug.Print "儲存格" & j & " : " & k & " : " & "字串長度=" & 字串長度 & "內容=" & Cells(j, k)
連續紅色字串 = ""
If 字串長度 > 0 Then
For i = 1 To 字串長度 ''' I 變數 用以逐字偵測 紅色 字元
' Debug.Print "第" & I & "字元=" & ActiveCell.Characters(I, 1).Font.Color
' MsgBox "第" & I & "字元=" & ActiveCell.Characters(I, 1).Text & " ;顏色" & ActiveCell.Characters(I, 1).Font.Color
''''''A 段 ''' ' 判段字串顏色=5 ,並累加字串
Worksheets(原工作表).Cells(j, k).Activate
If ActiveCell.Characters(i, 1).Font.Color = 255 Then
連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(i, 1).Text
Debug.Print "連續紅色字串 中間=" & i & 連續紅色字串
'MsgBox "連續紅色字串=" & 連續紅色字串
'Debug.Print 連續紅色字串
End If
'''''''A尾''''''''''''''
''''B段'''''''最後一個字元是紅色,直接印出
If i = 字串長度 Then
''''''''''''''''''''''''''''''相對列位 = ActiveCell.Row
'''''' ' 字串數 = 字串數 + 1 ''''''''''''''
''''''''''''''''Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
''''''''''''''''連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(I, 1).Text
Worksheets(新增工作表).Cells(j, k).Value = 連續紅色字串
Debug.Print "連續紅色字串 結尾=" & i & 連續紅色字串
連續紅色字串 = ""
End If
Next i
End If
'相對列位 = ActiveCell.Row
''Worksheets(新增工作表).Cells(J, k) = 連續紅色字串
'MsgBox "連續紅色字串=" & 連續紅色字串
Next k
Next j
End Sub
Sub CHECK_CONTENT_LENGTH_SEPERATE() ' 判斷儲存格字元數,並累加紅色字串 次數
Dim 字串長度 As Integer
Dim 連續紅色字串 As String
Dim 相對列位 As Integer
Dim 可新增 As Boolean
新增工作表 = ActiveSheet.Name & (簡化)
連續紅色字串 = ""
字串數 = 0
'ActiveCell.Characters.Count
字串長度 = ActiveCell.Characters.Count
MsgBox "字串長度=" & 字串長度
For i = 1 To 字串長度
' Debug.Print "第" & I & "字元=" & ActiveCell.Characters(I, 1).Font.Color
' MsgBox "第" & I & "字元=" & ActiveCell.Characters(I, 1).Text & " ;顏色" & ActiveCell.Characters(I, 1).Font.Color
If ActiveCell.Characters(i, 1).Font.Color = 255 Then ' 判段字串顏色=5 ,並累加字串
連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(i, 1).Text
'MsgBox "連續紅色字串=" & 連續紅色字串
Debug.Print 連續紅色字串
End If
If ActiveCell.Characters(i, 1).Font.Color = 255 And i = 字串長度 Then
相對列位 = ActiveCell.Row
字串數 = 字串數 + 1 ''''''''''''''
Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
連續紅色字串 = ""
End If
If ActiveCell.Characters(i, 1).Font.Color <> 255 Then
相對列位 = ActiveCell.Row
字串數 = 字串數 + 1 ''''''''''''''''''
Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
連續紅色字串 = ""
End If
Next i
'MsgBox "連續紅色字串=" & 連續紅色字串
End Sub
************************
可能遇到的困難
1.Mac 顏色與MS 顏色編碼可能不同,所以設定顏色可能會變,字元碼也會不同
==>可以利用即時視窗輸入 來確認顏色碼 (列與欄位根據自己的文本內容)
print cells(11,3).text
答:
print cells(11,3).font.color
255
2.老是忘記 用 來驅動 目前工作欄
Worksheets(原工作表).Cells(j, k).Activate
3.判斷每個字顏色 (關鍵技巧,找了很多網頁沒有現成的全文判別)
字串長度 作為 迴圈 來進行 每個字確認
使用到 activecell.characters(start , length).font.color
4.最後一個字如還是紅色 則必須判別是否為最後一個字元,否則不會印出
**********************************
PS:
Sub CHECK_CONTENT_LENGTH_SEPERATE()
--這個sub 是將同一個儲存格抓到的連續字串次數 逐次 複製在 另一個表的幾個欄位
諸位使用以下便可
Sub CHECK_CONTENT_LENGTH_TOGETHER()
(智慧財產權, 轉用者請獲得原作者同意後方可使用,
並標注出處 與 本文超連結)
'''''程式碼如下
''程序
''將鼠標點擊域搜尋的工作表(worksheet)
''由 sub 新增工作表執行
'''
'''***************************************************************
Sub 新增工作表()
Dim 可新增 As Boolean
''判斷新增工作表是否存在, 無則增加
可新增 = True
'MsgBox "原始可新增=" & 可新增
新增工作表名稱 = "不用新增"
MsgBox "目前工作表 " & ActiveSheet.Name
目前工作表 = ActiveSheet.Name
For k = 1 To Worksheets.Count
If Worksheets(k).Name = ActiveSheet.Name & "(簡化)" Then
可新增 = False
End If
'MsgBox k & " ws.Name=" & Worksheets(k).Name
'MsgBox "結果=" & 可新增
Next k
If 可新增 = True Then
新增工作表名稱 = ActiveSheet.Name & "(簡化)"
Set NewSheet = Worksheets.Add
NewSheet.Name = 新增工作表名稱
Worksheets(目前工作表).Activate
End If
MsgBox "新增工作表名稱=" & 新增工作表名稱
'''MsgBox 新增工作表
Call CHECK_CONTENT_LENGTH_TOGETHER
End Sub
Sub CHECK_CONTENT_LENGTH_TOGETHER() ' 判斷儲存格字元數,並累加紅色字串
Dim 字串長度 As Long
Dim 連續紅色字串 As String
Dim 相對列位 As Integer
Dim 可新增 As Boolean
Dim 新增工作表 As String
新增工作表 = ActiveSheet.Name & "(簡化)"
原工作表 = ActiveSheet.Name
連續紅色字串 = ""
字串數 = 0
'
''K是欄位 號
For j = 1 To 20 ''''' 列編號 外圈 用以一列掃描完 後 換下一列
For k = 1 To 6 ''''欄編號 偵測是否有在那個欄位
字串長度 = 0
'MsgBox "儲存格" & j & " : " & K & " : " & 字串長度 & ActiveCell.Text
'MsgBox "字串長度=" & 字串長度
字串長度 = Len(Worksheets(原工作表).Cells(j, k))
Worksheets(原工作表).Cells(j, k).Activate
Debug.Print "儲存格" & j & " : " & k & " : " & "字串長度=" & 字串長度 & "內容=" & Cells(j, k)
連續紅色字串 = ""
If 字串長度 > 0 Then
For i = 1 To 字串長度 ''' I 變數 用以逐字偵測 紅色 字元
' Debug.Print "第" & I & "字元=" & ActiveCell.Characters(I, 1).Font.Color
' MsgBox "第" & I & "字元=" & ActiveCell.Characters(I, 1).Text & " ;顏色" & ActiveCell.Characters(I, 1).Font.Color
''''''A 段 ''' ' 判段字串顏色=5 ,並累加字串
Worksheets(原工作表).Cells(j, k).Activate
If ActiveCell.Characters(i, 1).Font.Color = 255 Then
連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(i, 1).Text
Debug.Print "連續紅色字串 中間=" & i & 連續紅色字串
'MsgBox "連續紅色字串=" & 連續紅色字串
'Debug.Print 連續紅色字串
End If
'''''''A尾''''''''''''''
''''B段'''''''最後一個字元是紅色,直接印出
If i = 字串長度 Then
''''''''''''''''''''''''''''''相對列位 = ActiveCell.Row
'''''' ' 字串數 = 字串數 + 1 ''''''''''''''
''''''''''''''''Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
''''''''''''''''連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(I, 1).Text
Worksheets(新增工作表).Cells(j, k).Value = 連續紅色字串
Debug.Print "連續紅色字串 結尾=" & i & 連續紅色字串
連續紅色字串 = ""
End If
Next i
End If
'相對列位 = ActiveCell.Row
''Worksheets(新增工作表).Cells(J, k) = 連續紅色字串
'MsgBox "連續紅色字串=" & 連續紅色字串
Next k
Next j
End Sub
Sub CHECK_CONTENT_LENGTH_SEPERATE() ' 判斷儲存格字元數,並累加紅色字串 次數
Dim 字串長度 As Integer
Dim 連續紅色字串 As String
Dim 相對列位 As Integer
Dim 可新增 As Boolean
新增工作表 = ActiveSheet.Name & (簡化)
連續紅色字串 = ""
字串數 = 0
'ActiveCell.Characters.Count
字串長度 = ActiveCell.Characters.Count
MsgBox "字串長度=" & 字串長度
For i = 1 To 字串長度
' Debug.Print "第" & I & "字元=" & ActiveCell.Characters(I, 1).Font.Color
' MsgBox "第" & I & "字元=" & ActiveCell.Characters(I, 1).Text & " ;顏色" & ActiveCell.Characters(I, 1).Font.Color
If ActiveCell.Characters(i, 1).Font.Color = 255 Then ' 判段字串顏色=5 ,並累加字串
連續紅色字串 = 連續紅色字串 & ActiveCell.Characters(i, 1).Text
'MsgBox "連續紅色字串=" & 連續紅色字串
Debug.Print 連續紅色字串
End If
If ActiveCell.Characters(i, 1).Font.Color = 255 And i = 字串長度 Then
相對列位 = ActiveCell.Row
字串數 = 字串數 + 1 ''''''''''''''
Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
連續紅色字串 = ""
End If
If ActiveCell.Characters(i, 1).Font.Color <> 255 Then
相對列位 = ActiveCell.Row
字串數 = 字串數 + 1 ''''''''''''''''''
Worksheets(新增工作表).Cells(相對列位, 字串數) = 連續紅色字串
連續紅色字串 = ""
End If
Next i
'MsgBox "連續紅色字串=" & 連續紅色字串
End Sub
************************
可能遇到的困難
1.Mac 顏色與MS 顏色編碼可能不同,所以設定顏色可能會變,字元碼也會不同
==>可以利用即時視窗輸入 來確認顏色碼 (列與欄位根據自己的文本內容)
print cells(11,3).text
答:
print cells(11,3).font.color
255
2.老是忘記 用 來驅動 目前工作欄
Worksheets(原工作表).Cells(j, k).Activate
3.判斷每個字顏色 (關鍵技巧,找了很多網頁沒有現成的全文判別)
字串長度 作為 迴圈 來進行 每個字確認
使用到 activecell.characters(start , length).font.color
4.最後一個字如還是紅色 則必須判別是否為最後一個字元,否則不會印出
**********************************
2015年8月13日 星期四
Mac OS X 安裝ARDUINO 1.5.8 IDE for Yin and Ardublock
這裡特別寫篇文說,因為發現沒有找到文章指示很明白。
所以起初以為沒有裝好,而以為ARDUINO for Mac版本不佳。而沒有使用,然而正准備移除時,才赫然發現原來是這樣。(常期使用windows,不熟悉Mac)。
我的系統:
Mac operation system :Mac OS X 10.7
我的電腦:2012年版 Mac Air 11"-2012 year's
言歸正傳
1:先去年ARDUINO.cc 下載ARDUINO IDE for Mac OS(你可以安裝1.0.6,如果有ARDUINO Yun 則要安裝1.5.8版 for Yun,
當然沒有Yun也可以安裝IDE 1.5.8版)
http://www.arduino.cc/en/Main/Software
2:然后,下載完開啟。
開起成功后,關畢。再把映像檔移入\app 應用程式。 資料夾底下。(把finder 打開,就可以看到。)
然後開起程式後,你會發現功能表怎麼不見了?其實不在應用程式視窗上,而是在最上方的功能表,注意到了嗎?大視窗功能表隨開起的應用程式變化選項。原來Mac跟windows這麼不同。
3:下載Ardublock ,從底下網址下載安裝程式。Blog.ardublock.com。
你可以進入getting started with Ardublock 頁籤,然後按download 提示字。
注意(1)下載頁引導到某網頁,記得不要被騙去按廣告或下載一些不要的程式。可以從下載監控視窗看是否有自動下載,如沒有,再看下載網頁上哪個是真正下載Ardublock 。
(2):你下載的可能是較舊版。有些版本安裝後可能具有的元件不多。
我下載的是20130703。版本。
4:下載打開後就如底下
然后多多看blog跟別人的案例熟悉用法
也可以買書,cave 團隊有出一本。
======================2015年1月3日 星期六
Lab02 ARDUINO-Basic Fade Example:第二個實驗逐漸變暗LED
達到甚麼?
控制 LED 逐漸暗下,瞭解以PWM 的 Digital Pin 輸出控制變化
Arduino 預設程式example 之basic\fade
程式碼:
控制 LED 逐漸暗下,瞭解以PWM 的 Digital Pin 輸出控制變化
Arduino 預設程式example 之basic\fade
程式碼:
/* Fade This example shows how to fade an LED on pin 9 using the analogWrite() function. This example code is in the public domain. */ int led = 9; // the pin that the LED is attached to int brightness = 0; // how bright the LED is int fadeAmount = 5; // how many points to fade the LED by // the setup routine runs once when you press reset: void setup() { // declare pin 9 to be an output: pinMode(led, OUTPUT); } // the loop routine runs over and over again forever: void loop() { // set the brightness of pin 9: analogWrite(led, brightness); // change the brightness for next time through the loop: brightness = brightness + fadeAmount; // reverse the direction of the fading at the ends of the fade: if (brightness == 0 || brightness == 255) { fadeAmount = -fadeAmount ; } // wait for 30 milliseconds to see the dimming effect delay(30); }
Lab03-ARDUINO光敏電阻感測元件:第3個實驗
A:要學甚麼?
光敏電阻 隨外界光強度變化電阻值=>光線越亮 電阻越低.
PWM 輸出頻度 控制輸出 LED 功率 => 亮度變化
B:達到效果?
越暗 燈要越亮=>自動化的點燈 跟 節能
C:材料
ARDUINO UNO
D:程式碼
光敏電阻 隨外界光強度變化電阻值=>光線越亮 電阻越低.
PWM 輸出頻度 控制輸出 LED 功率 => 亮度變化
B:達到效果?
越暗 燈要越亮=>自動化的點燈 跟 節能
C:材料
ARDUINO UNO
光敏電阻 *1
紅色M5 直插LED*1
220Ω直插電阻
麵包板*1
麵包板跳線*1 紮
int potpin=0;//定義類比介面0 連接光敏電阻 int ledpin=11;//定義數位介面11 輸出PWM 調節LED 亮度 int val=0;//定義變數val int PL=0; //初始化 PWM 輸出 void setup() { pinMode(ledpin,OUTPUT);//定義數位介面11 為輸出 Serial.begin(9600);//設置串列傳輸速率為9600 } void loop() { val=analogRead(potpin);//讀取感測器的模擬值並賦值給val Serial.println(val);//顯示val 變數數值 PL=(val/4); analogWrite(ledpin,PL);// 打開LED 並設置亮度(PWM 輸出最大值255) delay(500);//延時0.5 秒....太快會眼花 }
E:線路圖
F:結果照片
一般狀況下(家裡光源:Val=350上下,下午17點街道環境光源:Val=28上下差十倍)。
經量測電流5mA;光敏電阻兩端電壓1.58V;0.5mA。
把光敏電組遮蓋達到模擬,環境 暗=>LED 更亮
環境亮=>LED暗
要注意的是, 感光的部分 用類比迴路偵測=>偵測到的數值=>改變 數位輸出的脈波頻度=>LED光強度改變
程式裡 數值的傳遞要注意, 數值格式類型,是否已經宣告,公式代換後的輸出變數 最大值是否超過 等等
G:結果影片
H:應用思考
1.光敏電阻 電阻值 跟 照度計的 照度對應 會是如何? 可否作為一個簡易照度計? 如何使簡易照度計精度更高?
1-1:光源強度不同,變更串接電阻的大小來應對。
2.如何同時控制 多個 LED 來顯示照度 階層?
3.如何 控制 大電流 電燈 ? 接一個 繼電器 ?
3-1:在固定亮度下,因感應到的光敏電阻值還是會一值浮動變化在一個範圍。所以需設定範圍值來起動開關。否則電燈會開開關關。
4.ARDUINO 電壓輸出 分層 0-255, 電壓輸入 分程 0-1023 (1024階),每階差 4.887mV ?或其他值?
5.可否作為高速計數器? 怎麼做? ARDUINO 感應速度 對應 高速變化 會是多少 次/sec?
2015年1月2日 星期五
S4A-安裝步驟-Scratch For ARDUINO
1:Scratch 是什麼?
Scratch 是一種圖形化程式設計軟體。Scratch 跟app inventor 機乎是一樣的長相。
Scratch寫程式過程,一般有人稱堆積木。
2:S4A 是什麼?
Scratch For ARDUINO (S FOR A=S4A)
是西班牙Citilab(社會與數字創新中心)對scratch 改造加強對ARDUINO 硬體支援。
2:點選第五個選項-download
或者拉到下面下載安裝。根據你所使用的作業系統,按下下載。
2015/1/2 竟然Mac下載不了?
訂閱:
文章 (Atom)