##title##

2020年5月29日

Excel:INDEX+MATCH,結合多個欄位的比對並回傳值

除了之前提過的:Excel:INDEX+MATCH=退著VLOOKUP

INDEX+MATCH還可以結合多個欄位的比對並回傳值。

例如A欄位、B欄位和C欄位結合一起,才是想要查找的目標C1與D1的結合。

可以用這樣的方式查找:
=index(要回傳的欄位,match(要結合的目標,要查找的目標,0))
例如。
=index(F:F,match(A1&B1&C1,D1&E1,0))
或可以用字串的方式,例如。
=index(F:F,match(A1&B1&"專案X"&C1,D1&E1,0))


參考資料:
https://junshienwu.pixnet.net/blog/post/347876995-%5Bexcel%5D-%E8%BC%B8%E5%85%A5%E5%85%A9%E5%80%8B%E6%AF%94%E5%B0%8D%E6%A2%9D%E4%BB%B6%EF%BC%8C%E5%B8%B6%E5%87%BA%E6%89%80%E5%B0%8D%E6%87%89%E7%9A%84%E6%AC%84%E4%BD%8D

2020年5月28日

Excel、Google Sheet:陣列公式

假設一個資料長這樣:

A B C
4 4 5
3 3 5
4 4 5
3 3 5
2 2 5
2 2 3


想要的目標是如果A等於B的時候,加總C。

Excel雖然有SUMIF函數,但如果公式是:

=SUMIF(A:A,B:B,C:C)


這樣是不能運作的,因為SUMIF的條件是等於某個值或字串。

同理,如果公式是:

=sum(if(A:A=B:B,C:C,""))


,這樣也不能運作

所以這時候可以改用陣列公式:
=sum(if(A:A=B:B,C:C,""))

陣列公式輸入後要按Ctrl+Shift+Enter才能作用。

至於在Google試算表上,按Ctrl+Shift+Enter則會自動將上述公式改為:
=ArrayFormula(=sum(if(A:A=B:B,C:C,"")))

2020年5月20日

Autohotkey:依序產生變數,以及依序取出變數

可以透過:=左邊也是變數的方式來組合變數,例如透過loop的方式,把行列的值拿來拼成變數,像是%1_1%,%1_2%,%2_1%,%2_2%。

但要用依序讀取則需要特殊寫法,在最前面加一個%。

範例如下:


F1::
Loop, Read, %A_ScriptDir%\test.txt
{
LineNumber := A_Index ;先令Loop, Read得到的A_Index(此處為行數)為變數LineNumber
Loop, parse, A_LoopReadLine, CSV ;以CVS格式切每行內容(用逗號切)
 {
 if A_Index = 1 ;意思是擷取每行第1個(在此為時間)
 %LineNumber%_%A_Index% := A_LoopField
 if A_Index = 2 ;意思是擷取每行第2個(在此為內容)
 %LineNumber%_%A_Index% := A_LoopField
 }
}
front = 1
loop, 2
{
back = 1
loop, 2
 {
 msgbox, % %front%_%back% ;組合變數的方式在最前面加一個%
 back := back + 1
 }
front := front + 1
}
return


2020年5月18日

物理學:量子力學

量子力学和相对论的开端是什么?李永乐老师8分钟告诉你(2018最新)
黑體輻射、普朗克常數、波粒二象性

耶鲁大学的实验推翻了量子力学吗?如何拯救薛定谔的猫?
量子疊加態、薛定谔(薛丁格)的貓


和意识无关!电子双缝干涉实验神奇在哪里?波粒二象性的由来

攝影機觀察路徑只是思想實驗、怎麼做到只有一個光子


量子故事会(3)黑体辐射和量子力学创始人普朗克的故事
黑體輻射、普朗克常數


量子故事会(4)爱因斯坦推陈出新解释了光电效应
光電效應


量子故事会(10)P乘Q不等于Q乘P?矩阵力学诞生!
矩陣力學、P*Q≠Q*P


量子故事会(11)物质竟是一个波?物质波和德布罗意其人
物質波、薛定谔(薛丁格)方程、波動力學、矩陣力學


量子故事会(12)上帝掷骰子吗?十分钟了解波函数和不确定性原理
波函數、P*Q≠Q*P、不確定性原理(測不準原理)


量子故事会(14)爱因斯坦为啥不信量子力学?EPR佯谬说了啥?
EPR佯謬、思想實驗、量子糾纏、因果律、定域實在論


量子故事会(15)薛定谔的猫,一个被你误解了的思想实验
薛定谔(薛丁格)的貓、思想實驗、量子疊加態、量子糾纏、量子去相干


量子故事会(16)贝尔不等式啥意思?也许你还不了解这个世界
貝爾不等式、量子糾纏、隱變量不存在


双缝干涉(二)天才托马斯杨横空出世!波粒大战进入第二回合!
衍射、雙縫干涉、波粒二象性、物質波


双缝干涉(三)电子的双缝干涉实验和意识有关?也许没有你想的那么神奇!
衍射、雙縫干涉、物質波、量子疊加態、波函數坍縮


双缝干涉(四)现在的选择可以改变过去吗?通俗易懂的量子延迟选择实验


雙縫干涉、物質波、量子疊加態、波函數坍縮、選擇延遲實驗、因果律


双缝干涉(五)量子力学告诉我们“鱼和熊掌不可兼得”!神奇的量子擦除实验


一個光子為何可分、互補性原理 



【科普】一段視頻讓你明白什麼是量子力學


量子在波函數塌縮前,都是以可能存在不同可能得疊加態,所以可能是和自己干涉



延迟选择量子擦除实验 I (中文字幕)



延迟选择量子擦除实验 II (中文字幕)



【俗說量子】延遲選擇!量子擦除!雙縫干涉實驗的「真相」! Double Slit Experiment| Linvo說宇宙
只是因為量子糾纏以及波函數坍縮導致。


2020年5月13日

Autohotkey:以GUI輸入文字作為變數

嘗試把一個檔案自動化檢查MD5,並加上註記寫入txt檔作為紀錄,但記錄時需要打字,所以研究了一下如何以GUI輸入文字作為變數。


; ==============================GUI全域設定==============================
GuiCloseOK:
GuiControlGet, MyEdit ;輸入內容存為變數MyEdit
Gui, Destroy
return
GuiCloseCancel:
MyEdit:=""
Gui, Destroy
return
; ==============================全域設定結束==============================

::/test::
Gui, Color, White
Gui, Add, Edit, x22 y19 w240 h120 vMyEdit, 異動了甚麼? ;GUI內文,輸入內容寫入MyEdit
Gui, Add, Button, x22 y179 w100 h30 gGuiCloseOk, Ok ;GUI點OK觸發gGuiCloseOk
Gui, Show, w286 h231, log ;GUI標題
WinGetPos,,, Width, Height, log ;取得視窗座標
WinMove, log,, (A_ScreenWidth/2)-(Width/2), (A_ScreenHeight/2)-(Height/2) ;調整視窗座標
WinWaitClose, log
Gui, Destroy ;關閉GUI
StringReplace, MyEdit, MyEdit, `r`n, , All ; 移除MyEdit中所有的 CR+LF
Sleep, 5000 ;卸載後無法馬上解析檔案,停留5秒
; 以HashMyFiles.exe將目標檔案輸出MD5至txt,排除SHA1、CRC32、SHA256、SHA512、SHA384
Run "%A_ScriptDir%\..\Tools\hashmyfiles-x64\HashMyFiles.exe" /SHA1 0 /CRC32 0 /SHA256 0 /SHA512 0 /SHA384 0 /SaveDirect /file %DropboxDIR%\%file% /scomma %DropboxDIR%\temp.txt
SetTimer, fileMD5check, -10000 ;10秒後執行fileMD5check
return

fileMD5check:
Loop, Read,  %DropboxDIR%\temp.txt
{
LineNumber := A_Index ;先令Loop, Read得到的A_Index(此處為行數)為變數LineNumber
Loop, parse, A_LoopReadLine, CSV ;以CVS格式切每行內容(用逗號切)
 {
 if A_Index = 1 ;意思是擷取每行第1個(在此為檔名)
 FileAppend, %A_YYYY%/%A_MM%/%A_DD% %A_Hour%:%A_Min%:%A_Sec%@%A_ComputerName%`,%A_LoopField%`,,  %DropboxDIR%\md5.txt ;時間、電腦名稱、檔名寫入文字文件
 if A_Index = 2 ;意思是擷取每行第2個(在此為MD5)
 FileAppend, %A_LoopField%`,%MyEdit%`n, %DropboxDIR%\md5.txt ;MD5、輸入的文字寫入文字文件
 }
FileDelete,  %DropboxDIR%\temp.txt
Gui, +AlwaysOnTop +Disabled -SysMenu +Owner  ; +Owner 避免顯示任務欄按鈕.
Gui, Color, White
Gui, Add, Text,, file MD5 hash value checksum done!`r`nMD5 is %A_LoopField%`r`n(2秒後自動關閉)
Gui, Show, NoActivate, MD5 Hash  ; NoActivate 讓當前活動窗口繼續保持活動狀態.
Sleep, 2000
Gui, Destroy ;關閉GUI
Return

參考資料:

2020年5月12日

Excel:INDIRECT應用,函數的引數使用欄位的值

有時候函數的引數,會希望包含在欄位的值(例如A1欄的值是ABC),可以用INDIRECT這樣寫。


INDIRECT(A1&"!O:O")


這樣就會導向ABC這個sheet中的O欄。


語法

INDIRECT(ref_text, [a1])

INDIRECT 函數語法具有下列引數:

    Ref_text    必要。單一儲存格的參照,其中包含 A1 樣式參照、R1C1 樣式參照、定義為參照的名稱,或定義為文字字串的儲存格參照。如果 ref_text 不是有效的儲存格參照,INDIRECT 會傳回 #REF! 錯誤值。

        如果 ref_text 參照另一個活頁簿 (外部參照),則必須開啟另一個活頁簿。如果來源活頁簿未開啟,INDIRECT 會傳回 #REF! 錯誤值。

        附註    Excel Web App 不支援外部參照。

        如果 ref_text 參照的儲存格範圍超出 1,048,576 的列限制或 16,384 (XFD) 的欄限制,INDIRECT 會傳回 #REF! 錯誤。

        附註    在 Microsoft Office Excel 2007 之前的舊版 Excel 中,此行為是不同的,會忽略超出的限制並傳回值。

    A1    選用。指定 ref_text 儲存格中所包含參照類型的邏輯值。

        如果 a1 為 TRUE 或省略,則 ref_text 會被解釋成 A1 樣式參照。

        如果 a1 為 FALSE,則 ref_text 會被解譯成 R1C1 樣式參照。



https://support.office.com/zh-tw/article/INDIRECT-%E5%87%BD%E6%95%B8-474b3a3a-8a26-4f44-b491-92b6306fa261

2020年5月9日

bat:用for迴圈,delims用逗號解析,tokens取得指定位置字串

例如假設一個temp.txt內容是這樣的結構:

aaa.txt,fc313413c21665fb888ed96821b5849c,,,,,,,2020/3/1 下午 10:22:30,2020/5/9 下午 10:02:56,
bbb.txt,53b568c4937817f672432488c19ed67a,,,,,,,2020/5/9 下午 10:27:55,2020/5/9 下午 10:27:53,



想用for將文件以delims用逗號解析,每行取得第1和第2部分內容ECHO輸出到new.txt的寫法:

REM 去除DATE系統中變數中/部分指定為變數NDATE
set NDATE=%DATE:/=%
REM 只擷取NDATE變數中第1~8字元(在此處為日期的YYMMDD)
set SDATE=%NDATE:~0,8%
For /f "delims=, tokens=1,2" %a in (temp.txt) do ECHO %SDATE%,%a,%b>>new.txt



new.txt內就會寫入像這樣的內容:
aaa.txt,fc313413c21665fb888ed96821b5849c
bbb.txt,53b568c4937817f672432488c19ed67a

但如果寫在bat檔裡要執行for得把%寫為%%,然後如果是變數還是要%變數%,像這樣
REM 去除DATE系統中變數中/部分指定為變數NDATE
set NDATE=%DATE:/=%
REM 只擷取NDATE變數中第1~8字元(在此處為日期的YYMMDD)
set SDATE=%NDATE:~0,8%
For /f "delims=, tokens=1,2" %%a in (temp.txt) do ECHO %SDATE%,%%a,%%b>>new.txt

  • 參考:

Windows bat指令碼——for迴圈用法詳解(一)
https://www.itread01.com/content/1548430389.html

BAT批次指令: For的功能介紹
http://forum.twbts.com/thread-10170-1-1.html

BAT指令碼編寫要點(1)_特殊字元
https://www.itread01.com/content/1550475943.html

探密BAT腳本技術 解放你的雙手 減少重複勞動 原來如此簡單
https://kknews.cc/zh-tw/tech/ag26n3v.html

Windows Batch 常用命令
https://dotblogs.com.tw/grayyin/2016/07/28/171747

DOS指令 -- SET和變數
http://bigpxuan.blogspot.com/2016/08/dos-set.html

BAT批次指令: For的功能介紹
http://winbat-20170804.blogspot.com/2017/08/bat-for.html

bat:日期字元做變數當檔名,指令以相對路徑操作

例如以下指令可抽取日期8字元作為變數,當作copy檔名的一部分。

rem 去除DATE系統中變數中/部分指定為變數NDATE
set NDATE=%DATE:/=%
rem 只擷取NDATE變數中第1~8字元(在此處為日期的YYMMDD)
set SDATE=%NDATE:~0,8%
rem 以相對路徑將上上層檔案copy到當前層路徑並更名,並回應xcopy f(因為xcopy會問要以檔案或目錄copy)
echo f|xcopy ..\..\test.txt .\%SDATE%test.txt

參考:
相對路徑
https://gist.github.com/kiohtc/1266787

抽取日期
http://jdev.tw/blog/6037/batch1-windows-date-environment-variable

變數
http://forum.twbts.com/thread-10179-1-1.html

用echo填入需選擇的指令(例如xcopy問你是檔案還是資料夾)
https://codertw.com/%E5%89%8D%E7%AB%AF%E9%96%8B%E7%99%BC/389102/

如何在 Batch 檔取得系統的日期、時間欄位
https://blog.miniasp.com/post/2009/11/03/How-to-get-system-date-time-in-batch-file-part-III

去除環境變數DATE與TIME內的空白
http://jdev.tw/blog/743/windows-batch-set-arguments-handling